From b3b01d60b6428a76e17e5a697cbaa78abc4ec620 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Mon, 9 Mar 2026 13:15:50 +0800 Subject: [PATCH 01/49] chore(docs): applyRedaction() --- api/class/annotationmanager.md | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/api/class/annotationmanager.md b/api/class/annotationmanager.md index e50a121..c13c461 100644 --- a/api/class/annotationmanager.md +++ b/api/class/annotationmanager.md @@ -20,6 +20,7 @@ The `Dynamsoft.DDV.annotationManager` instance will be created automatically as | API Name | Description | | ------------------------------ | ------------------------------------------------------------ | +| [`applyRedactions()`](#applyredactions) | Apply redaction annotations. | | [`createAnnotation()`](#createAnnotation) | Create an annotation instance. | | [`getAnnotationsByUids()`](#getannotationsbyuids) | Get annotations by annotation uids. | | [`getAnnotationsByPage()`](#getannotationsbypage) | Get annotations in specified page. | @@ -55,6 +56,38 @@ The `Dynamsoft.DDV.annotationManager` instance will be created automatically as ## Methods +### applyRedactions() + +Apply redaction annotations. + +**Syntax** + +```typescript +applyRedactions(pageUid: string, annotationUids?: string[]): Promise; +``` + +**Parameters** + +`pageUid`: Specify the page to apply redaction annotations. + +`annotationUids`: Specify the array of uids of redaction annotations to apply for one page. If it is empty, all the redaction annotations on the specified page will be used. + +**Return value** + +A Promise object which indicates whether the operation is successful or not. + +**Exception** + + Error Code | Error Message +--------|----------------------------------------------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. + -80105 | *XXX(API)*: The specified page(s) do not exist. + -80324 | The specified annotation(s) contain annotations other than redaction annotations. + -80325 | The specified page does not contain redaction annotations. + -80327 | The specified annotation(s) are not on the specified page or do not exist. + + ### createAnnotation() Create an annotation instance and add the created instance to the specified page. From a1ef91daac97dd7c5412abfef421f33ffe6fe87d Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Mon, 9 Mar 2026 13:33:18 +0800 Subject: [PATCH 02/49] Create redaction.md --- api/class/annotation/redaction.md | 182 ++++++++++++++++++++++++++++++ 1 file changed, 182 insertions(+) create mode 100644 api/class/annotation/redaction.md diff --git a/api/class/annotation/redaction.md b/api/class/annotation/redaction.md new file mode 100644 index 0000000..ac0fca4 --- /dev/null +++ b/api/class/annotation/redaction.md @@ -0,0 +1,182 @@ +--- +layout: default-layout +needAutoGenerateSidebar: true +needGenerateH3Content: true +noTitleIndex: true +title: Dynamsoft Document Viewer API Reference - Redaction Class +keywords: Documentation, Dynamsoft Document Viewer, API Reference, Redaction Class +breadcrumbText: Redaction Class +description: Dynamsoft Document Viewer Documentation API Reference Redaction Class Page +--- + +# Redaction Class + +## API Index + +| API Name | Description | +| --------------------------------------- | ------------------------------------------------------------------------------------------- | +| [`uid`](#uid) | Return the uid of the annotation. | +| [`pageUid`](#pageuid) | Return the uid of the page where the annotation is located. | +| [`source`](#source) | Return the source of the annotation. | +| [`type`](#type) | Return the type of the annotation | +| [`creationDate`](#creationdate) | Return the creation date of the annotation. | +| [`flattened`](#flattened) | Flattens the annotation onto the image layer, or inspect if the annotation is flattened. | +| [`modificationDate`](#modificationdate) | Return the modification date of the annotation. | +| [`getOptions()`](#getoptions) | Get the annotation options. | +| [`updateOptions()`](#updateoptions) | Update the annotation options. | + +## uid + +Return the uid of the annotation. + +**Syntax** + +```typescript +readonly uid: string; +``` + +## pageUid + +Return the uid of the page where the annotation is located. + +**Syntax** + +```typescript +readonly pageUid: string; +``` + +**Remark** + +- It will return `''`, if the annotation is deleted. + +## source + +Return the source of the annotation. Possible values: + +* user: the annotation is created by the user's action +* file: the annotation is created from a PDF file +* api: the annotation is created with code + +**Remark** + +It will return `''`, if the annotation is deleted. + +## type + +Return the type of the annotation: `redaction`. + +All annotation types: + +```ts +"rectangle" | "ellipse" | "line" | "polygon" | "polyline" | "ink" | "textBox" | "textTypewriter" | "stamp" | "highlight" | "underline" | "strikeout" | "incomplete" | "redaction" | "unknown" +``` + +## creationDate + +Return the creation date of the annotation. + +**Syntax** + +```typescript +readonly creationDate: string; +``` + +**Remark** + +- The string would be `D:YYYYMMDDHHmmSSOHH'mm'`, like `D:20230101085959-08'00'`. + +## flattened + +Flattens the annotation onto the image layer, or inspect if the annotation is flattened. + +**Syntax** + +```typescript +flattened: boolean; //Default value is `false`. +``` + +**Remark** + +Flattened annotations move below all unflattened annotations on the page, and are stacked amongst themselves accordingly. + +Flattened annotations become part of the page layer upon file export and cease to be annotations. + +## modificationDate + +Return the modification date of the annotation. + +**Syntax** + +```typescript +readonly modificationDate: string; +``` + +**Remark** + +- The string would be `D:YYYYMMDDHHmmSSOHH'mm'`, like `D:20230101085959-08'00'`. +- It will return `''`, if the annotation is deleted. +- If the annotation is created but not be modified after adding, it equals to [`creationDate`](#creationdate). + +## getOptions() + +Get the annotation options. + +**Syntax** + +```typescript +getOptions(): RedactionAnnotationOptions; +``` + +**Return value** + +The object of redaction annotation options. Please refer to [`RedactionAnnotationOptions`](/api/interface/annotationinterface/redactionannotationoptions.md). + +**Code Snippet** + +```typescript +// Given that editViewer is an existing instance of EditViewer and a document is currently open. +const pageUid = editViewer.indexToUid(0); +const redaction = Dynamsoft.DDV.annotationManager.createAnnotation(pageUid, "redaction"); // Create a default Redaction annotation instance. +const options = redaction.getOptions(); +``` + +## updateOptions() + +Update the annotation options. + +**Syntax** + +```typescript +updateOptions(redactionAnnotationOptions: RedactionAnnotationOptions): boolean; +``` + +**Parameters** + +`redactionAnnotationOptions`: The new redaction annotation options. Please refer to [`RedactionAnnotationOptions`](/api/interface/annotationinterface/redactionannotationoptions.md). + +**Return value** + +`true`: Successfully. + +`false`: Failed. + +**Code Snippet** + +```typescript +// Given that editViewer is an existing instance of EditViewer and a document is currently open. +const pageUid = editViewer.indexToUid(0); +const redaction = Dynamsoft.DDV.annotationManager.createAnnotation(pageUid, "redaction"); // Create a default Redaction annotation instance. +const options = { + background: "red", +}; +redaction.updateOptions(options); // Update the background of the redaction to red. +``` + +**Warning** + + Error Code | Error Message | API Return Value +--------|-----------------------------------------------------|---------------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | `false` + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. | `false` + -80323 | The redaction annotation has already been applied. | `false` + \ No newline at end of file From c5918c9d9a2ae655b364fe3aadbcc573285eca4a Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Mon, 9 Mar 2026 13:37:39 +0800 Subject: [PATCH 03/49] add redaction to annotation types list for all annotation class pages --- api/class/annotation/ellipse.md | 2 +- api/class/annotation/highlight.md | 2 +- api/class/annotation/incomplete.md | 2 +- api/class/annotation/ink.md | 2 +- api/class/annotation/line.md | 2 +- api/class/annotation/polygon.md | 2 +- api/class/annotation/polyline.md | 2 +- api/class/annotation/rectangle.md | 2 +- api/class/annotation/redaction.md | 3 +-- api/class/annotation/stamp.md | 2 +- api/class/annotation/strikeout.md | 2 +- api/class/annotation/textbox.md | 2 +- api/class/annotation/texttypewriter.md | 2 +- api/class/annotation/underline.md | 2 +- api/class/annotation/unknown.md | 2 +- 15 files changed, 15 insertions(+), 16 deletions(-) diff --git a/api/class/annotation/ellipse.md b/api/class/annotation/ellipse.md index 780f796..48f402b 100644 --- a/api/class/annotation/ellipse.md +++ b/api/class/annotation/ellipse.md @@ -93,7 +93,7 @@ Return the type of the annotation: `ellipse`. All annotation types: ```ts -"rectangle" | "ellipse" | "line" | "polygon" | "polyline" | "ink" | "textBox" | "textTypewriter" | "stamp" | "highlight" | "underline" | "strikeout" | "incomplete" | "unknown" +"rectangle" | "redaction" | "ellipse" | "line" | "polygon" | "polyline" | "ink" | "textBox" | "textTypewriter" | "stamp" | "highlight" | "underline" | "strikeout" | "incomplete" | "unknown" ``` ## creationDate diff --git a/api/class/annotation/highlight.md b/api/class/annotation/highlight.md index 5eaa7fc..a9c6aa1 100644 --- a/api/class/annotation/highlight.md +++ b/api/class/annotation/highlight.md @@ -68,7 +68,7 @@ Return the type of the annotation: `highlight`. All annotation types: ```ts -"rectangle" | "ellipse" | "line" | "polygon" | "polyline" | "ink" | "textBox" | "textTypewriter" | "stamp" | "highlight" | "underline" | "strikeout" | "incomplete" | "unknown" +"rectangle" | "redaction" | "ellipse" | "line" | "polygon" | "polyline" | "ink" | "textBox" | "textTypewriter" | "stamp" | "highlight" | "underline" | "strikeout" | "incomplete" | "unknown" ``` ## creationDate diff --git a/api/class/annotation/incomplete.md b/api/class/annotation/incomplete.md index 42b2ef8..4f748ab 100644 --- a/api/class/annotation/incomplete.md +++ b/api/class/annotation/incomplete.md @@ -75,7 +75,7 @@ Return the type of the annotation: `incomplete`. All annotation types: ```ts -"rectangle" | "ellipse" | "line" | "polygon" | "polyline" | "ink" | "textBox" | "textTypewriter" | "stamp" | "highlight" | "underline" | "strikeout" | "incomplete" | "unknown" +"rectangle" | "redaction" | "ellipse" | "line" | "polygon" | "polyline" | "ink" | "textBox" | "textTypewriter" | "stamp" | "highlight" | "underline" | "strikeout" | "incomplete" | "unknown" ``` ## creationDate diff --git a/api/class/annotation/ink.md b/api/class/annotation/ink.md index d910812..0df9af2 100644 --- a/api/class/annotation/ink.md +++ b/api/class/annotation/ink.md @@ -87,7 +87,7 @@ Return the type of the annotation: `ink`. All annotation types: ```ts -"rectangle" | "ellipse" | "line" | "polygon" | "polyline" | "ink" | "textBox" | "textTypewriter" | "stamp" | "highlight" | "underline" | "strikeout" | "incomplete" | "unknown" +"rectangle" | "redaction" | "ellipse" | "line" | "polygon" | "polyline" | "ink" | "textBox" | "textTypewriter" | "stamp" | "highlight" | "underline" | "strikeout" | "incomplete" | "unknown" ``` ## creationDate diff --git a/api/class/annotation/line.md b/api/class/annotation/line.md index b304544..64420fa 100644 --- a/api/class/annotation/line.md +++ b/api/class/annotation/line.md @@ -88,7 +88,7 @@ Return the type of the annotation: `line`. All annotation types: ```ts -"rectangle" | "ellipse" | "line" | "polygon" | "polyline" | "ink" | "textBox" | "textTypewriter" | "stamp" | "highlight" | "underline" | "strikeout" | "incomplete" | "unknown" +"rectangle" | "redaction" | "ellipse" | "line" | "polygon" | "polyline" | "ink" | "textBox" | "textTypewriter" | "stamp" | "highlight" | "underline" | "strikeout" | "incomplete" | "unknown" ``` ## creationDate diff --git a/api/class/annotation/polygon.md b/api/class/annotation/polygon.md index d0f7047..532e137 100644 --- a/api/class/annotation/polygon.md +++ b/api/class/annotation/polygon.md @@ -92,7 +92,7 @@ Return the type of the annotation: `polygon`. All annotation types: ```ts -"rectangle" | "ellipse" | "line" | "polygon" | "polyline" | "ink" | "textBox" | "textTypewriter" | "stamp" | "highlight" | "underline" | "strikeout" | "incomplete" | "unknown" +"rectangle" | "redaction" | "ellipse" | "line" | "polygon" | "polyline" | "ink" | "textBox" | "textTypewriter" | "stamp" | "highlight" | "underline" | "strikeout" | "incomplete" | "unknown" ``` ## creationDate diff --git a/api/class/annotation/polyline.md b/api/class/annotation/polyline.md index c4cd44c..955faa3 100644 --- a/api/class/annotation/polyline.md +++ b/api/class/annotation/polyline.md @@ -88,7 +88,7 @@ Return the type of the annotation: `polyline`. All annotation types: ```ts -"rectangle" | "ellipse" | "line" | "polygon" | "polyline" | "ink" | "textBox" | "textTypewriter" | "stamp" | "highlight" | "underline" | "strikeout" | "incomplete" | "unknown" +"rectangle" | "redaction" | "ellipse" | "line" | "polygon" | "polyline" | "ink" | "textBox" | "textTypewriter" | "stamp" | "highlight" | "underline" | "strikeout" | "incomplete" | "unknown" ``` ## creationDate diff --git a/api/class/annotation/rectangle.md b/api/class/annotation/rectangle.md index 7c54891..30e9f86 100644 --- a/api/class/annotation/rectangle.md +++ b/api/class/annotation/rectangle.md @@ -92,7 +92,7 @@ Return the type of the annotation: `rectangle`. All annotation types: ```ts -"rectangle" | "ellipse" | "line" | "polygon" | "polyline" | "ink" | "textBox" | "textTypewriter" | "stamp" | "highlight" | "underline" | "strikeout" | "incomplete" | "unknown" +"rectangle" | "redaction" | "ellipse" | "line" | "polygon" | "polyline" | "ink" | "textBox" | "textTypewriter" | "stamp" | "highlight" | "underline" | "strikeout" | "incomplete" | "unknown" ``` ## creationDate diff --git a/api/class/annotation/redaction.md b/api/class/annotation/redaction.md index ac0fca4..a72d893 100644 --- a/api/class/annotation/redaction.md +++ b/api/class/annotation/redaction.md @@ -68,7 +68,7 @@ Return the type of the annotation: `redaction`. All annotation types: ```ts -"rectangle" | "ellipse" | "line" | "polygon" | "polyline" | "ink" | "textBox" | "textTypewriter" | "stamp" | "highlight" | "underline" | "strikeout" | "incomplete" | "redaction" | "unknown" +"rectangle" | "redaction" | "ellipse" | "line" | "polygon" | "polyline" | "ink" | "textBox" | "textTypewriter" | "stamp" | "highlight" | "underline" | "strikeout" | "incomplete" | "unknown" ``` ## creationDate @@ -179,4 +179,3 @@ redaction.updateOptions(options); // Update the background of the redaction to r -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | `false` -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. | `false` -80323 | The redaction annotation has already been applied. | `false` - \ No newline at end of file diff --git a/api/class/annotation/stamp.md b/api/class/annotation/stamp.md index 4634b49..c81fd1f 100644 --- a/api/class/annotation/stamp.md +++ b/api/class/annotation/stamp.md @@ -89,7 +89,7 @@ Return the type of the annotation: `stamp`. All annotation types: ```ts -"rectangle" | "ellipse" | "line" | "polygon" | "polyline" | "ink" | "textBox" | "textTypewriter" | "stamp" | "highlight" | "underline" | "strikeout" | "incomplete" | "unknown" +"rectangle" | "redaction" | "ellipse" | "line" | "polygon" | "polyline" | "ink" | "textBox" | "textTypewriter" | "stamp" | "highlight" | "underline" | "strikeout" | "incomplete" | "unknown" ``` ## creationDate diff --git a/api/class/annotation/strikeout.md b/api/class/annotation/strikeout.md index 350708f..de5eec5 100644 --- a/api/class/annotation/strikeout.md +++ b/api/class/annotation/strikeout.md @@ -68,7 +68,7 @@ Return the type of the annotation: `strikeout`. All annotation types: ```ts -"rectangle" | "ellipse" | "line" | "polygon" | "polyline" | "ink" | "textBox" | "textTypewriter" | "stamp" | "highlight" | "underline" | "strikeout" | "incomplete" | "unknown" +"rectangle" | "redaction" | "ellipse" | "line" | "polygon" | "polyline" | "ink" | "textBox" | "textTypewriter" | "stamp" | "highlight" | "underline" | "strikeout" | "incomplete" | "unknown" ``` ## creationDate diff --git a/api/class/annotation/textbox.md b/api/class/annotation/textbox.md index 521e38b..5b1f015 100644 --- a/api/class/annotation/textbox.md +++ b/api/class/annotation/textbox.md @@ -89,7 +89,7 @@ Return the type of the annotation: `textBox`. All annotation types: ```ts -"rectangle" | "ellipse" | "line" | "polygon" | "polyline" | "ink" | "textBox" | "textTypewriter" | "stamp" | "highlight" | "underline" | "strikeout" | "incomplete" | "unknown" +"rectangle" | "redaction" | "ellipse" | "line" | "polygon" | "polyline" | "ink" | "textBox" | "textTypewriter" | "stamp" | "highlight" | "underline" | "strikeout" | "incomplete" | "unknown" ``` ## creationDate diff --git a/api/class/annotation/texttypewriter.md b/api/class/annotation/texttypewriter.md index ed19aab..1059b6a 100644 --- a/api/class/annotation/texttypewriter.md +++ b/api/class/annotation/texttypewriter.md @@ -88,7 +88,7 @@ Return the type of the annotation: `textTypewriter`. All annotation types: ```ts -"rectangle" | "ellipse" | "line" | "polygon" | "polyline" | "ink" | "textBox" | "textTypewriter" | "stamp" | "highlight" | "underline" | "strikeout" | "incomplete" | "unknown" +"rectangle" | "redaction" | "ellipse" | "line" | "polygon" | "polyline" | "ink" | "textBox" | "textTypewriter" | "stamp" | "highlight" | "underline" | "strikeout" | "incomplete" | "unknown" ``` ## creationDate diff --git a/api/class/annotation/underline.md b/api/class/annotation/underline.md index 90ef67e..fac4eac 100644 --- a/api/class/annotation/underline.md +++ b/api/class/annotation/underline.md @@ -68,7 +68,7 @@ Return the type of the annotation: `underline`. All annotation types: ```ts -"rectangle" | "ellipse" | "line" | "polygon" | "polyline" | "ink" | "textBox" | "textTypewriter" | "stamp" | "highlight" | "underline" | "strikeout" | "incomplete" | "unknown" +"rectangle" | "redaction" | "ellipse" | "line" | "polygon" | "polyline" | "ink" | "textBox" | "textTypewriter" | "stamp" | "highlight" | "underline" | "strikeout" | "incomplete" | "unknown" ``` ## creationDate diff --git a/api/class/annotation/unknown.md b/api/class/annotation/unknown.md index 2175887..5cb4f83 100644 --- a/api/class/annotation/unknown.md +++ b/api/class/annotation/unknown.md @@ -74,7 +74,7 @@ Return the type of the annotation: `unknown`. All annotation types: ```ts -"rectangle" | "ellipse" | "line" | "polygon" | "polyline" | "ink" | "textBox" | "textTypewriter" | "stamp" | "highlight" | "underline" | "strikeout" | "incomplete" | "unknown" +"rectangle" | "redaction" | "ellipse" | "line" | "polygon" | "polyline" | "ink" | "textBox" | "textTypewriter" | "stamp" | "highlight" | "underline" | "strikeout" | "incomplete" | "unknown" ``` ## creationDate From 4028831fa007330f3a6d46a3855bb3d7ae6e892c Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Mon, 9 Mar 2026 14:31:27 +0800 Subject: [PATCH 04/49] Create redactionannotationoptions.md --- .../redactionannotationoptions.md | 119 ++++++++++++++++++ assets/imgs/rectangle-type-redaction.jpg | Bin 0 -> 25370 bytes assets/imgs/text-type-redaction.jpg | Bin 0 -> 21769 bytes 3 files changed, 119 insertions(+) create mode 100644 api/interface/annotationinterface/redactionannotationoptions.md create mode 100644 assets/imgs/rectangle-type-redaction.jpg create mode 100644 assets/imgs/text-type-redaction.jpg diff --git a/api/interface/annotationinterface/redactionannotationoptions.md b/api/interface/annotationinterface/redactionannotationoptions.md new file mode 100644 index 0000000..6f272ba --- /dev/null +++ b/api/interface/annotationinterface/redactionannotationoptions.md @@ -0,0 +1,119 @@ +--- +layout: default-layout +needAutoGenerateSidebar: true +needGenerateH3Content: true +noTitleIndex: true +title: Dynamsoft Document Viewer API Reference - Interface RedactionAnnotationOptions +keywords: Documentation, Dynamsoft Document Viewer, API Reference, Interface RedactionAnnotationOptions +breadcrumbText: Interface RedactionAnnotationOptions +description: Dynamsoft Document Viewer Documentation API Reference Interface RedactionAnnotationOptions Page +--- + +# RedactionAnnotationOptions + +## Syntax + +```typescript +interface RedactionAnnotationOptions { + redactionType?: "rectangle" | "text"; +    rects?: RectXY[]; +    background?: string; +    borderColor?: string; +    overlayBackground?: string; +    overlayText?: { +        text: string; +        color?: string; +        textAlign?: "left" | "center" | "right"; +        fontSize?: number; +        fontFamily?: string; +        repeatText?: boolean; +        autoFontSize?: boolean; +    }; +    flags?: Flags; +} +``` + +## Attributes + +### redactionType + +The type of the redaction. It can be `text` or `rectangle`. This affects the interaction behavior. + +If the type is `text`, the annotation can be adjusted according to the text. + +![Text-type redaction](/assets/imgs/text-type-redaction.jpg) + +If the type is `rectangle`, the annotation can be adjusted as a rectangle. + +![Rectangle-type redaction](/assets/imgs/rectangle-type-redaction.jpg) + +If the type is not specified when creation, it will be inferred based on the size of `rects`. If the size is 1, the type is `rectangle`. Otherwise, the type is `text`. + +### rects + +An array of rectangles marking where to put the annotations. + +Please refer to [`RectXY`](/api/interface/rectxy.md). + +### borderColor + +The border color of annotation. + +Default value: `rgb(255,0,0)` + +**Example** + +```typescript +borderColor: "rgb(255,0,0)", +``` + +### background + +The background style of annotation. + +Default value: `''`, it means no fill. + +**Example** + +```typescript +background: "rgb(255,255,255)", +``` + +### overlayBackground + +The background of the annotation after being applied. + +Default value: `rgb(0,0,0)` + +### overlayText + +The text to display after being applied. It is an object for configuration. The following is the default options. + +```ts +{ + text: "", // text + color: "rgb(255,0,0)", // text color + textAlign: "left", // text alignment: left, center, right + fontSize: 16, // font size + fontFamily: "Helvetica", // font family name + repeatText: false, // repeat the text to fill the marked area. Not effective if autoFontSize is true + autoFontSize: false, // fit the text to the marked area +} +``` + +### opacity + +The opacity of the whole annotation. The value range is [0,1], value which is greater than 1 will default to 1. + +Default value: 1 + +### flags + +The flags of annotation. + +Please refer to [`Flags`](/api/interface/annotationinterface/flags.md). + +## Related + +- [`getOptions()`](/api/class/annotation/redaction.md#getoptions) under `Redaction` class +- [`updateOptions()`](/api/class/annotation/redaction.md#updateoptions) under `Redaction` class diff --git a/assets/imgs/rectangle-type-redaction.jpg b/assets/imgs/rectangle-type-redaction.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e4ee9c415ff7c141d2e08b79d77e284ae8a0bd52 GIT binary patch literal 25370 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 literal 0 HcmV?d00001 From 6c68054bbc13b17eba528ef3a68a06975ead00a2 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Mon, 9 Mar 2026 14:33:21 +0800 Subject: [PATCH 05/49] add redaction annotation to flags.md --- api/interface/annotationinterface/flags.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/api/interface/annotationinterface/flags.md b/api/interface/annotationinterface/flags.md index 7658e31..458ef48 100644 --- a/api/interface/annotationinterface/flags.md +++ b/api/interface/annotationinterface/flags.md @@ -79,6 +79,7 @@ For the following annotations, it is not effective and the default value is `tru * [`Highlight`](/api/class/annotation/highlight.md) * [`Strikeout`](/api/class/annotation/strikeout.md) * [`Underline`](/api/class/annotation/underline.md) +* [`Redaction`](/api/class/annotation/redaction.md) ### readOnly @@ -98,4 +99,5 @@ Not to allow a user to interact with the annotation, default value: `false`. - [`StampAnnotationOptions`]({{ site.api }}interface/annotationinterface/stampannotationoptions.html) - [`HighlightAnnotationOptions`](/api/interface/annotationinterface/highlightannotationoptions.md) - [`UnderlineAnnotationOptions`](/api/interface/annotationinterface/underlineannotationoptions.md) -- [`StrikeoutAnnotationOptions`](/api/interface/annotationinterface/strikeoutannotationoptions.md) \ No newline at end of file +- [`StrikeoutAnnotationOptions`](/api/interface/annotationinterface/strikeoutannotationoptions.md) +- [`RedactionAnnotationOptions`](/api/interface/annotationinterface/redactionannotationoptions.md) From 179be0591f9b787fa0dba7eef0f6393f43200499 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Mon, 9 Mar 2026 14:42:09 +0800 Subject: [PATCH 06/49] mention redaction in createAnnotation() --- api/class/annotationmanager.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/api/class/annotationmanager.md b/api/class/annotationmanager.md index c13c461..b4645a2 100644 --- a/api/class/annotationmanager.md +++ b/api/class/annotationmanager.md @@ -103,7 +103,7 @@ createAnnotation(pageUid: string, type: `type`: Specify the type of annotation to create. ```typescript -type AnnotationType = "rectangle" | "ellipse" | "polygon" | "polyline" | "line" | "ink" | "textBox" | "textTypewriter" | "stamp" | "highlight" | "underline"| "strikeout"; +type AnnotationType = "rectangle" | "redaction" | "ellipse" | "polygon" | "polyline" | "line" | "ink" | "textBox" | "textTypewriter" | "stamp" | "highlight" | "underline"| "strikeout"; ``` `annotationOptions`: The annotation options. Please refer to [the options list](/api/interface/annotationinterface/index.md#options). @@ -128,6 +128,10 @@ The instance of annotation. Please refer to [Annotation](/api/class/annotation/i const ink = Dynamsoft.DDV.annotationManager.createAnnotation(pageUid, "ink"); const textBox = Dynamsoft.DDV.annotationManager.createAnnotation(pageUid, "textBox"); const textTypewriter = Dynamsoft.DDV.annotationManager.createAnnotation(pageUid, "textTypewriter"); + const highlight = Dynamsoft.DDV.annotationManager.createAnnotation(pageUid, "highlight"); + const underline = Dynamsoft.DDV.annotationManager.createAnnotation(pageUid, "underline"); + const strikeout = Dynamsoft.DDV.annotationManager.createAnnotation(pageUid, "strikeout"); + const redaction = Dynamsoft.DDV.annotationManager.createAnnotation(pageUid, "redaction"); const stamp = await Dynamsoft.DDV.annotationManager.createAnnotation(pageUid, "stamp"); ``` From 6fe3acb708480535e48898d3ad4811ee4b43ac05 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Mon, 9 Mar 2026 14:43:09 +0800 Subject: [PATCH 07/49] mention redaction in annotation index --- api/class/annotation/index.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/api/class/annotation/index.md b/api/class/annotation/index.md index fc4c947..328460d 100644 --- a/api/class/annotation/index.md +++ b/api/class/annotation/index.md @@ -13,7 +13,7 @@ permalink: /api/class/annotation/index.html ## Annotation -Annotation has fourteen main classes: +Annotation has fifteen main classes: - [Rectangle](/api/class/annotation/rectangle.md) - [Ellipse](/api/class/annotation/ellipse.md) @@ -27,6 +27,7 @@ Annotation has fourteen main classes: - [Highlight](/api/class/annotation/highlight.md) - [Underline](/api/class/annotation/underline.md) - [Strikeout](/api/class/annotation/strikeout.md) +- [Redaction](/api/class/annotation/redaction.md) - [Incomplete](/api/class/annotation/incomplete.md) - [Unknown](/api/class/annotation/unknown.md) From b394963e798bccf7ca2f97f60c5c48c273142627 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Thu, 12 Mar 2026 10:14:40 +0800 Subject: [PATCH 08/49] update comment about repeatText --- api/interface/annotationinterface/redactionannotationoptions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/interface/annotationinterface/redactionannotationoptions.md b/api/interface/annotationinterface/redactionannotationoptions.md index 6f272ba..16b2383 100644 --- a/api/interface/annotationinterface/redactionannotationoptions.md +++ b/api/interface/annotationinterface/redactionannotationoptions.md @@ -96,7 +96,7 @@ The text to display after being applied. It is an object for configuration. The textAlign: "left", // text alignment: left, center, right fontSize: 16, // font size fontFamily: "Helvetica", // font family name - repeatText: false, // repeat the text to fill the marked area. Not effective if autoFontSize is true + repeatText: false, // repeat the text to fill the marked area autoFontSize: false, // fit the text to the marked area } ``` From 09d8fe1bb7969c5410b642fe7058aab08a3a827a Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Thu, 12 Mar 2026 10:19:12 +0800 Subject: [PATCH 09/49] add redaction style interface --- .../redactionannotationoptions.md | 16 ++-- .../annotationinterface/redactionstyle.md | 85 +++++++++++++++++++ 2 files changed, 93 insertions(+), 8 deletions(-) create mode 100644 api/interface/annotationinterface/redactionstyle.md diff --git a/api/interface/annotationinterface/redactionannotationoptions.md b/api/interface/annotationinterface/redactionannotationoptions.md index 16b2383..5243fd8 100644 --- a/api/interface/annotationinterface/redactionannotationoptions.md +++ b/api/interface/annotationinterface/redactionannotationoptions.md @@ -55,28 +55,28 @@ An array of rectangles marking where to put the annotations. Please refer to [`RectXY`](/api/interface/rectxy.md). -### borderColor +### background -The border color of annotation. +The background style of annotation. -Default value: `rgb(255,0,0)` +Default value: `''`, it means no fill. **Example** ```typescript -borderColor: "rgb(255,0,0)", +background: "rgb(255,255,255)", ``` -### background +### borderColor -The background style of annotation. +The border color of annotation. -Default value: `''`, it means no fill. +Default value: `rgb(255,0,0)` **Example** ```typescript -background: "rgb(255,255,255)", +borderColor: "rgb(255,0,0)", ``` ### overlayBackground diff --git a/api/interface/annotationinterface/redactionstyle.md b/api/interface/annotationinterface/redactionstyle.md new file mode 100644 index 0000000..0c14e49 --- /dev/null +++ b/api/interface/annotationinterface/redactionstyle.md @@ -0,0 +1,85 @@ +--- +layout: default-layout +needAutoGenerateSidebar: true +needGenerateH3Content: true +noTitleIndex: true +title: Dynamsoft Document Viewer API Reference - Interface RedactionStyle +keywords: Documentation, Dynamsoft Document Viewer, API Reference, Interface RedactionStyle +breadcrumbText: Interface RedactionStyle +description: Dynamsoft Document Viewer Documentation API Reference Interface RedactionStyle Page +--- + +# RedactionStyle + +## Syntax + +```typescript +interface RedactionStyle { + background?: string; + borderColor?: string; + overlayBackground?: string; + overlayText?: { + text: string; + color?: string; + textAlign?: "left" | "center" | "right"; + fontSize?: number; + fontFamily?: string; + repeatText?: boolean; + autoFontSize?: boolean; + }; +} +``` + +## Attributes + +### background + +The background style of annotation. + +Default value: `''`, it means no fill. + +**Example** + +```typescript +background: "rgb(255,255,255)", +``` + +### borderColor + +The border color of annotation. + +Default value: `rgb(255,0,0)` + +**Example** + +```typescript +borderColor: "rgb(255,0,0)", +``` + +### overlayBackground + +The background of the annotation after being applied. + +Default value: `rgb(0,0,0)` + +### overlayText + +The text to display after being applied. It is an object for configuration. The following is the default options. + +```ts +{ + text: "", // text + color: "rgb(255,0,0)", // text color + textAlign: "left", // text alignment: left, center, right + fontSize: 16, // font size + fontFamily: "Helvetica", // font family name + repeatText: false, // repeat the text to fill the marked area + autoFontSize: false, // fit the text to the marked area +} +``` + +### opacity + +The opacity of the whole annotation. The value range is [0,1], value which is greater than 1 will default to 1. + +Default value: 1 From 9514928866c9fe3407ca03a05b762db498037450 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Thu, 12 Mar 2026 10:20:25 +0800 Subject: [PATCH 10/49] update annotation interface index --- api/interface/annotationinterface/index.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/api/interface/annotationinterface/index.md b/api/interface/annotationinterface/index.md index b17815f..9b0e965 100644 --- a/api/interface/annotationinterface/index.md +++ b/api/interface/annotationinterface/index.md @@ -15,6 +15,7 @@ permalink: /api/interface/annotationinterface/index.html ## Options - [`RectAnnotationOptions`](/api/interface/annotationinterface/rectannotationoptions.md) +- [`RedactionAnnotationOptions`](/api/interface/annotationinterface/redactionannotationoptions.md) - [`EllipseAnnotationOptions`](/api/interface/annotationinterface/ellipseannotationoptions.md) - [`PolygonAnnotationOptions`](/api/interface/annotationinterface/polygonannotationoptions.md) - [`PolylineAnnotationOptions`](/api/interface/annotationinterface/polylineannotationoptions.md) @@ -30,6 +31,7 @@ permalink: /api/interface/annotationinterface/index.html ## Styles - [`RectangleStyle`](/api/interface/annotationinterface/rectanglestyle.md) +- [`RedactionStyle`](/api/interface/annotationinterface/redactionstyle.md) - [`EllipseStyle`](/api/interface/annotationinterface/ellipsestyle.md) - [`PolygonStyle`](/api/interface/annotationinterface/polygonstyle.md) - [`PolylineStyle`](/api/interface/annotationinterface/polylinestyle.md) From 1347b972f94bb92cbf3d4223e462ca748b3f9921 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Thu, 12 Mar 2026 10:24:48 +0800 Subject: [PATCH 11/49] add redaction interfaces in side list --- _includes/sidelist-apis.html | 3 +++ 1 file changed, 3 insertions(+) diff --git a/_includes/sidelist-apis.html b/_includes/sidelist-apis.html index 3b9af4a..59352cf 100644 --- a/_includes/sidelist-apis.html +++ b/_includes/sidelist-apis.html @@ -29,6 +29,7 @@
  • Annotation
    • Rectangle
    • +
    • Redaction
    • Ellipse
    • Polygon
    • Polyline
    • @@ -75,6 +76,7 @@
    • Annotation Interfaces
      • RectAnnotationOptions
      • +
      • RedactionAnnotationOptions
      • EllipseAnnotationOptions
      • PolygonAnnotationOptions
      • PolylineAnnotationOptions
      • @@ -90,6 +92,7 @@
      • Point
      • TextContent
      • RectangleStyle
      • +
      • RedactionStyle
      • EllipseStyle
      • PolygonStyle
      • PolylineStyle
      • From 8651d0fadce7ffa511af2f519679753666a929d6 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Thu, 12 Mar 2026 13:38:57 +0800 Subject: [PATCH 12/49] add descriptions to annotation elements and add redaction elements --- ui/default_elements.md | 49 +++++++++++++++++++++++------------------- 1 file changed, 27 insertions(+), 22 deletions(-) diff --git a/ui/default_elements.md b/ui/default_elements.md index 5427521..f157f4c 100644 --- a/ui/default_elements.md +++ b/ui/default_elements.md @@ -62,28 +62,33 @@ The following are lists of built-in elements as well as their default icons that | Dynamsoft.DDV.Elements.TextSearchPanelSwitch | ddv-search-switch | | | Dynamsoft.DDV.Elements.TextSearchPanel | N/A | | -|Annotation-related Elements | className of its default icon | -| ----------------------------------------------- | ----------------------------- | -| Dynamsoft.DDV.Elements.AnnotationSet | ddv-annotation-mode | -| Dynamsoft.DDV.Elements.RectAnnotation | ddv-rect | -| Dynamsoft.DDV.Elements.EllipseAnnotation | ddv-ellipse | -| Dynamsoft.DDV.Elements.PolygonAnnotation | ddv-polygon | -| Dynamsoft.DDV.Elements.PolylineAnnotation | ddv-polyline | -| Dynamsoft.DDV.Elements.LineAnnotation | ddv-line | -| Dynamsoft.DDV.Elements.InkAnnotation | ddv-ink | -| Dynamsoft.DDV.Elements.TextBoxAnnotation | ddv-text-box | -| Dynamsoft.DDV.Elements.TextTypewriterAnnotation | ddv-typewriter | -| Dynamsoft.DDV.Elements.StampIconAnnotation | ddv-stamp-icon | -| Dynamsoft.DDV.Elements.StampImageAnnotation | ddv-stamp-image | -| Dynamsoft.DDV.Elements.HighlightAnnotation | ddv-highlight-mode | -| Dynamsoft.DDV.Elements.UnderlineAnnotation | ddv-underline-mode | -| Dynamsoft.DDV.Elements.StrikeoutAnnotation | ddv-strikeout-mode | -| Dynamsoft.DDV.Elements.SelectAnnotation | ddv-annot-select | -| Dynamsoft.DDV.Elements.EraseAnnotation | ddv-annot-eraser | -| Dynamsoft.DDV.Elements.BringForward | ddv-bring-forward | -| Dynamsoft.DDV.Elements.BringToFront | ddv-bring-to-front | -| Dynamsoft.DDV.Elements.SendBackward | ddv-send-backward | -| Dynamsoft.DDV.Elements.SendToBack | ddv-send-to-back | + +|Annotation-related Elements | className of its default icon | More descriptions | +| ----------------------------------------------- | ----------------------------- |--------------------| +| Dynamsoft.DDV.Elements.AnnotationSet | ddv-annotation-mode | Show the annotation pulldown | +| Dynamsoft.DDV.Elements.RectAnnotation | ddv-rect | Set the annotation mode to rectangle | +| Dynamsoft.DDV.Elements.EllipseAnnotation | ddv-ellipse | Set the annotation mode to ellipse | +| Dynamsoft.DDV.Elements.PolygonAnnotation | ddv-polygon | Set the annotation mode to polygon | +| Dynamsoft.DDV.Elements.PolylineAnnotation | ddv-polyline | Set the annotation mode to polyline | +| Dynamsoft.DDV.Elements.LineAnnotation | ddv-line | Set the annotation mode to line | +| Dynamsoft.DDV.Elements.InkAnnotation | ddv-ink | Set the annotation mode to ink | +| Dynamsoft.DDV.Elements.TextBoxAnnotation | ddv-text-box | Set the annotation mode to textBox | +| Dynamsoft.DDV.Elements.TextTypewriterAnnotation | ddv-typewriter | Set the annotation mode to textTypewriter | +| Dynamsoft.DDV.Elements.StampIconAnnotation | ddv-stamp-icon | Set the annotation mode to stamp and use built-in stamps | +| Dynamsoft.DDV.Elements.StampImageAnnotation | ddv-stamp-image | Set the annotation mode to stamp and use external images | +| Dynamsoft.DDV.Elements.HighlightAnnotation | ddv-highlight-mode | Set the annotation mode to highlight | +| Dynamsoft.DDV.Elements.UnderlineAnnotation | ddv-underline-mode | Set the annotation mode to underline | +| Dynamsoft.DDV.Elements.StrikeoutAnnotation | ddv-strikeout-mode | Set the annotation mode to strikeout | +| Dynamsoft.DDV.Elements.SelectAnnotation | ddv-annot-select | Set the annotation mode to select | +| Dynamsoft.DDV.Elements.EraseAnnotation | ddv-annot-eraser | Set the annotation mode to erase | +| Dynamsoft.DDV.Elements.BringForward | ddv-bring-forward | Bring the selected annotations forward by one level | +| Dynamsoft.DDV.Elements.BringToFront | ddv-bring-to-front | Bring the selected annotations to the front | +| Dynamsoft.DDV.Elements.SendBackward | ddv-send-backward | Bring the selected annotations backward by one level | +| Dynamsoft.DDV.Elements.SendToBack | ddv-send-to-back | Bring the selected annotations to the back | +| Dynamsoft.DDV.Elements.RedactionSet | ddv-redaction-set-box | Bring up the redaction pulldown | +| Dynamsoft.DDV.Elements.RedactionMode | ddv-redaction-mode | Set the annotation mode to redaction | +| Dynamsoft.DDV.Elements.RedactPages | ddv-redact-pages | Invoke a dialog to mark pages for redaction | +| Dynamsoft.DDV.Elements.RedactionApply | ddv-redaction-apply | Apply redactions for all pages |
        From f3c84aaa2b1d306125cb52247c5dd408d2444b63 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Thu, 12 Mar 2026 13:41:33 +0800 Subject: [PATCH 13/49] mention RedactionStyle in AnnotationDrawingStyleConfig --- api/interface/styleinterface/annotationdrawingstyleconfig.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/api/interface/styleinterface/annotationdrawingstyleconfig.md b/api/interface/styleinterface/annotationdrawingstyleconfig.md index db4f3e5..14f712b 100644 --- a/api/interface/styleinterface/annotationdrawingstyleconfig.md +++ b/api/interface/styleinterface/annotationdrawingstyleconfig.md @@ -26,6 +26,7 @@ interface AnnotationDrawingStyleConfig { highlight?: HighlightStyle; underline?: UnderlineStyle; strikeout?: StrikeoutStyle; + redaction?: RedactionStyle; } ``` @@ -74,3 +75,7 @@ The default drawing style of the underline annotation - see [`UnderlineStyle`](/ ### strikeout The default drawing style of the strikeout annotation - see [`StrikeoutStyle`](/api/interface/annotationinterface/strikeoutstyle.md) for more details. If not set, this uses the default values of `StrikeoutStyle`. + +### redaction + +The default drawing style of redaction annotation - see [`RedactionStyle`](/api/interface/annotationinterface/rectanglestyle.md) for more details. If not set, this uses the default values of `RedactionStyle`. From 6ba4e734d7c002baea54cd7dd26097a8b41f5040 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Thu, 12 Mar 2026 13:49:08 +0800 Subject: [PATCH 14/49] add PrintPreparationInfo --- api/interface/infoobject.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/api/interface/infoobject.md b/api/interface/infoobject.md index 40d11ad..bd5f806 100644 --- a/api/interface/infoobject.md +++ b/api/interface/infoobject.md @@ -40,6 +40,12 @@ interface PerspectiveInfo { perspectiveQuad: Quad; } +interface PrintPreparationInfo { + docUid: string; + current: number; + total: number; +} + interface InfoDetailsMap { init: InitInfo; loadSource: LoadSourceInfo; @@ -47,6 +53,7 @@ interface InfoDetailsMap { filter: FilterInfo; perspective: PerspectiveInfo; loadWasm: LoadWasmInfo; + printPreparation: PrintPreparationInfo; } type InfoStatus = @@ -82,6 +89,7 @@ Indicates the task type of the event. Must be one of the following events, in on | `filter` | ✓ | | ✓ | ✓ | | `perspective` | ✓ | | ✓ | ✓ | | `loadWasm` | ✓ | | ✓ | ✓ | +| `printPreparation` | ✓ |✓ | ✓ | ✓ | ### status @@ -94,4 +102,4 @@ Indicates the status of the task. Can only be one of the following: ### details -Contains additional event type-specific info. \ No newline at end of file +Contains additional event type-specific info. From 4531d3e54430051fed3f45d01a3a728388b5f0b3 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Thu, 12 Mar 2026 13:52:09 +0800 Subject: [PATCH 15/49] add redactionApplyButton in ToolbarConfig --- api/interface/annotationinterface/toolbarconfig.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/api/interface/annotationinterface/toolbarconfig.md b/api/interface/annotationinterface/toolbarconfig.md index 788dbf3..249b9a6 100644 --- a/api/interface/annotationinterface/toolbarconfig.md +++ b/api/interface/annotationinterface/toolbarconfig.md @@ -26,6 +26,7 @@ interface ToolbarConfig { highlightButton?: AnnotationToolbarButton; underlineButton?: AnnotationToolbarButton; strikeoutButton?: AnnotationToolbarButton; + redactionApplyButton?: AnnotationToolbarButton; } ``` @@ -73,6 +74,10 @@ The configuration of underline button in the toolbar. Please refer to [`Annotati The configuration of strikeout button in the toolbar. Please refer to [`AnnotationToolbarButton`]({{ site.api }}interface/annotationinterface/annotationtoolbarbutton.html). +### redactionApplyButton + +The configuration of redaction application button in the toolbar. Please refer to [`AnnotationToolbarButton`](/api/interface/annotationinterface/annotationtoolbarbutton.md). + ## Related - [`EditViewerConstructorOptions`]({{ site.api }}interface/editviewerconstructoroptions.html) \ No newline at end of file From 42ece3fc6040060818d267f957e16d38063725d7 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Thu, 12 Mar 2026 13:57:18 +0800 Subject: [PATCH 16/49] add redaction to ToolMode --- api/class/editviewer.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/class/editviewer.md b/api/class/editviewer.md index 5e477a5..321ac4b 100644 --- a/api/class/editviewer.md +++ b/api/class/editviewer.md @@ -520,7 +520,7 @@ toolMode: ToolMode; A `ToolMode` can be one of following types. ```typescript -type ToolMode = "pan" | "crop" | "annotation" | "textSelection"; +type ToolMode = "pan" | "crop" | "annotation" | "textSelection" | "redaction"; ``` `pan`: The default tool mode. From be3365f0f093bfd3932bf53ebce401f302b82e70 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Thu, 12 Mar 2026 13:58:05 +0800 Subject: [PATCH 17/49] fix the description of RedactionMode element --- ui/default_elements.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/default_elements.md b/ui/default_elements.md index f157f4c..74d8b2e 100644 --- a/ui/default_elements.md +++ b/ui/default_elements.md @@ -86,7 +86,7 @@ The following are lists of built-in elements as well as their default icons that | Dynamsoft.DDV.Elements.SendBackward | ddv-send-backward | Bring the selected annotations backward by one level | | Dynamsoft.DDV.Elements.SendToBack | ddv-send-to-back | Bring the selected annotations to the back | | Dynamsoft.DDV.Elements.RedactionSet | ddv-redaction-set-box | Bring up the redaction pulldown | -| Dynamsoft.DDV.Elements.RedactionMode | ddv-redaction-mode | Set the annotation mode to redaction | +| Dynamsoft.DDV.Elements.RedactionMode | ddv-redaction-mode | Set the tool mode to redaction | | Dynamsoft.DDV.Elements.RedactPages | ddv-redact-pages | Invoke a dialog to mark pages for redaction | | Dynamsoft.DDV.Elements.RedactionApply | ddv-redaction-apply | Apply redactions for all pages | From a8670ddab7ffde25974f0ab097ae6bd53bb5e37a Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Thu, 12 Mar 2026 14:16:04 +0800 Subject: [PATCH 18/49] add error messages --- api/errorlist.md | 6 ++++++ api/interface/annotationinterface/paletteconfig.md | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/api/errorlist.md b/api/errorlist.md index a31e803..e8b7a3c 100644 --- a/api/errorlist.md +++ b/api/errorlist.md @@ -83,6 +83,12 @@ permalink: /api/errorlist.html -80320 | Unknown annotation or incomplete annotation cannot be selected. -80321 | Flattened annotation cannot be selected. -80322 | No results found. + -80323 | The redaction annotation has already been applied. + -80324 | The specified annotation(s) contain annotations other than redaction annotations. + -80325 | The specified page does not contain redaction annotations. + -80326 | The annotation has already been deleted. + -80327 | The specified annotation(s) are not on the specified page or do not exist. + -80328 | Rectangle-type redaction requires exactly one rect. ## Camera Releated Errors diff --git a/api/interface/annotationinterface/paletteconfig.md b/api/interface/annotationinterface/paletteconfig.md index 203f94d..bca1abd 100644 --- a/api/interface/annotationinterface/paletteconfig.md +++ b/api/interface/annotationinterface/paletteconfig.md @@ -29,7 +29,7 @@ interface PaletteConfig { style?: string; standardBusiness?: string; } - } +} ``` ## Attributes From 1e5270c5d666ab8130d2fcbcd0880195a091aa2d Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Thu, 12 Mar 2026 14:28:40 +0800 Subject: [PATCH 19/49] add v3.2.1 collection --- _data/product_version.yml | 3 +- _includes/sidelist-apis-v3.2.1.html | 177 ++ _v3.2.1/api/class/annotation/ellipse.md | 209 ++ _v3.2.1/api/class/annotation/highlight.md | 198 ++ _v3.2.1/api/class/annotation/incomplete.md | 123 ++ _v3.2.1/api/class/annotation/index.md | 32 + _v3.2.1/api/class/annotation/ink.md | 204 ++ _v3.2.1/api/class/annotation/line.md | 207 ++ _v3.2.1/api/class/annotation/polygon.md | 209 ++ _v3.2.1/api/class/annotation/polyline.md | 207 ++ _v3.2.1/api/class/annotation/rectangle.md | 209 ++ _v3.2.1/api/class/annotation/stamp.md | 205 ++ _v3.2.1/api/class/annotation/strikeout.md | 198 ++ _v3.2.1/api/class/annotation/textbox.md | 206 ++ .../api/class/annotation/texttypewriter.md | 206 ++ _v3.2.1/api/class/annotation/underline.md | 198 ++ _v3.2.1/api/class/annotation/unknown.md | 113 + _v3.2.1/api/class/annotationmanager.md | 556 +++++ _v3.2.1/api/class/editviewer.md | 1883 +++++++++++++++++ _v3.2.1/api/errorlist.md | 112 + .../interface/annotationinterface/flags.md | 101 + .../interface/annotationinterface/index.md | 53 + .../annotationinterface/paletteconfig.md | 110 + .../annotationinterface/toolbarconfig.md | 78 + _v3.2.1/api/interface/infoobject.md | 97 + .../annotationdrawingstyleconfig.md | 76 + _v3.2.1/ui/default_elements.md | 158 ++ 27 files changed, 6127 insertions(+), 1 deletion(-) create mode 100644 _includes/sidelist-apis-v3.2.1.html create mode 100644 _v3.2.1/api/class/annotation/ellipse.md create mode 100644 _v3.2.1/api/class/annotation/highlight.md create mode 100644 _v3.2.1/api/class/annotation/incomplete.md create mode 100644 _v3.2.1/api/class/annotation/index.md create mode 100644 _v3.2.1/api/class/annotation/ink.md create mode 100644 _v3.2.1/api/class/annotation/line.md create mode 100644 _v3.2.1/api/class/annotation/polygon.md create mode 100644 _v3.2.1/api/class/annotation/polyline.md create mode 100644 _v3.2.1/api/class/annotation/rectangle.md create mode 100644 _v3.2.1/api/class/annotation/stamp.md create mode 100644 _v3.2.1/api/class/annotation/strikeout.md create mode 100644 _v3.2.1/api/class/annotation/textbox.md create mode 100644 _v3.2.1/api/class/annotation/texttypewriter.md create mode 100644 _v3.2.1/api/class/annotation/underline.md create mode 100644 _v3.2.1/api/class/annotation/unknown.md create mode 100644 _v3.2.1/api/class/annotationmanager.md create mode 100644 _v3.2.1/api/class/editviewer.md create mode 100644 _v3.2.1/api/errorlist.md create mode 100644 _v3.2.1/api/interface/annotationinterface/flags.md create mode 100644 _v3.2.1/api/interface/annotationinterface/index.md create mode 100644 _v3.2.1/api/interface/annotationinterface/paletteconfig.md create mode 100644 _v3.2.1/api/interface/annotationinterface/toolbarconfig.md create mode 100644 _v3.2.1/api/interface/infoobject.md create mode 100644 _v3.2.1/api/interface/styleinterface/annotationdrawingstyleconfig.md create mode 100644 _v3.2.1/ui/default_elements.md diff --git a/_data/product_version.yml b/_data/product_version.yml index fa08419..e757440 100644 --- a/_data/product_version.yml +++ b/_data/product_version.yml @@ -1,7 +1,8 @@ useGroupedVersion: true version_info_list: - - value: latest version (3.2.1) + - value: latest version (4.0) + - value: 3.2.1 - value: 2.1 - value: 1.1 diff --git a/_includes/sidelist-apis-v3.2.1.html b/_includes/sidelist-apis-v3.2.1.html new file mode 100644 index 0000000..098e459 --- /dev/null +++ b/_includes/sidelist-apis-v3.2.1.html @@ -0,0 +1,177 @@ +
      • API Reference + +
      • \ No newline at end of file diff --git a/_v3.2.1/api/class/annotation/ellipse.md b/_v3.2.1/api/class/annotation/ellipse.md new file mode 100644 index 0000000..780f796 --- /dev/null +++ b/_v3.2.1/api/class/annotation/ellipse.md @@ -0,0 +1,209 @@ +--- +layout: default-layout +needAutoGenerateSidebar: true +needGenerateH3Content: true +noTitleIndex: true +title: Dynamsoft Document Viewer API Reference - Ellipse Class +keywords: Documentation, Dynamsoft Document Viewer, API Reference, Ellipse Class +breadcrumbText: Ellipse Class +description: Dynamsoft Document Viewer Documentation API Reference Ellipse Class Page +permalink: /api/class/annotation/ellipse.html +--- + +# Ellipse Class + + +## API Index + +| API Name | Description | +| --------------------------------------- | ------------------------------------------------------------------------------------------- | +| [`uid`](#uid) | Return the uid of the annotation. | +| [`pageUid`](#pageuid) | Return the uid of the page where the annotation is located. | +| [`source`](#source) | Return the source of the annotation. | +| [`type`](#type) | Return the type of the annotation | +| [`creationDate`](#creationdate) | Return the creation date of the annotation. | +| [`flattened`](#flattened) | Flattens the annotation onto the image layer, or inspect if the annotation is flattened. | +| [`modificationDate`](#modificationdate) | Return the modification date of the annotation. | +| [`getOptions()`](#getoptions) | Get the annotation options. | +| [`updateOptions()`](#updateoptions) | Update the annotation options. | + +## uid + +Return the uid of the annotation. + +**Syntax** + +```typescript +readonly uid: string; +``` + +{% comment %} +**Remark** + +- It will return `''`, if the annotation is deleted. +{% endcomment %} + +## pageUid + +Return the uid of the page where the annotation is located. + +**Syntax** + +```typescript +readonly pageUid: string; +``` + +**Remark** + +- It will return `''`, if the annotation is deleted. + +{% comment %} +## aabb + +Return Axis-aligned bounding box of the annotation. + +**Syntax** + +```typescript +readonly aabb: Rect; +``` + +**Remark** + +![AABB-Ellipse](/assets/imgs/aabbellipse.png) + +{% endcomment %} + +## source + +Return the source of the annotation. Possible values: + +* user: the annotation is created by the user's action +* file: the annotation is created from a PDF file +* api: the annotation is created with code + +**Remark** + +It will return `''`, if the annotation is deleted. + +## type + +Return the type of the annotation: `ellipse`. + +All annotation types: + +```ts +"rectangle" | "ellipse" | "line" | "polygon" | "polyline" | "ink" | "textBox" | "textTypewriter" | "stamp" | "highlight" | "underline" | "strikeout" | "incomplete" | "unknown" +``` + +## creationDate + +Return the creation date of the annotation. + +**Syntax** + +```typescript +readonly creationDate: string; +``` + +**Remark** + +- The string would be `D:YYYYMMDDHHmmSSOHH'mm'`, like `D:20230101085959-08'00'`. + +{% comment %} +- It will return `''`, if the annotation is deleted. +{% endcomment %} + +## flattened + +Flattens the annotation onto the image layer, or inspect if the annotation is flattened. + +**Syntax** + +```typescript +flattened: boolean; //Default value is `false`. +``` + +**Remark** + +Flattened annotations move below all unflattened annotations on the page, and are stacked amongst themselves accordingly. + +Flattened annotations become part of the page layer upon file export and cease to be annotations. + +## modificationDate + +Return the modification date of the annotation. + +**Syntax** + +```typescript +readonly modificationDate: string; +``` + +**Remark** + +- The string would be `D:YYYYMMDDHHmmSSOHH'mm'`, like `D:20230101085959-08'00'`. +- It will return `''`, if the annotation is deleted. +- If the annotation is created but not be modified after adding, it equals to [`creationDate`](#creationdate). + +## getOptions() + +Get the annotation options. + +**Syntax** + +```typescript +getOptions(): EllipseAnnotationOptions; +``` + +**Return value** + +The object of ellipse annotation options. Please refer to [`EllipseAnnotationOptions`]({{ site.api }}interface/annotationinterface/ellipseannotationoptions.html). + +**Code Snippet** + +```typescript +// Given that editViewer is an existing instance of EditViewer and a document is currently open. +const pageUid = editViewer.indexToUid(0); +const ellipse = Dynamsoft.DDV.annotationManager.createAnnotation(pageUid, "ellipse"); // Create a default Ellipse annotation instance. +const ellipseOptions = ellipse.getOptions(); +``` + +## updateOptions() + +Update the annotation options. + +**Syntax** + +```typescript +updateOptions(ellipseAnnotationOptions: EllipseAnnotationOptions): boolean; +``` + +**Parameters** + +`ellipseAnnotationOptions`: The new ellipse annotation options. Please refer to [`EllipseAnnotationOptions`]({{ site.api }}interface/annotationinterface/ellipseannotationoptions.html). + +**Return value** + +`true`: Successfully. + +`false`: Failed. + +**Code Snippet** + +```typescript +// Given that editViewer is an existing instance of EditViewer and a document is currently open. +const pageUid = editViewer.indexToUid(0); +const ellipse = Dynamsoft.DDV.annotationManager.createAnnotation(pageUid, "ellipse"); // Create a default Ellipse annotation instance. +const ellipseOptions = { + background: "red", +}; +ellipse.updateOptions(ellipseOptions); // Update the background of the ellipse to red. +``` + +**Warning** + + Error Code | Error Message | API Return Value +--------|-----------------------------------------------------|---------------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | `false` + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. | `false` diff --git a/_v3.2.1/api/class/annotation/highlight.md b/_v3.2.1/api/class/annotation/highlight.md new file mode 100644 index 0000000..5eaa7fc --- /dev/null +++ b/_v3.2.1/api/class/annotation/highlight.md @@ -0,0 +1,198 @@ +--- +layout: default-layout +needAutoGenerateSidebar: true +needGenerateH3Content: true +noTitleIndex: true +title: Dynamsoft Document Viewer API Reference - Highlight Class +keywords: Documentation, Dynamsoft Document Viewer, API Reference, Highlight Class +breadcrumbText: Highlight Class +description: Dynamsoft Document Viewer Documentation API Reference Highlight Class Page +--- + +# Highlight Class + +## API Index + +| API Name | Description | +| --------------------------------------- | ------------------------------------------------------------------------------------------- | +| [`uid`](#uid) | Return the uid of the annotation. | +| [`pageUid`](#pageuid) | Return the uid of the page where the annotation is located. | +| [`source`](#source) | Return the source of the annotation. | +| [`type`](#type) | Return the type of the annotation | +| [`creationDate`](#creationdate) | Return the creation date of the annotation. | +| [`flattened`](#flattened) | Flattens the annotation onto the image layer, or inspect if the annotation is flattened. | +| [`modificationDate`](#modificationdate) | Return the modification date of the annotation. | +| [`getOptions()`](#getoptions) | Get the annotation options. | +| [`updateOptions()`](#updateoptions) | Update the annotation options. | + +## uid + +Return the uid of the annotation. + +**Syntax** + +```typescript +readonly uid: string; +``` + +## pageUid + +Return the uid of the page where the annotation is located. + +**Syntax** + +```typescript +readonly pageUid: string; +``` + +**Remark** + +- It will return `''`, if the annotation is deleted. + +## source + +Return the source of the annotation. Possible values: + +* user: the annotation is created by the user's action +* file: the annotation is created from a PDF file +* api: the annotation is created with code + +**Remark** + +It will return `''`, if the annotation is deleted. + +## type + +Return the type of the annotation: `highlight`. + +All annotation types: + +```ts +"rectangle" | "ellipse" | "line" | "polygon" | "polyline" | "ink" | "textBox" | "textTypewriter" | "stamp" | "highlight" | "underline" | "strikeout" | "incomplete" | "unknown" +``` + +## creationDate + +Return the creation date of the annotation. + +**Syntax** + +```typescript +readonly creationDate: string; +``` + +**Remark** + +- The string would be `D:YYYYMMDDHHmmSSOHH'mm'`, like `D:20230101085959-08'00'`. + +{% comment %} + +- It will return `''`, if the annotation is deleted. + +{% endcomment %} + +## flattened + +Flattens the annotation onto the image layer, or inspect if the annotation is flattened. + +**Syntax** + +```typescript +flattened: boolean; //Default value is `false`. +``` + +**Remark** + +Flattened annotations move below all unflattened annotations on the page, and are stacked amongst themselves accordingly. + +Flattened annotations become part of the page layer upon file export and cease to be annotations. + +## modificationDate + +Return the modification date of the annotation. + +**Syntax** + +```typescript +readonly modificationDate: string; +``` + +**Remark** + +- The string would be `D:YYYYMMDDHHmmSSOHH'mm'`, like `D:20230101085959-08'00'`. +- It will return `''`, if the annotation is deleted. +- If the annotation is created but not be modified after adding, it equals to [`creationDate`](#creationdate). + +## getOptions() + +Get the annotation options. + +**Syntax** + +```typescript +getOptions(): HighlightAnnotationOptions; +``` + +**Return value** + +The object of highlight annotation options. Please refer to [`HighlightAnnotationOptions`]({{ site.api }}interface/annotationinterface/highlightannotationoptions.html). + +**Code Snippet** + +```typescript +// Given that editViewer is an existing instance of EditViewer and a document is currently open. +const pageUid = editViewer.indexToUid(0); +const options = { + rects: [{ + x: 10, + y: 10, + width: 100, + height: 100, + }], + background: "red" +} +const highlight = Dynamsoft.DDV.annotationManager.createAnnotation(pageUid, "highlight", options); // Create a highlight annotation instance. +const highlightOptions = highlight.getOptions(); +``` + +## updateOptions() + +Update the annotation options. + +**Syntax** + +```typescript +updateOptions(highlightAnnotationOptions: HighlightAnnotationOptions): boolean; +``` + +**Parameters** + +`highlightAnnotationOptions`: The new highlight annotation options. Please refer to [`HighlightAnnotationOptions`]({{ site.api }}interface/annotationinterface/highlightannotationoptions.html). + +**Return value** + +`true`: Successfully. + +`false`: Failed. + +**Code Snippet** + +```typescript +const newOptions = { + rects: [{ + x: 50, + y: 10, + width: 100, + height: 100, + }], + background: "yellow" +}; +highlight.updateOptions(newOptions); // Update the annotation. +``` + +**Warning** + + Error Code | Error Message | API Return Value +--------|-----------------------------------------------------|---------------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | `false` + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. | `false` diff --git a/_v3.2.1/api/class/annotation/incomplete.md b/_v3.2.1/api/class/annotation/incomplete.md new file mode 100644 index 0000000..42b2ef8 --- /dev/null +++ b/_v3.2.1/api/class/annotation/incomplete.md @@ -0,0 +1,123 @@ +--- +layout: default-layout +needAutoGenerateSidebar: true +needGenerateH3Content: true +noTitleIndex: true +title: Dynamsoft Document Viewer API Reference - Incomplete Class +keywords: Documentation, Dynamsoft Document Viewer, API Reference, Incomplete Class +breadcrumbText: Incomplete Class +description: Dynamsoft Document Viewer Documentation API Reference Incomplete Class Page +permalink: /api/class/annotation/incomplete.html +--- + +# Incomplete Class + +This type of annotation may not be supported by Dynamsoft Document Viewer so far. + +## API Index + +| API Name | Description | +| ------------------------------- | ----------------------------------------------------------- | +| [`uid`](#uid) | Return the uid of the annotation. | +| [`pageUid`](#pageuid) | Return the uid of the page where the annotation is located. | +| [`source`](#source) | Return the source of the annotation. | +| [`type`](#type) | Return the type of the annotation | +| [`creationDate`](#creationdate) | Return the creation date of the annotation. | +| [`raw`](#raw) | Return the raw data of the annotation. | + + +## uid + +Return the uid of the annotation. + +**Syntax** + +```typescript +readonly uid: string; +``` + +{% comment %} +**Remark** + +- It will return `''`, if the annotation is deleted. +{% endcomment %} + +## pageUid + +Return the uid of the page where the annotation is located. + +**Syntax** + +```typescript +readonly pageUid: string; +``` + +**Remark** + +- It will return `''`, if the annotation is deleted. + +## source + +Return the source of the annotation. Possible values: + +* user: the annotation is created by the user's action +* file: the annotation is created from a PDF file +* api: the annotation is created with code + +**Remark** + +It will return `''`, if the annotation is deleted. + +## type + +Return the type of the annotation: `incomplete`. + +All annotation types: + +```ts +"rectangle" | "ellipse" | "line" | "polygon" | "polyline" | "ink" | "textBox" | "textTypewriter" | "stamp" | "highlight" | "underline" | "strikeout" | "incomplete" | "unknown" +``` + +## creationDate + +Return the creation date of the annotation. + +**Syntax** + +```typescript +readonly creationDate: string; +``` + +**Remark** + +- The string would be `D:YYYYMMDDHHmmSSOHH'mm'`, like `D:20230101085959-08'00'`. + +{% comment %} +- It will return `''`, if the annotation is deleted. +{% endcomment %} + +## modificationDate + +Return the modification date of the annotation. + +**Syntax** + +```typescript +readonly modificationDate: string; +``` + +**Remark** + +- The string would be `D:YYYYMMDDHHmmSSOHH'mm'`, like `D:20230101085959-08'00'`. +- It will return `''`, if the annotation is deleted. +- If the annotation is created but not be modified after adding, it equals to [`creationDate`](#creationdate). + +## raw + +Return the raw data of the annotation. + +**Syntax** + +```typescript +readonly raw: any; +``` diff --git a/_v3.2.1/api/class/annotation/index.md b/_v3.2.1/api/class/annotation/index.md new file mode 100644 index 0000000..fc4c947 --- /dev/null +++ b/_v3.2.1/api/class/annotation/index.md @@ -0,0 +1,32 @@ +--- +layout: default-layout +needAutoGenerateSidebar: true +needGenerateH3Content: true +noTitleIndex: true +title: Dynamsoft Document Viewer Annotation API Reference - Class +keywords: Documentation, Dynamsoft Document Viewer, API Reference, Class, Annotation +breadcrumbText: EditViewer Class +description: Dynamsoft Document Viewer Documentation Annotation API Reference Class Index Page +permalink: /api/class/annotation/index.html +--- + + +## Annotation + +Annotation has fourteen main classes: + +- [Rectangle](/api/class/annotation/rectangle.md) +- [Ellipse](/api/class/annotation/ellipse.md) +- [Polygon](/api/class/annotation/polygon.md) +- [Polyline](/api/class/annotation/polyline.md) +- [Line](/api/class/annotation/line.md) +- [Ink](/api/class/annotation/ink.md) +- [TextBox](/api/class/annotation/textbox.md) +- [TextTypewriter](/api/class/annotation/texttypewriter.md) +- [Stamp](/api/class/annotation/stamp.md) +- [Highlight](/api/class/annotation/highlight.md) +- [Underline](/api/class/annotation/underline.md) +- [Strikeout](/api/class/annotation/strikeout.md) +- [Incomplete](/api/class/annotation/incomplete.md) +- [Unknown](/api/class/annotation/unknown.md) + diff --git a/_v3.2.1/api/class/annotation/ink.md b/_v3.2.1/api/class/annotation/ink.md new file mode 100644 index 0000000..d910812 --- /dev/null +++ b/_v3.2.1/api/class/annotation/ink.md @@ -0,0 +1,204 @@ +--- +layout: default-layout +needAutoGenerateSidebar: true +needGenerateH3Content: true +noTitleIndex: true +title: Dynamsoft Document Viewer API Reference - Ink Class +keywords: Documentation, Dynamsoft Document Viewer, API Reference, Ink Class +breadcrumbText: Ink Class +description: Dynamsoft Document Viewer Documentation API Reference Ink Class Page +permalink: /api/class/annotation/ink.html +--- + +# Ink Class + +## API Index + +| API Name | Description | +| --------------------------------------- | ------------------------------------------------------------------------------------------- | +| [`uid`](#uid) | Return the uid of the annotation. | +| [`pageUid`](#pageuid) | Return the uid of the page where the annotation is located. | +| [`source`](#source) | Return the source of the annotation. | +| [`type`](#type) | Return the type of the annotation | +| [`creationDate`](#creationdate) | Return the creation date of the annotation. | +| [`flattened`](#flattened) | Flattens the annotation onto the image layer, or inspect if the annotation is flattened. | +| [`modificationDate`](#modificationdate) | Return the modification date of the annotation. | +| [`getOptions()`](#getoptions) | Get the annotation options. | +| [`updateOptions()`](#updateoptions) | Update the annotation options. | + +## uid + +Return the uid of the annotation. + +**Syntax** + +```typescript +readonly uid: string; +``` + +{% comment %} +**Remark** + +- It will return `''`, if the annotation is deleted. +{% endcomment %} + +## pageUid + +Return the uid of the page where the annotation is located. + +**Syntax** + +```typescript +readonly pageUid: string; +``` + +**Remark** +- It will return `''`, if the annotation is deleted. + +{% comment %} +## aabb + +Return Axis-aligned bounding box of the annotation. + +**Syntax** + +```typescript +readonly aabb: Rect; +``` + +{% endcomment %} + +## source + +Return the source of the annotation. Possible values: + +* user: the annotation is created by the user's action +* file: the annotation is created from a PDF file +* api: the annotation is created with code + +**Remark** + +It will return `''`, if the annotation is deleted. + +## type + +Return the type of the annotation: `ink`. + +All annotation types: + +```ts +"rectangle" | "ellipse" | "line" | "polygon" | "polyline" | "ink" | "textBox" | "textTypewriter" | "stamp" | "highlight" | "underline" | "strikeout" | "incomplete" | "unknown" +``` + +## creationDate + +Return the creation date of the annotation. + +**Syntax** + +```typescript +readonly creationDate: string; +``` + +**Remark** + +- The string would be `D:YYYYMMDDHHmmSSOHH'mm'`, like `D:20230101085959-08'00'`. + +{% comment %} +- It will return `''`, if the annotation is deleted. +{% endcomment %} + +## flattened + +Flattens the annotation onto the image layer, or inspect if the annotation is flattened. + +**Syntax** + +```typescript +flattened: boolean; //Default value is `false`. +``` + +**Remark** + +Flattened annotations move below all unflattened annotations on the page, and are stacked amongst themselves accordingly. + +Flattened annotations become part of the page layer upon file export and cease to be annotations. + +## modificationDate + +Return the modification date of the annotation. + +**Syntax** + +```typescript +readonly modificationDate: string; +``` + +**Remark** + +- The string would be `D:YYYYMMDDHHmmSSOHH'mm'`, like `D:20230101085959-08'00'`. +- It will return `''`, if the annotation is deleted. +- If the annotation is created but not be modified after adding, it equals to [`creationDate`](#creationdate). + + +## getOptions() + +Get the annotation options. + +**Syntax** + +```typescript +getOptions(): InkAnnotationOptions; +``` + +**Return value** + +The object of ink annotation options. Please refer to [`InkAnnotationOptions`]({{ site.api }}interface/annotationinterface/inkannotationoptions.html). + +**Code Snippet** + +```typescript +// Given that editViewer is an existing instance of EditViewer and a document is currently open. +const pageUid = editViewer.indexToUid(0); +const ink = Dynamsoft.DDV.annotationManager.createAnnotation(pageUid, "ink"); // Create a default Ink annotation instance. +const inkOptions = ink.getOptions(); +``` + +## updateOptions() + +Update the annotation options. + +**Syntax** + +```typescript +updateOptions(inkAnnotationOptions: InkAnnotationOptions): boolean; +``` + +**Parameters** + +`inkAnnotationOptions`: The new ink annotation options. Please refer to [`InkAnnotationOptions`]({{ site.api }}interface/annotationinterface/inkannotationoptions.html). + +**Return value** + +`true`: Successfully. + +`false`: Failed. + +**Code Snippet** + +```typescript +// Given that editViewer is an existing instance of EditViewer and a document is currently open. +const pageUid = editViewer.indexToUid(0); +const ink = Dynamsoft.DDV.annotationManager.createAnnotation(pageUid, "ink"); // Create a default Ink annotation instance. +const inkOptions = { + borderColor: "red", +}; +ink.updateOptions(inkOptions); // Update the border color of the ink to red. +``` + +**Warning** + + Error Code | Error Message | API Return Value +--------|-----------------------------------------------------|---------------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | `false` + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. | `false` diff --git a/_v3.2.1/api/class/annotation/line.md b/_v3.2.1/api/class/annotation/line.md new file mode 100644 index 0000000..b304544 --- /dev/null +++ b/_v3.2.1/api/class/annotation/line.md @@ -0,0 +1,207 @@ +--- +layout: default-layout +needAutoGenerateSidebar: true +needGenerateH3Content: true +noTitleIndex: true +title: Dynamsoft Document Viewer API Reference - Line Class +keywords: Documentation, Dynamsoft Document Viewer, API Reference, Line Class +breadcrumbText: Line Class +description: Dynamsoft Document Viewer Documentation API Reference Line Class Page +permalink: /api/class/annotation/line.html +--- + +# Line Class + +## API Index + +| API Name | Description | +| --------------------------------------- | ------------------------------------------------------------------------------------------- | +| [`uid`](#uid) | Return the uid of the annotation. | +| [`pageUid`](#pageuid) | Return the uid of the page where the annotation is located. | +| [`source`](#source) | Return the source of the annotation. | +| [`type`](#type) | Return the type of the annotation | +| [`creationDate`](#creationdate) | Return the creation date of the annotation. | +| [`flattened`](#flattened) | Flattens the annotation onto the image layer, or inspect if the annotation is flattened. | +| [`modificationDate`](#modificationdate) | Return the modification date of the annotation. | +| [`getOptions()`](#getoptions) | Get the annotation options. | +| [`updateOptions()`](#updateoptions) | Update the annotation options. | + +## uid + +Return the uid of the annotation. + +**Syntax** + +```typescript +readonly uid: string; +``` + +{% comment %} +**Remark** + +- It will return `''`, if the annotation is deleted. +{% endcomment %} + +## pageUid + +Return the uid of the page where the annotation is located. + +**Syntax** + +```typescript +readonly pageUid: string; +``` + +**Remark** + +- It will return `''`, if the annotation is deleted. + +{% comment %} +## aabb + +Return Axis-aligned bounding box of the annotation. + +**Syntax** + +```typescript +readonly aabb: Rect; +``` + +{% endcomment %} + +## source + +Return the source of the annotation. Possible values: + +* user: the annotation is created by the user's action +* file: the annotation is created from a PDF file +* api: the annotation is created with code + +**Remark** + +It will return `''`, if the annotation is deleted. + +## type + +Return the type of the annotation: `line`. + +All annotation types: + +```ts +"rectangle" | "ellipse" | "line" | "polygon" | "polyline" | "ink" | "textBox" | "textTypewriter" | "stamp" | "highlight" | "underline" | "strikeout" | "incomplete" | "unknown" +``` + +## creationDate + +Return the creation date of the annotation. + +**Syntax** + +```typescript +readonly creationDate: string; +``` + +**Remark** + +- The string would be `D:YYYYMMDDHHmmSSOHH'mm'`, like `D:20230101085959-08'00'`. + +{% comment %} +- It will return `''`, if the annotation is deleted. +{% endcomment %} + +## flattened + +Flattens the annotation onto the image layer, or inspect if the annotation is flattened. + +**Syntax** + +```typescript +flattened: boolean; //Default value is `false`. +``` + +**Remark** + +Flattened annotations move below all unflattened annotations on the page, and are stacked amongst themselves accordingly. + +Flattened annotations become part of the page layer upon file export and cease to be annotations. + +## modificationDate + +Return the modification date of the annotation. + +**Syntax** + +```typescript +readonly modificationDate: string; +``` + +**Remark** + +- The string would be `D:YYYYMMDDHHmmSSOHH'mm'`, like `D:20230101085959-08'00'`. +- It will return `''`, if the annotation is deleted. +- If the annotation is created but not be modified after adding, it equals to [`creationDate`](#creationdate). + + +## getOptions() + +Get the annotation options. + +**Syntax** + +```typescript +getOptions(): LineAnnotationOptions; +``` + +**Return value** + +The object of line annotation options. Please refer to [`LineAnnotationOptions`]({{ site.api }}interface/annotationinterface/lineannotationoptions.html). + +**Code Snippet** + +```typescript +// Given that editViewer is an existing instance of EditViewer and a document is currently open. +const pageUid = editViewer.indexToUid(0); +const line = Dynamsoft.DDV.annotationManager.createAnnotation(pageUid, "line"); // Create a default Line annotation instance. +const lineOptions = line.getOptions(); +``` + +## updateOptions() + +Update the annotation options. + +**Syntax** + +```typescript +updateOptions(lineAnnotationOptions: LineAnnotationOptions): boolean; +``` + +**Parameters** + +`lineAnnotationOptions`: The new line annotation options. Please refer to [`LineAnnotationOptions`]({{ site.api }}interface/annotationinterface/lineannotationoptions.html). + +**Return value** + +`true`: Successfully. + +`false`: Failed. + +**Code Snippet** + +```typescript +// Given that editViewer is an existing instance of EditViewer and a document is currently open. +const pageUid = editViewer.indexToUid(0); +const line = Dynamsoft.DDV.annotationManager.createAnnotation(pageUid, "line"); // Create a default Line annotation instance. +const lineOptions = { + lineEnding: { + end: Dynamsoft.DDV.EnumLineEnding.OPEN, + }, +}; +line.updateOptions(lineOptions); // Update the line ending of the line to open. +``` + +**Warning** + + Error Code | Error Message | API Return Value +--------|-----------------------------------------------------|---------------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | `false` + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. | `false` diff --git a/_v3.2.1/api/class/annotation/polygon.md b/_v3.2.1/api/class/annotation/polygon.md new file mode 100644 index 0000000..d0f7047 --- /dev/null +++ b/_v3.2.1/api/class/annotation/polygon.md @@ -0,0 +1,209 @@ +--- +layout: default-layout +needAutoGenerateSidebar: true +needGenerateH3Content: true +noTitleIndex: true +title: Dynamsoft Document Viewer API Reference - Polygon Class +keywords: Documentation, Dynamsoft Document Viewer, API Reference, Polygon Class +breadcrumbText: Polygon Class +description: Dynamsoft Document Viewer Documentation API Reference Polygon Class Page +permalink: /api/class/annotation/polygon.html +--- + +# Polygon Class + +## API Index + +| API Name | Description | +| --------------------------------------- | ------------------------------------------------------------------------------------------- | +| [`uid`](#uid) | Return the uid of the annotation. | +| [`pageUid`](#pageuid) | Return the uid of the page where the annotation is located. | +| [`source`](#source) | Return the source of the annotation. | +| [`type`](#type) | Return the type of the annotation | +| [`creationDate`](#creationdate) | Return the creation date of the annotation. | +| [`flattened`](#flattened) | Flattens the annotation onto the image layer, or inspect if the annotation is flattened. | +| [`modificationDate`](#modificationdate) | Return the modification date of the annotation. | +| [`getOptions()`](#getoptions) | Get the annotation options. | +| [`updateOptions()`](#updateoptions) | Update the annotation options. | + +## uid + +Return the uid of the annotation. + +**Syntax** + +```typescript +readonly uid: string; +``` + +{% comment %} +**Remark** + +- It will return `''`, if the annotation is deleted. +{% endcomment %} + +## pageUid + +Return the uid of the page where the annotation is located. + +**Syntax** + +```typescript +readonly pageUid: string; +``` + +**Remark** + +- It will return `''`, if the annotation is deleted. + +{% comment %} +## aabb + +Return Axis-aligned bounding box of the annotation. + +**Syntax** + +```typescript +readonly aabb: Rect; +``` + +**Remark** + +![AABB-Polygon](/assets/imgs/aabbpolygon.png) + +{% endcomment %} + +## source + +Return the source of the annotation. Possible values: + +* user: the annotation is created by the user's action +* file: the annotation is created from a PDF file +* api: the annotation is created with code + +**Remark** + +It will return `''`, if the annotation is deleted. + +## type + +Return the type of the annotation: `polygon`. + +All annotation types: + +```ts +"rectangle" | "ellipse" | "line" | "polygon" | "polyline" | "ink" | "textBox" | "textTypewriter" | "stamp" | "highlight" | "underline" | "strikeout" | "incomplete" | "unknown" +``` + +## creationDate + +Return the creation date of the annotation. + +**Syntax** + +```typescript +readonly creationDate: string; +``` + +**Remark** + +- The string would be `D:YYYYMMDDHHmmSSOHH'mm'`, like `D:20230101085959-08'00'`. + +{% comment %} +- It will return `''`, if the annotation is deleted. +{% endcomment %} + +## flattened + +Flattens the annotation onto the image layer, or inspect if the annotation is flattened. + +**Syntax** + +```typescript +flattened: boolean; //Default value is `false`. +``` + +**Remark** + +Flattened annotations move below all unflattened annotations on the page, and are stacked amongst themselves accordingly. + +Flattened annotations become part of the page layer upon file export and cease to be annotations. + +## modificationDate + +Return the modification date of the annotation. + +**Syntax** + +```typescript +readonly modificationDate: string; +``` + +**Remark** + +- The string would be `D:YYYYMMDDHHmmSSOHH'mm'`, like `D:20230101085959-08'00'`. +- It will return `''`, if the annotation is deleted. +- If the annotation is created but not be modified after adding, it equals to [`creationDate`](#creationdate). + + +## getOptions() + +Get the annotation options. + +**Syntax** + +```typescript +getOptions(): PolygonAnnotationOptions; +``` + +**Return value** + +The object of polygon annotation options. Please refer to [`PolygonAnnotationOptions`]({{ site.api }}interface/annotationinterface/polygonannotationoptions.html). + +**Code Snippet** + +```typescript +// Given that editViewer is an existing instance of EditViewer and a document is currently open. +const pageUid = editViewer.indexToUid(0); +const polygon = Dynamsoft.DDV.annotationManager.createAnnotation(pageUid, "polygon"); // Create a default Polygon annotation instance. +const polygonOptions = polygon.getOptions(); +``` + +## updateOptions() + +Update the annotation options. + +**Syntax** + +```typescript +updateOptions(polygonAnnotationOptions: PolygonAnnotationOptions): boolean; +``` + +**Parameters** + +`polygonAnnotationOptions`: The new polygon annotation options. Please refer to [`PolygonAnnotationOptions`]({{ site.api }}interface/annotationinterface/polygonannotationoptions.html). + +**Return value** + +`true`: Successfully. + +`false`: Failed. + +**Code Snippet** + +```typescript +// Given that editViewer is an existing instance of EditViewer and a document is currently open. +const pageUid = editViewer.indexToUid(0); +const polygon = Dynamsoft.DDV.annotationManager.createAnnotation(pageUid, "polygon"); // Create a default Polygon annotation instance. +const polygonOptions = { + background: "red", +}; +polygon.updateOptions(polygonOptions); // Update the background of the polygon to red. +``` + +**Warning** + + Error Code | Error Message | API Return Value +--------|-----------------------------------------------------|---------------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | `false` + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. | `false` diff --git a/_v3.2.1/api/class/annotation/polyline.md b/_v3.2.1/api/class/annotation/polyline.md new file mode 100644 index 0000000..c4cd44c --- /dev/null +++ b/_v3.2.1/api/class/annotation/polyline.md @@ -0,0 +1,207 @@ +--- +layout: default-layout +needAutoGenerateSidebar: true +needGenerateH3Content: true +noTitleIndex: true +title: Dynamsoft Document Viewer API Reference - Polyline Class +keywords: Documentation, Dynamsoft Document Viewer, API Reference, Polyline Class +breadcrumbText: Polyline Class +description: Dynamsoft Document Viewer Documentation API Reference Polyline Class Page +permalink: /api/class/annotation/polyline.html +--- + +# Polyline Class + +## API Index + +| API Name | Description | +| --------------------------------------- | ------------------------------------------------------------------------------------------- | +| [`uid`](#uid) | Return the uid of the annotation. | +| [`pageUid`](#pageuid) | Return the uid of the page where the annotation is located. | +| [`source`](#source) | Return the source of the annotation. | +| [`type`](#type) | Return the type of the annotation | +| [`creationDate`](#creationdate) | Return the creation date of the annotation. | +| [`flattened`](#flattened) | Flattens the annotation onto the image layer, or inspect if the annotation is flattened. | +| [`modificationDate`](#modificationdate) | Return the modification date of the annotation. | +| [`getOptions()`](#getoptions) | Get the annotation options. | +| [`updateOptions()`](#updateoptions) | Update the annotation options. | + +## uid + +Return the uid of the annotation. + +**Syntax** + +```typescript +readonly uid: string; +``` + +{% comment %} +**Remark** + +- It will return `''`, if the annotation is deleted. +{% endcomment %} + +## pageUid + +Return the uid of the page where the annotation is located. + +**Syntax** + +```typescript +readonly pageUid: string; +``` + +**Remark** + +- It will return `''`, if the annotation is deleted. + +{% comment %} +## aabb + +Return Axis-aligned bounding box of the annotation. + +**Syntax** + +```typescript +readonly aabb: Rect; +``` + +{% endcomment %} + +## source + +Return the source of the annotation. Possible values: + +* user: the annotation is created by the user's action +* file: the annotation is created from a PDF file +* api: the annotation is created with code + +**Remark** + +It will return `''`, if the annotation is deleted. + +## type + +Return the type of the annotation: `polyline`. + +All annotation types: + +```ts +"rectangle" | "ellipse" | "line" | "polygon" | "polyline" | "ink" | "textBox" | "textTypewriter" | "stamp" | "highlight" | "underline" | "strikeout" | "incomplete" | "unknown" +``` + +## creationDate + +Return the creation date of the annotation. + +**Syntax** + +```typescript +readonly creationDate: string; +``` + +**Remark** + +- The string would be `D:YYYYMMDDHHmmSSOHH'mm'`, like `D:20230101085959-08'00'`. + +{% comment %} +- It will return `''`, if the annotation is deleted. +{% endcomment %} + +## flattened + +Flattens the annotation onto the image layer, or inspect if the annotation is flattened. + +**Syntax** + +```typescript +flattened: boolean; //Default value is `false`. +``` + +**Remark** + +Flattened annotations move below all unflattened annotations on the page, and are stacked amongst themselves accordingly. + +Flattened annotations become part of the page layer upon file export and cease to be annotations. + +## modificationDate + +Return the modification date of the annotation. + +**Syntax** + +```typescript +readonly modificationDate: string; +``` + +**Remark** + +- The string would be `D:YYYYMMDDHHmmSSOHH'mm'`, like `D:20230101085959-08'00'`. +- It will return `''`, if the annotation is deleted. +- If the annotation is created but not be modified after adding, it equals to [`creationDate`](#creationdate). + + +## getOptions() + +Get the annotation options. + +**Syntax** + +```typescript +getOptions(): PolylineAnnotationOptions; +``` + +**Return value** + +The object of polyline annotation options. Please refer to [`PolylineAnnotationOptions`]({{ site.api }}interface/annotationinterface/polylineannotationoptions.html). + +**Code Snippet** + +```typescript +// Given that editViewer is an existing instance of EditViewer and a document is currently open. +const pageUid = editViewer.indexToUid(0); +const polyline = Dynamsoft.DDV.annotationManager.createAnnotation(pageUid, "polyline"); // Create a default Polyline annotation instance. +const polylineOptions = polyline.getOptions(); +``` + +## updateOptions() + +Update the annotation options. + +**Syntax** + +```typescript +updateOptions(polylineannotationoptions: PolylineAnnotationOptions): boolean; +``` + +**Parameters** + +`polylineannotationoptions`: The new polyline annotation options. Please refer to [`PolylineAnnotationOptions`]({{ site.api }}interface/annotationinterface/polylineannotationoptions.html). + +**Return value** + +`true`: Successfully. + +`false`: Failed. + +**Code Snippet** + +```typescript +// Given that editViewer is an existing instance of EditViewer and a document is currently open. +const pageUid = editViewer.indexToUid(0); +const polyline = Dynamsoft.DDV.annotationManager.createAnnotation(pageUid, "polyline"); // Create a default Polyline annotation instance. +const polylineOptions = { + lineEnding: { + end: Dynamsoft.DDV.EnumLineEnding.OPEN, + }, +}; +polyline.updateOptions(polylineOptions); // Update the line ending of the polyline to open. +``` + +**Warning** + + Error Code | Error Message | API Return Value +--------|-----------------------------------------------------|---------------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | `false` + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. | `false` diff --git a/_v3.2.1/api/class/annotation/rectangle.md b/_v3.2.1/api/class/annotation/rectangle.md new file mode 100644 index 0000000..7c54891 --- /dev/null +++ b/_v3.2.1/api/class/annotation/rectangle.md @@ -0,0 +1,209 @@ +--- +layout: default-layout +needAutoGenerateSidebar: true +needGenerateH3Content: true +noTitleIndex: true +title: Dynamsoft Document Viewer API Reference - Rectangle Class +keywords: Documentation, Dynamsoft Document Viewer, API Reference, Rectangle Class +breadcrumbText: Rectangle Class +description: Dynamsoft Document Viewer Documentation API Reference Rectangle Class Page +permalink: /api/class/annotation/rectangle.html +--- + +# Rectangle Class + +## API Index + +| API Name | Description | +| --------------------------------------- | ------------------------------------------------------------------------------------------- | +| [`uid`](#uid) | Return the uid of the annotation. | +| [`pageUid`](#pageuid) | Return the uid of the page where the annotation is located. | +| [`source`](#source) | Return the source of the annotation. | +| [`type`](#type) | Return the type of the annotation | +| [`creationDate`](#creationdate) | Return the creation date of the annotation. | +| [`flattened`](#flattened) | Flattens the annotation onto the image layer, or inspect if the annotation is flattened. | +| [`modificationDate`](#modificationdate) | Return the modification date of the annotation. | +| [`getOptions()`](#getoptions) | Get the annotation options. | +| [`updateOptions()`](#updateoptions) | Update the annotation options. | + +## uid + +Return the uid of the annotation. + +**Syntax** + +```typescript +readonly uid: string; +``` + +{% comment %} +**Remark** + +- It will return `''`, if the annotation is deleted. +{% endcomment %} + +## pageUid + +Return the uid of the page where the annotation is located. + +**Syntax** + +```typescript +readonly pageUid: string; +``` + +**Remark** + +- It will return `''`, if the annotation is deleted. + +{% comment %} +## aabb + +Return Axis-aligned bounding box of the annotation. + +**Syntax** + +```typescript +readonly aabb: Rect; +``` + +**Remark** + +![AABB-Rectangle](/assets/imgs/aabbrectangle.png) + +{% endcomment %} + +## source + +Return the source of the annotation. Possible values: + +* user: the annotation is created by the user's action +* file: the annotation is created from a PDF file +* api: the annotation is created with code + +**Remark** + +It will return `''`, if the annotation is deleted. + +## type + +Return the type of the annotation: `rectangle`. + +All annotation types: + +```ts +"rectangle" | "ellipse" | "line" | "polygon" | "polyline" | "ink" | "textBox" | "textTypewriter" | "stamp" | "highlight" | "underline" | "strikeout" | "incomplete" | "unknown" +``` + +## creationDate + +Return the creation date of the annotation. + +**Syntax** + +```typescript +readonly creationDate: string; +``` + +**Remark** + +- The string would be `D:YYYYMMDDHHmmSSOHH'mm'`, like `D:20230101085959-08'00'`. + +{% comment %} +- It will return `''`, if the annotation is deleted. +{% endcomment %} + +## flattened + +Flattens the annotation onto the image layer, or inspect if the annotation is flattened. + +**Syntax** + +```typescript +flattened: boolean; //Default value is `false`. +``` + +**Remark** + +Flattened annotations move below all unflattened annotations on the page, and are stacked amongst themselves accordingly. + +Flattened annotations become part of the page layer upon file export and cease to be annotations. + +## modificationDate + +Return the modification date of the annotation. + +**Syntax** + +```typescript +readonly modificationDate: string; +``` + +**Remark** + +- The string would be `D:YYYYMMDDHHmmSSOHH'mm'`, like `D:20230101085959-08'00'`. +- It will return `''`, if the annotation is deleted. +- If the annotation is created but not be modified after adding, it equals to [`creationDate`](#creationdate). + + +## getOptions() + +Get the annotation options. + +**Syntax** + +```typescript +getOptions(): RectAnnotationOptions; +``` + +**Return value** + +The object of rectangle annotation options. Please refer to [`RectAnnotationOptions`]({{ site.api }}interface/annotationinterface/rectannotationoptions.html). + +**Code Snippet** + +```typescript +// Given that editViewer is an existing instance of EditViewer and a document is currently open. +const pageUid = editViewer.indexToUid(0); +const rect = Dynamsoft.DDV.annotationManager.createAnnotation(pageUid, "rectangle"); // Create a default Rectangle annotation instance. +const rectOptions = rect.getOptions(); +``` + +## updateOptions() + +Update the annotation options. + +**Syntax** + +```typescript +updateOptions(rectAnnotationOptions: RectAnnotationOptions): boolean; +``` + +**Parameters** + +`rectAnnotationOptions`: The new rectangle annotation options. Please refer to [`RectAnnotationOptions`]({{ site.api }}interface/annotationinterface/rectannotationoptions.html). + +**Return value** + +`true`: Successfully. + +`false`: Failed. + +**Code Snippet** + +```typescript +// Given that editViewer is an existing instance of EditViewer and a document is currently open. +const pageUid = editViewer.indexToUid(0); +const rect = Dynamsoft.DDV.annotationManager.createAnnotation(pageUid, "rectangle"); // Create a default Rectangle annotation instance. +const rectOptions = { + background: "red", +}; +rect.updateOptions(rectOptions); // Update the background of the rectangle to red. +``` + +**Warning** + + Error Code | Error Message | API Return Value +--------|-----------------------------------------------------|---------------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | `false` + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. | `false` diff --git a/_v3.2.1/api/class/annotation/stamp.md b/_v3.2.1/api/class/annotation/stamp.md new file mode 100644 index 0000000..4634b49 --- /dev/null +++ b/_v3.2.1/api/class/annotation/stamp.md @@ -0,0 +1,205 @@ +--- +layout: default-layout +needAutoGenerateSidebar: true +needGenerateH3Content: true +noTitleIndex: true +title: Dynamsoft Document Viewer API Reference - Stamp Class +keywords: Documentation, Dynamsoft Document Viewer, API Reference, Stamp Class +breadcrumbText: Stamp Class +description: Dynamsoft Document Viewer Documentation API Reference Stamp Class Page +permalink: /api/class/annotation/stamp.html +--- + +# Stamp Class + +## API Index + +| API Name | Description | +| --------------------------------------- | ------------------------------------------------------------------------------------------- | +| [`uid`](#uid) | Return the uid of the annotation. | +| [`pageUid`](#pageuid) | Return the uid of the page where the annotation is located. | +| [`source`](#source) | Return the source of the annotation. | +| [`type`](#type) | Return the type of the annotation | +| [`creationDate`](#creationdate) | Return the creation date of the annotation. | +| [`flattened`](#flattened) | Flattens the annotation onto the image layer, or inspect if the annotation is flattened. | +| [`modificationDate`](#modificationdate) | Return the modification date of the annotation. | +| [`getOptions()`](#getoptions) | Get the annotation options. | +| [`updateOptions()`](#updateoptions) | Update the annotation options. | + +## uid + +Return the uid of the annotation. + +**Syntax** + +```typescript +readonly uid: string; +``` + +{% comment %} +**Remark** + +- It will return `''`, if the annotation is deleted. +{% endcomment %} + +## pageUid + +Return the uid of the page where the annotation is located. + +**Syntax** + +```typescript +readonly pageUid: string; +``` + +**Remark** + +- It will return `''`, if the annotation is deleted. + +{% comment %} + +## aabb + +Return Axis-aligned bounding box of the annotation. + +**Syntax** + +```typescript +readonly aabb: Rect; +``` + +{% endcomment %} + +## source + +Return the source of the annotation. Possible values: + +* user: the annotation is created by the user's action +* file: the annotation is created from a PDF file +* api: the annotation is created with code + +**Remark** + +It will return `''`, if the annotation is deleted. + +## type + +Return the type of the annotation: `stamp`. + +All annotation types: + +```ts +"rectangle" | "ellipse" | "line" | "polygon" | "polyline" | "ink" | "textBox" | "textTypewriter" | "stamp" | "highlight" | "underline" | "strikeout" | "incomplete" | "unknown" +``` + +## creationDate + +Return the creation date of the annotation. + +**Syntax** + +```typescript +readonly creationDate: string; +``` + +**Remark** + +- The string would be `D:YYYYMMDDHHmmSSOHH'mm'`, like `D:20230101085959-08'00'`. + +{% comment %} + +- It will return `''`, if the annotation is deleted. + +{% endcomment %} + +## flattened + +Flattens the annotation onto the image layer, or inspect if the annotation is flattened. + +**Syntax** + +```typescript +flattened: boolean; //Default value is `false`. +``` + +**Remark** + +Flattened annotations move below all unflattened annotations on the page, and are stacked amongst themselves accordingly. + +Flattened annotations become part of the page layer upon file export and cease to be annotations. + +## modificationDate + +Return the modification date of the annotation. + +**Syntax** + +```typescript +readonly modificationDate: string; +``` + +**Remark** + +- The string would be `D:YYYYMMDDHHmmSSOHH'mm'`, like `D:20230101085959-08'00'`. +- It will return `''`, if the annotation is deleted. +- If the annotation is created but not be modified after adding, it equals to [`creationDate`](#creationdate). + +## getOptions() + +Get the annotation options. + +**Syntax** + +```typescript +getOptions(): StampAnnotationOptions; +``` + +**Return value** + +The object of stamp annotation options. Please refer to [`StampAnnotationOptions`]({{ site.api }}interface/annotationinterface/stampannotationoptions.html). + +**Code Snippet** + +```typescript +// Given that editViewer is an existing instance of EditViewer and a document is currently open. +const pageUid = editViewer.indexToUid(0); +const stamp = await Dynamsoft.DDV.annotationManager.createAnnotation(pageUid, "stamp"); // Create a default Stamp annotation instance. +const stampOptions = stamp.getOptions(); +``` + +## updateOptions() + +Update the annotation options. + +**Syntax** + +```typescript +updateOptions(stampAnnotationOptions: StampAnnotationOptions): Promise; +``` + +**Parameters** + +`stampAnnotationOptions`: The new stamp annotation options. Please refer to [`StampAnnotationOptions`]({{ site.api }}interface/annotationinterface/stampannotationoptions.html). + +**Return value** + +A promise that resolves when the operation succeeds. + +**Code Snippet** + +```typescript +// Given that editViewer is an existing instance of EditViewer and a document is currently open. +const pageUid = editViewer.indexToUid(0); +const stamp = await Dynamsoft.DDV.annotationManager.createAnnotation(pageUid, "stamp"); // Create a default Stamp annotation instance. +const stampOptions = { + stamp: Dynamsoft.DDV.EnumStampIcon.APPROVED, +}; +await stamp.updateOptions(stampOptions); // Update the stamp icon to 'APPROVED'. +``` + +**Warning** + + Error Code | Error Message | API Return Value +--------|-----------------------------------------------------|---------------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | `false` + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. | `false` diff --git a/_v3.2.1/api/class/annotation/strikeout.md b/_v3.2.1/api/class/annotation/strikeout.md new file mode 100644 index 0000000..350708f --- /dev/null +++ b/_v3.2.1/api/class/annotation/strikeout.md @@ -0,0 +1,198 @@ +--- +layout: default-layout +needAutoGenerateSidebar: true +needGenerateH3Content: true +noTitleIndex: true +title: Dynamsoft Document Viewer API Reference - Strikeout Class +keywords: Documentation, Dynamsoft Document Viewer, API Reference, Strikeout Class +breadcrumbText: Strikeout Class +description: Dynamsoft Document Viewer Documentation API Reference Strikeout Class Page +--- + +# Strikeout Class + +## API Index + +| API Name | Description | +| --------------------------------------- | ------------------------------------------------------------------------------------------- | +| [`uid`](#uid) | Return the uid of the annotation. | +| [`pageUid`](#pageuid) | Return the uid of the page where the annotation is located. | +| [`source`](#source) | Return the source of the annotation. | +| [`type`](#type) | Return the type of the annotation | +| [`creationDate`](#creationdate) | Return the creation date of the annotation. | +| [`flattened`](#flattened) | Flattens the annotation onto the image layer, or inspect if the annotation is flattened. | +| [`modificationDate`](#modificationdate) | Return the modification date of the annotation. | +| [`getOptions()`](#getoptions) | Get the annotation options. | +| [`updateOptions()`](#updateoptions) | Update the annotation options. | + +## uid + +Return the uid of the annotation. + +**Syntax** + +```typescript +readonly uid: string; +``` + +## pageUid + +Return the uid of the page where the annotation is located. + +**Syntax** + +```typescript +readonly pageUid: string; +``` + +**Remark** + +- It will return `''`, if the annotation is deleted. + +## source + +Return the source of the annotation. Possible values: + +* user: the annotation is created by the user's action +* file: the annotation is created from a PDF file +* api: the annotation is created with code + +**Remark** + +It will return `''`, if the annotation is deleted. + +## type + +Return the type of the annotation: `strikeout`. + +All annotation types: + +```ts +"rectangle" | "ellipse" | "line" | "polygon" | "polyline" | "ink" | "textBox" | "textTypewriter" | "stamp" | "highlight" | "underline" | "strikeout" | "incomplete" | "unknown" +``` + +## creationDate + +Return the creation date of the annotation. + +**Syntax** + +```typescript +readonly creationDate: string; +``` + +**Remark** + +- The string would be `D:YYYYMMDDHHmmSSOHH'mm'`, like `D:20230101085959-08'00'`. + +{% comment %} + +- It will return `''`, if the annotation is deleted. + +{% endcomment %} + +## flattened + +Flattens the annotation onto the image layer, or inspect if the annotation is flattened. + +**Syntax** + +```typescript +flattened: boolean; //Default value is `false`. +``` + +**Remark** + +Flattened annotations move below all unflattened annotations on the page, and are stacked amongst themselves accordingly. + +Flattened annotations become part of the page layer upon file export and cease to be annotations. + +## modificationDate + +Return the modification date of the annotation. + +**Syntax** + +```typescript +readonly modificationDate: string; +``` + +**Remark** + +- The string would be `D:YYYYMMDDHHmmSSOHH'mm'`, like `D:20230101085959-08'00'`. +- It will return `''`, if the annotation is deleted. +- If the annotation is created but not be modified after adding, it equals to [`creationDate`](#creationdate). + +## getOptions() + +Get the annotation options. + +**Syntax** + +```typescript +getOptions(): StrikeoutAnnotationOptions; +``` + +**Return value** + +The object of strikeout annotation options. Please refer to [`StrikeoutAnnotationOptions`]({{ site.api }}interface/annotationinterface/strikeoutannotationoptions.html). + +**Code Snippet** + +```typescript +// Given that editViewer is an existing instance of EditViewer and a document is currently open. +const pageUid = editViewer.indexToUid(0); +const options = { + rects: [{ + x: 10, + y: 10, + width: 100, + height: 100, + }], + borderColor: "red", +} +const strikeout = Dynamsoft.DDV.annotationManager.createAnnotation(pageUid, "strikeout", options); // Create a strikeout annotation instance. +const strikeoutOptions = strikeout.getOptions(); +``` + +## updateOptions() + +Update the annotation options. + +**Syntax** + +```typescript +updateOptions(strikeoutAnnotationOptions: StrikeoutAnnotationOptions): boolean; +``` + +**Parameters** + +`strikeoutAnnotationOptions`: The new highlight annotation options. Please refer to [`StrikeoutAnnotationOptions`]({{ site.api }}interface/annotationinterface/strikeoutannotationoptions.html). + +**Return value** + +`true`: Successfully. + +`false`: Failed. + +**Code Snippet** + +```typescript +const newOptions = { + rects: [{ + x: 50, + y: 10, + width: 100, + height: 100, + }], + borderColor: "yellow" +}; +strikeout.updateOptions(newOptions); // Update the annotation. +``` + +**Warning** + + Error Code | Error Message | API Return Value +--------|-----------------------------------------------------|---------------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | `false` + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. | `false` diff --git a/_v3.2.1/api/class/annotation/textbox.md b/_v3.2.1/api/class/annotation/textbox.md new file mode 100644 index 0000000..521e38b --- /dev/null +++ b/_v3.2.1/api/class/annotation/textbox.md @@ -0,0 +1,206 @@ +--- +layout: default-layout +needAutoGenerateSidebar: true +needGenerateH3Content: true +noTitleIndex: true +title: Dynamsoft Document Viewer API Reference - TextBox Class +keywords: Documentation, Dynamsoft Document Viewer, API Reference, TextBox Class +breadcrumbText: TextBox Class +description: Dynamsoft Document Viewer Documentation API Reference TextBox Class Page +permalink: /api/class/annotation/textbox.html +--- + +# TextBox Class + +## API Index + +| API Name | Description | +| --------------------------------------- | ------------------------------------------------------------------------------------------- | +| [`uid`](#uid) | Return the uid of the annotation. | +| [`pageUid`](#pageuid) | Return the uid of the page where the annotation is located. | +| [`source`](#source) | Return the source of the annotation. | +| [`type`](#type) | Return the type of the annotation | +| [`creationDate`](#creationdate) | Return the creation date of the annotation. | +| [`flattened`](#flattened) | Flattens the annotation onto the image layer, or inspect if the annotation is flattened. | +| [`modificationDate`](#modificationdate) | Return the modification date of the annotation. | +| [`getOptions()`](#getoptions) | Get the annotation options. | +| [`updateOptions()`](#updateoptions) | Update the annotation options. | + +## uid + +Return the uid of the annotation. + +**Syntax** + +```typescript +readonly uid: string; +``` + +{% comment %} +**Remark** + +- It will return `''`, if the annotation is deleted. +{% endcomment %} + +## pageUid + +Return the uid of the page where the annotation is located. + +**Syntax** + +```typescript +readonly pageUid: string; +``` + +**Remark** + +- It will return `''`, if the annotation is deleted. + +{% comment %} + +## aabb + +Return Axis-aligned bounding box of the annotation. + +**Syntax** + +```typescript +readonly aabb: Rect; +``` + +{% endcomment %} + +## source + +Return the source of the annotation. Possible values: + +* user: the annotation is created by the user's action +* file: the annotation is created from a PDF file +* api: the annotation is created with code + +**Remark** + +It will return `''`, if the annotation is deleted. + +## type + +Return the type of the annotation: `textBox`. + +All annotation types: + +```ts +"rectangle" | "ellipse" | "line" | "polygon" | "polyline" | "ink" | "textBox" | "textTypewriter" | "stamp" | "highlight" | "underline" | "strikeout" | "incomplete" | "unknown" +``` + +## creationDate + +Return the creation date of the annotation. + +**Syntax** + +```typescript +readonly creationDate: string; +``` + +**Remark** + +- The string would be `D:YYYYMMDDHHmmSSOHH'mm'`, like `D:20230101085959-08'00'`. + +{% comment %} + +- It will return `''`, if the annotation is deleted. +{% endcomment %} + +## flattened + +Flattens the annotation onto the image layer, or inspect if the annotation is flattened. + +**Syntax** + +```typescript +flattened: boolean; //Default value is `false`. +``` + +**Remark** + +Flattened annotations move below all unflattened annotations on the page, and are stacked amongst themselves accordingly. + +Flattened annotations become part of the page layer upon file export and cease to be annotations. + +## modificationDate + +Return the modification date of the annotation. + +**Syntax** + +```typescript +readonly modificationDate: string; +``` + +**Remark** + +- The string would be `D:YYYYMMDDHHmmSSOHH'mm'`, like `D:20230101085959-08'00'`. +- It will return `''`, if the annotation is deleted. +- If the annotation is created but not be modified after adding, it equals to [`creationDate`](#creationdate). + +## getOptions() + +Get the annotation options. + +**Syntax** + +```typescript +getOptions(): TextBoxAnnotationOptions; +``` + +**Return value** + +The object of text box annotation options. Please refer to [`TextBoxAnnotationOptions`]({{ site.api }}interface/annotationinterface/textboxannotationoptions.html). + +**Code Snippet** + +```typescript +// Given that editViewer is an existing instance of EditViewer and a document is currently open. +const pageUid = editViewer.indexToUid(0); +const textBox = Dynamsoft.DDV.annotationManager.createAnnotation(pageUid, "textBox"); // Create a default TextBox annotation instance. +const textBoxOptions = textBox.getOptions(); +``` + +## updateOptions() + +Update the annotation options. + +**Syntax** + +```typescript +updateOptions(textBoxAnnotationOptions: TextBoxAnnotationOptions): boolean; +``` + +**Parameters** + +`textBoxAnnotationOptions`: The new text box annotation options. Please refer to [`TextBoxAnnotationOptions`]({{ site.api }}interface/annotationinterface/textboxannotationoptions.html). + +**Return value** + +`true`: Successfully. + +`false`: Failed. + +**Code Snippet** + +```typescript +// Given that editViewer is an existing instance of EditViewer and a document is currently open. +const pageUid = editViewer.indexToUid(0); +const textBox = Dynamsoft.DDV.annotationManager.createAnnotation(pageUid, "textBox"); // Create a default TextBox annotation instance. +const textBoxOptions = { + background: "red", +}; +textBox.updateOptions(textBoxOptions); // Update the background of the text box to red. +``` + +**Warning** + + Error Code | Error Message | API Return Value +--------|-----------------------------------------------------|---------------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | `false` + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. | `false` diff --git a/_v3.2.1/api/class/annotation/texttypewriter.md b/_v3.2.1/api/class/annotation/texttypewriter.md new file mode 100644 index 0000000..ed19aab --- /dev/null +++ b/_v3.2.1/api/class/annotation/texttypewriter.md @@ -0,0 +1,206 @@ +--- +layout: default-layout +needAutoGenerateSidebar: true +needGenerateH3Content: true +noTitleIndex: true +title: Dynamsoft Document Viewer API Reference - TextTypewriter Class +keywords: Documentation, Dynamsoft Document Viewer, API Reference, TextTypewriter Class +breadcrumbText: TextTypewriter Class +description: Dynamsoft Document Viewer Documentation API Reference TextTypewriter Class Page +permalink: /api/class/annotation/texttypewriter.html +--- + +# TextTypewriter Class + +## API Index + +| API Name | Description | +| --------------------------------------- | ------------------------------------------------------------------------------------------- | +| [`uid`](#uid) | Return the uid of the annotation. | +| [`pageUid`](#pageuid) | Return the uid of the page where the annotation is located. | +| [`source`](#source) | Return the source of the annotation. | +| [`type`](#type) | Return the type of the annotation | +| [`creationDate`](#creationdate) | Return the creation date of the annotation. | +| [`flattened`](#flattened) | Flattens the annotation onto the image layer, or inspect if the annotation is flattened. | +| [`modificationDate`](#modificationdate) | Return the modification date of the annotation. | +| [`getOptions()`](#getoptions) | Get the annotation options. | +| [`updateOptions()`](#updateoptions) | Update the annotation options. | + +## uid + +Return the uid of the annotation. + +**Syntax** + +```typescript +readonly uid: string; +``` + +{% comment %} +**Remark** + +- It will return `''`, if the annotation is deleted. +{% endcomment %} + +## pageUid + +Return the uid of the page where the annotation is located. + +**Syntax** + +```typescript +readonly pageUid: string; +``` + +**Remark** + +- It will return `''`, if the annotation is deleted. + +{% comment %} +## aabb + +Return Axis-aligned bounding box of the annotation. + +**Syntax** + +```typescript +readonly aabb: Rect; +``` + +{% endcomment %} + +## source + +Return the source of the annotation. Possible values: + +* user: the annotation is created by the user's action +* file: the annotation is created from a PDF file +* api: the annotation is created with code + +**Remark** + +It will return `''`, if the annotation is deleted. + +## type + +Return the type of the annotation: `textTypewriter`. + +All annotation types: + +```ts +"rectangle" | "ellipse" | "line" | "polygon" | "polyline" | "ink" | "textBox" | "textTypewriter" | "stamp" | "highlight" | "underline" | "strikeout" | "incomplete" | "unknown" +``` + +## creationDate + +Return the creation date of the annotation. + +**Syntax** + +```typescript +readonly creationDate: string; +``` + +**Remark** + +- The string would be `D:YYYYMMDDHHmmSSOHH'mm'`, like `D:20230101085959-08'00'`. + +{% comment %} + +- It will return `''`, if the annotation is deleted. +{% endcomment %} + +## flattened + +Flattens the annotation onto the image layer, or inspect if the annotation is flattened. + +**Syntax** + +```typescript +flattened: boolean; //Default value is `false`. +``` + +**Remark** + +Flattened annotations move below all unflattened annotations on the page, and are stacked amongst themselves accordingly. + +Flattened annotations become part of the page layer upon file export and cease to be annotations. + +## modificationDate + +Return the modification date of the annotation. + +**Syntax** + +```typescript +readonly modificationDate: string; +``` + +**Remark** + +- The string would be `D:YYYYMMDDHHmmSSOHH'mm'`, like `D:20230101085959-08'00'`. +- It will return `''`, if the annotation is deleted. +- If the annotation is created but not be modified after adding, it equals to [`creationDate`](#creationdate). + + +## getOptions() + +Get the annotation options. + +**Syntax** + +```typescript +getOptions(): TextTypewriterAnnotationOptions; +``` + +**Return value** + +The object of text typewriter annotation options. Please refer to [`TextTypewriterAnnotationOptions`]({{ site.api }}interface/annotationinterface/texttypewriterannotationoptions.html). + +**Code Snippet** + +```typescript +// Given that editViewer is an existing instance of EditViewer and a document is currently open. +const pageUid = editViewer.indexToUid(0); +const textTypewriter = Dynamsoft.DDV.annotationManager.createAnnotation(pageUid, "textTypewriter"); // Create a default TextTypewriter annotation instance. +const textTypewriterOptions = textTypewriter.getOptions(); +``` + +## updateOptions() + +Update the annotation options. + +**Syntax** + +```typescript +updateOptions(textTypewriterAnnotationOptions: TextTypewriterAnnotationOptions): boolean; +``` + +**Parameters** + +`textTypewriterAnnotationOptions`: The new text typewriter annotation options. Please refer to [`TextTypewriterAnnotationOptions`]({{ site.api }}interface/annotationinterface/texttypewriterannotationoptions.html). + +**Return value** + +`true`: Successfully. + +`false`: Failed. + +**Code Snippet** + +```typescript +// Given that editViewer is an existing instance of EditViewer and a document is currently open. +const pageUid = editViewer.indexToUid(0); +const textTypewriter = Dynamsoft.DDV.annotationManager.createAnnotation(pageUid, "textTypewriter"); // Create a default TextTypewriter annotation instance. +const textTypewriterOptions = { + background: "red", +}; +textTypewriter.updateOptions(textTypewriterOptions); // Update the background of the text typewriter to red. +``` + +**Warning** + + Error Code | Error Message | API Return Value +--------|-----------------------------------------------------|---------------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | `false` + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. | `false` diff --git a/_v3.2.1/api/class/annotation/underline.md b/_v3.2.1/api/class/annotation/underline.md new file mode 100644 index 0000000..90ef67e --- /dev/null +++ b/_v3.2.1/api/class/annotation/underline.md @@ -0,0 +1,198 @@ +--- +layout: default-layout +needAutoGenerateSidebar: true +needGenerateH3Content: true +noTitleIndex: true +title: Dynamsoft Document Viewer API Reference - Underline Class +keywords: Documentation, Dynamsoft Document Viewer, API Reference, Underline Class +breadcrumbText: Underline Class +description: Dynamsoft Document Viewer Documentation API Reference Underline Class Page +--- + +# Underline Class + +## API Index + +| API Name | Description | +| --------------------------------------- | ------------------------------------------------------------------------------------------- | +| [`uid`](#uid) | Return the uid of the annotation. | +| [`pageUid`](#pageuid) | Return the uid of the page where the annotation is located. | +| [`source`](#source) | Return the source of the annotation. | +| [`type`](#type) | Return the type of the annotation | +| [`creationDate`](#creationdate) | Return the creation date of the annotation. | +| [`flattened`](#flattened) | Flattens the annotation onto the image layer, or inspect if the annotation is flattened. | +| [`modificationDate`](#modificationdate) | Return the modification date of the annotation. | +| [`getOptions()`](#getoptions) | Get the annotation options. | +| [`updateOptions()`](#updateoptions) | Update the annotation options. | + +## uid + +Return the uid of the annotation. + +**Syntax** + +```typescript +readonly uid: string; +``` + +## pageUid + +Return the uid of the page where the annotation is located. + +**Syntax** + +```typescript +readonly pageUid: string; +``` + +**Remark** + +- It will return `''`, if the annotation is deleted. + +## source + +Return the source of the annotation. Possible values: + +* user: the annotation is created by the user's action +* file: the annotation is created from a PDF file +* api: the annotation is created with code + +**Remark** + +It will return `''`, if the annotation is deleted. + +## type + +Return the type of the annotation: `underline`. + +All annotation types: + +```ts +"rectangle" | "ellipse" | "line" | "polygon" | "polyline" | "ink" | "textBox" | "textTypewriter" | "stamp" | "highlight" | "underline" | "strikeout" | "incomplete" | "unknown" +``` + +## creationDate + +Return the creation date of the annotation. + +**Syntax** + +```typescript +readonly creationDate: string; +``` + +**Remark** + +- The string would be `D:YYYYMMDDHHmmSSOHH'mm'`, like `D:20230101085959-08'00'`. + +{% comment %} + +- It will return `''`, if the annotation is deleted. + +{% endcomment %} + +## flattened + +Flattens the annotation onto the image layer, or inspect if the annotation is flattened. + +**Syntax** + +```typescript +flattened: boolean; //Default value is `false`. +``` + +**Remark** + +Flattened annotations move below all unflattened annotations on the page, and are stacked amongst themselves accordingly. + +Flattened annotations become part of the page layer upon file export and cease to be annotations. + +## modificationDate + +Return the modification date of the annotation. + +**Syntax** + +```typescript +readonly modificationDate: string; +``` + +**Remark** + +- The string would be `D:YYYYMMDDHHmmSSOHH'mm'`, like `D:20230101085959-08'00'`. +- It will return `''`, if the annotation is deleted. +- If the annotation is created but not be modified after adding, it equals to [`creationDate`](#creationdate). + +## getOptions() + +Get the annotation options. + +**Syntax** + +```typescript +getOptions(): UnderlineAnnotationOptions; +``` + +**Return value** + +The object of underline annotation options. Please refer to [`UnderlineAnnotationOptions`]({{ site.api }}interface/annotationinterface/underlineannotationoptions.html). + +**Code Snippet** + +```typescript +// Given that editViewer is an existing instance of EditViewer and a document is currently open. +const pageUid = editViewer.indexToUid(0); +const options = { + rects: [{ + x: 10, + y: 10, + width: 100, + height: 100, + }], + borderColor: "red" +} +const underline = Dynamsoft.DDV.annotationManager.createAnnotation(pageUid, "underline", options); // Create an underline annotation instance. +const underlineOptions = underline.getOptions(); +``` + +## updateOptions() + +Update the annotation options. + +**Syntax** + +```typescript +updateOptions(underlineAnnotationOptions: UnderlineAnnotationOptions): boolean; +``` + +**Parameters** + +`underlineAnnotationOptions`: The new highlight annotation options. Please refer to [`UnderlineAnnotationOptions`]({{ site.api }}interface/annotationinterface/underlineannotationoptions.html). + +**Return value** + +`true`: Successfully. + +`false`: Failed. + +**Code Snippet** + +```typescript +const newOptions = { + rects: [{ + x: 50, + y: 10, + width: 100, + height: 100, + }], + borderColor: "yellow" +}; +await underline.updateOptions(newOptions); // Update the annotation. +``` + +**Warning** + + Error Code | Error Message | API Return Value +--------|-----------------------------------------------------|---------------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | `false` + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. | `false` diff --git a/_v3.2.1/api/class/annotation/unknown.md b/_v3.2.1/api/class/annotation/unknown.md new file mode 100644 index 0000000..2175887 --- /dev/null +++ b/_v3.2.1/api/class/annotation/unknown.md @@ -0,0 +1,113 @@ +--- +layout: default-layout +needAutoGenerateSidebar: true +needGenerateH3Content: true +noTitleIndex: true +title: Dynamsoft Document Viewer API Reference - Unknown Class +keywords: Documentation, Dynamsoft Document Viewer, API Reference, Unknown Class +breadcrumbText: Unknown Class +description: Dynamsoft Document Viewer Documentation API Reference Unknown Class Page +permalink: /api/class/annotation/unknown.html +--- + +# Unknown Class + +This type of annotation may be cannot read by Dynamsoft Document Viewer so far. + +## API Index + +| API Name | Description | +| --------------------------------------- | ----------------------------------------------------------- | +| [`uid`](#uid) | Return the uid of the annotation. | +| [`pageUid`](#pageuid) | Return the uid of the page where the annotation is located. | +| [`source`](#source) | Return the source of the annotation. | +| [`type`](#type) | Return the type of the annotation | +| [`creationDate`](#creationdate) | Return the creation date of the annotation. | +| [`modificationDate`](#modificationdate) | Return the modification date of the annotation. | + +## uid + +Return the uid of the annotation. + +**Syntax** + +```typescript +readonly uid: string; +``` + +{% comment %} +**Remark** + +- It will return `''`, if the annotation is deleted. +{% endcomment %} + +## pageUid + +Return the uid of the page where the annotation is located. + +**Syntax** + +```typescript +readonly pageUid: string; +``` + +**Remark** + +- It will return `''`, if the annotation is deleted. + +## source + +Return the source of the annotation. Possible values: + +* user: the annotation is created by the user's action +* file: the annotation is created from a PDF file +* api: the annotation is created with code + +**Remark** + +It will return `''`, if the annotation is deleted. + +## type + +Return the type of the annotation: `unknown`. + +All annotation types: + +```ts +"rectangle" | "ellipse" | "line" | "polygon" | "polyline" | "ink" | "textBox" | "textTypewriter" | "stamp" | "highlight" | "underline" | "strikeout" | "incomplete" | "unknown" +``` + +## creationDate + +Return the creation date of the annotation. + +**Syntax** + +```typescript +readonly creationDate: string; +``` + +**Remark** + +- The string would be `D:YYYYMMDDHHmmSSOHH'mm'`, like `D:20230101085959-08'00'`. + +## modificationDate + +Return the modification date of the annotation. + +**Syntax** + +```typescript +readonly modificationDate: string; +``` + +**Remark** + +- The string would be `D:YYYYMMDDHHmmSSOHH'mm'`, like `D:20230101085959-08'00'`. +- It will return `''`, if the annotation is deleted. +- If the annotation is created but not be modified after adding, it equals to [`creationDate`](#creationdate). + +{% comment %} + +- It will return `''`, if the annotation is deleted. +{% endcomment %} diff --git a/_v3.2.1/api/class/annotationmanager.md b/_v3.2.1/api/class/annotationmanager.md new file mode 100644 index 0000000..e50a121 --- /dev/null +++ b/_v3.2.1/api/class/annotationmanager.md @@ -0,0 +1,556 @@ +--- +layout: default-layout +needAutoGenerateSidebar: true +needGenerateH3Content: true +noTitleIndex: true +title: Dynamsoft Document Viewer API Reference - AnnotationManager Class +keywords: Documentation, Dynamsoft Document Viewer, API Reference, AnnotationManager Class +breadcrumbText: AnnotationManager Class +description: Dynamsoft Document Viewer Documentation API Reference AnnotationManager Class Page +permalink: /api/class/annotationmanager.html +--- + +# AnnotationManager Class + +The `Dynamsoft.DDV.annotationManager` instance will be created automatically as soon as DDV is initialized. Please refer to [`annotationManager`]({{ site.api }}namespace/ddv.html#static-annotationmanager). + +## API Index + +**Methods** + +| API Name | Description | +| ------------------------------ | ------------------------------------------------------------ | +| [`createAnnotation()`](#createAnnotation) | Create an annotation instance. | +| [`getAnnotationsByUids()`](#getannotationsbyuids) | Get annotations by annotation uids. | +| [`getAnnotationsByPage()`](#getannotationsbypage) | Get annotations in specified page. | +| [`getAnnotationsByDoc()`](#getannotationsbydoc) | Get all annotations in specified document. | +| [`deleteAnnotations()`](#deleteannotations) | Delete specified annotations. | +| [`bringAnnotationForward()`](#bringannotationforward) | Bring the specified annotation forward. | +| [`sendAnnotationBackward()`](#sendannotationbackward) | Send the specified annotation backward. | +| [`bringAnnotationToFront()`](#bringannotationtofront) | Bring the specified annotation in front of all other annotations. | +| [`sendAnnotationToBack()`](#sendannotationtoback) | Send the specified annotation behind all other annotations. | +{% comment %} +| [`importXfdf()`](#importxfdf) | Import annotations in an XFDF(XML) string to the specified document. | +| [`exportXfdf()`](#exportxfdf) | Export all annotations from the specified document as an XFDF(XML) string. | +{% endcomment %} + + +**Events** + +| API Name | Description | +| -------- | -------------------------------------------------- | +| [`on()`](#on) | Bind a listener to the specified event. | +| [`off()`](#off) | Unbind event listener(s) from the specified event. | + + +***Integrated Events*** + +| Event Name | Description | +| --------------- | ----------------------------------------- | +| [`annotationsAdded`](#annotationsadded) | Triggered when new annotation(s) is added. | +| [`annotationsDeleted`](#annotationsdeleted) | Triggered when annotation(s) is deleted. | +| [`annotationLayerChanged`](#annotationlayerchanged) | Triggered when annotation's layer is changed. | +| [`annotationsModified`](#annotationsmodified) | Triggered when annotation(s) is modified. | + + +## Methods + +### createAnnotation() +Create an annotation instance and add the created instance to the specified page. + +**Syntax** + +```typescript +createAnnotation(pageUid: string, type: K, annotationOptions?: AnnotationsTypeMapOuter[K]["options"]): AnnotationsTypeMapOuter[K]["return"]; +``` + +**Parameters** + +`pageUid`: Specify the page to add the annotation. + +`type`: Specify the type of annotation to create. +```typescript +type AnnotationType = "rectangle" | "ellipse" | "polygon" | "polyline" | "line" | "ink" | "textBox" | "textTypewriter" | "stamp" | "highlight" | "underline"| "strikeout"; +``` + +`annotationOptions`: The annotation options. Please refer to [the options list](/api/interface/annotationinterface/index.md#options). + +**Return value** + +The instance of annotation. Please refer to [Annotation](/api/class/annotation/index.md). + +**Code Snippet** + +- To creat new annotations. + + ```typescript + // Given that editViewer is an existing instance of EditViewer and a document is currently open. + const pageUid = editViewer.indexToUid(0); + + const rect = Dynamsoft.DDV.annotationManager.createAnnotation(pageUid, "rectangle"); + const ellipse = Dynamsoft.DDV.annotationManager.createAnnotation(pageUid, "ellipse"); + const polygon = Dynamsoft.DDV.annotationManager.createAnnotation(pageUid, "polygon"); + const polyline = Dynamsoft.DDV.annotationManager.createAnnotation(pageUid, "polyline"); + const line = Dynamsoft.DDV.annotationManager.createAnnotation(pageUid, "line"); + const ink = Dynamsoft.DDV.annotationManager.createAnnotation(pageUid, "ink"); + const textBox = Dynamsoft.DDV.annotationManager.createAnnotation(pageUid, "textBox"); + const textTypewriter = Dynamsoft.DDV.annotationManager.createAnnotation(pageUid, "textTypewriter"); + const stamp = await Dynamsoft.DDV.annotationManager.createAnnotation(pageUid, "stamp"); + ``` + + +**Exception** + + Error Code | Error Message +--------|----------------------------------------------------- + -80001 | License string is invalid. + -80002 | *XXX(LicenseModuleName)* module license has expired. + -80003 | *XXX(LicenseModuleName)* module license is missing. + -80004 | *XXX(LicenseModuleName)* module license version does not match. + -80005 | Domain does not match the domain bound to the *XXX(LicenseModuleName)* module license. + -80050 | DDV.Core.init() has not been set up yet. + -80051 | DDV.Core.init() has not been completed. + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. + -80103 | *XXX(API)*: The value for *XXX(ParameterName)* is not supported. + -80105 | *XXX(API)*: The specified page(s) do not exist. + + +### getAnnotationsByUids() + +Get annotations by annotation uids. + +**Syntax** + +```typescript +getAnnotationsByUids(annotationUids: string[]): Annotation[]; +``` + +**Parameters** + +`annotationUids`: The array of the annotation uids. + +**Return value** + +An array of [Annotation](/api/class/annotation/index.md) objects. + +**Warning** + + Error Code | Error Message | API return value +-------------|-----------------------------------------------------|--------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | [] + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. | [] + -80106 | *XXX(API)*: The specified annotation does not exist.| [] + +### getAnnotationsByPage() + +Get annotations in specified page. + +**Syntax** + +```typescript +getAnnotationsByPage(pageUid: string): Annotation[]; +``` + +**Parameters** + +`pageUid`: Specify the page. + +**Return value** + +An array of [Annotation](/api/class/annotation/index.md) object. + +**Warning** + + Error Code | Error Message | API return value +-------------|-----------------------------------------------------|--------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | [] + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. | [] + -80105 | *XXX(API)*: The specified page(s) do not exist. | [] + +### getAnnotationsByDoc() + +Get all annotations in specified document. + +**Syntax** + +```typescript +getAnnotationsByDoc(docUid: string): Annotation[]; +``` + +`docUid`: Specify the doc. + +**Return value** + +An array of [Annotation](/api/class/annotation/index.md) objects. + +**Warning** + + Error Code | Error Message | API return value +--------|-----------------------------------------------------|--------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | [] + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. | [] + -80104 | *XXX(API)*: The specified document(s) do not exist. | [] + + +### deleteAnnotations() + +Delete specified annotations. + +**Syntax** + +```typescript +deleteAnnotations(annotationUids: string[]): boolean; +``` + +**Parameters** + +`annotationUids`: Specify the array of annotation uids to delete. + +**Return value** + +`true` + +`false` + +**Warning** + + Error Code | Error Message | API return value +-------------|--------------------------------------------------------|--------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | `false` + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. | `false` + -80106 | *XXX(API)*: The specified annotation does not exist. | `false` + +### bringAnnotationForward() + +Bring the specified annotation forward. + +**Syntax** + +```typescript +bringAnnotationForward(annotationUid: string): boolean; +``` + +**Parameters** + +`annotationUid`: Specify the annotation uid to bring forward. + +**Return value** + +`true`: Successfully. + +`false`: Failed. + +**Warning** + + Error Code | Error Message | API return value +-------------|--------------------------------------------------------|--------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | `false` + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. | `false` + -80106 | *XXX(API)*: The specified annotation does not exist. | `false` + +### sendAnnotationBackward() + +Send the specified annotation backward. + +**Syntax** + +```typescript +sendAnnotationBackward(annotationUid: string): boolean; +``` + +**Parameters** + +`annotationUid`: Specify the annotation uid to send backward. + +**Return value** + +`true`: Successfully. + +`false`: Failed. + +**Warning** + + Error Code | Error Message | API return value +-------------|--------------------------------------------------------|--------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | `false` + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. | `false` + -80106 | *XXX(API)*: The specified annotation does not exist. | `false` + +### bringAnnotationToFront() + +Bring the specified annotation in front of all other annotations. + +**Syntax** + +```typescript +bringAnnotationToFront(annotationUid: string): boolean; +``` + +**Parameters** + +`annotationUid`: Specify the annotation uid to bring to front. + +**Return value** + +`true`: Successfully. + +`false`: Failed. + +**Warning** + + Error Code | Error Message | API return value +-------------|--------------------------------------------------------|--------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | `false` + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. | `false` + -80106 | *XXX(API)*: The specified annotation does not exist. | `false` + +### sendAnnotationToBack() + +Send the specified annotation behind all other annotations. + +**Syntax** + +```typescript +sendAnnotationToBack(annotationUid: string): boolean; +``` + +**Parameters** + +`annotationUid`: Specify the annotation uid to send to back. + +**Return value** + +`true`: Successfully. + +`false`: Failed. + +**Warning** + + Error Code | Error Message | API return value +-------------|--------------------------------------------------------|--------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | `false` + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. | `false` + -80106 | *XXX(API)*: The specified annotation does not exist. | `false` + +{% comment %} +### importXfdf() + +Import annotations in an XFDF(XML) string to the specified document. + +**Syntax** + +```typescript +importXfdf(docUid: string, xfdf: string): Prmoise; +``` + +**Parameters** + +`docUid`: Specify the document. + +`xfdf`: The XFDF(XML) string to import. + +**Return value** + +An array of imported [Annotation](/api/class/annotation/index.md) objects. + +**Promise Exception** + + Error Code | Error Message +--------|----------------------------------------------------- + -80001 | License string is invalid. + -80002 | *XXX(LicenseModuleName)* module license has expired. + -80003 | *XXX(LicenseModuleName)* module license is missing. + -80004 | *XXX(LicenseModuleName)* module license version does not match. + -80005 | Domain does not match the domain bound to the *XXX(LicenseModuleName)* module license. + -80050 | DDV.Core.init() has not been set up yet. + -80051 | DDV.Core.init() has not been completed. + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. + -80104 | *XXX(API)*: The specified document(s) do not exist. + + **Warning** + + Error Code | Error Message +--------|----------------------------------------------------- + -80203 | Failed to read some annotations because they are not supported by Dynamsoft Document Viewer so far. + +### exportXfdf() + +Export all annotations from the specified document as an XFDF(XML) string. + +**Syntax** + +```typescript +exportXfdf(docUid: string): Promise; +``` + +**Parameters** + +`docUid`: Specify the document. + +**Return value** + +The XFDF(XML) string. + +**Promise Exception** + + Error Code | Error Message +--------|----------------------------------------------------- + -80001 | License string is invalid. + -80002 | *XXX(LicenseModuleName)* module license has expired. + -80003 | *XXX(LicenseModuleName)* module license is missing. + -80004 | *XXX(LicenseModuleName)* module license version does not match. + -80005 | Domain does not match the domain bound to the *XXX(LicenseModuleName)* module license. + -80050 | DDV.Core.init() has not been set up yet. + -80051 | DDV.Core.init() has not been completed. + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. + -80104 | *XXX(API)*: The specified document(s) do not exist. + +{% endcomment %} + +## Events + +### on() + +Bind a listener to the specified event. + +**Syntax** + +```typescript +on(eventName: EventName, listener:(event:EventObject)=>void): void; +``` + +**Parameters** + +`eventName`: Specify the event name. It should be [an integrated event name](#integrated-events). + +`listener`: Specify the listener. + +**Code Snippet** + +```typescript +// Bind a listener to the integrated event annotationsModified. +const eventFunc = (e)=>{ + console.log(e); + console.log(e.modifiedAnnotations[0].uid); + console.log(e.modifiedAnnotations[0].newOptions); + console.log(e.actions); +}; + +Dynamsoft.DDV.annotationManager.on("annotationsModified", eventFunc); +``` + +**Warning** + + Error Code | Error Message +--------|----------------------------------------------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. + -80103 | *XXX(API)*: The value for *XXX(ParameterName)* is not supported. + +### off() + +Unbind event listener(s) from the specified event. + +**Syntax** + +```typescript +off(eventName: EventName, listener?:(event:EventObject)=>void): void; +``` + +**Parameters** + +`eventName`: Specify the event name. It should be [an integrated event name](#integrated-events). + +`listener`: Specify the listener. If no listener is specified, unbind all event listeners from the specified event + +**Code Snippet** + +```typescript +const eventFunc = (e)=>{ + console.log(e); + console.log(e.modifiedAnnotations[0].uid); + console.log(e.modifiedAnnotations[0].newOptions); + console.log(e.actions); +}; + +Dynamsoft.DDV.annotationManager.on("annotationsModified", eventFunc); + +// Unbind the specified event listener. +Dynamsoft.DDV.annotationManager.off("annotationsModified", eventFunc); +``` + +**Warning** + + Error Code | Error Message +--------|----------------------------------------------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. + -80103 | *XXX(API)*: The value for *XXX(ParameterName)* is not supported. + +### Integrated events + +#### annotationsAdded + +Triggered when new annotation(s) is added. + +**Callback** + +An EventObject. + +**Attributes** + +`annotationUids`: The array of new added annotations uids. + +#### annotationsDeleted + +Triggered when annotation(s) is deleted. + +**Callback** + +An EventObject. + +**Attributes** + +`annotationUids`: The array of deleted annotations uids. + +#### annotationLayerChanged + +Triggered when annotation's layer is changed. + +**Callback** + +An EventObject. + +**Attributes** + +`oldAnnotationUidList `: The list of old annotation uids, arranged in hierarchical order from bottom to top for each page. + +`newAnnotationUidList`: The list of new annotation uids, arranged in hierarchical order from bottom to top for each page. + +#### annotationsModified + +Triggered when annotation(s) is modified. + +**Callback** + +An EventObject. + +**Attributes** + +`modifiedAnnotations`: The array of the objects which include below properties. + +- `uid`: The modified annotation uid. +- `oldOptions`: The modified annotation old options. +- `newOptions`: The modified annotation new options. + +`actions`: The array of actions. Supported actions: + +- `moved` +- `resized` +- `rotated` +- `flagsChanged` +- `appearanceChanged` +- `contentChanged` diff --git a/_v3.2.1/api/class/editviewer.md b/_v3.2.1/api/class/editviewer.md new file mode 100644 index 0000000..5e477a5 --- /dev/null +++ b/_v3.2.1/api/class/editviewer.md @@ -0,0 +1,1883 @@ +--- +layout: default-layout +needAutoGenerateSidebar: true +needGenerateH3Content: true +noTitleIndex: true +title: Dynamsoft Document Viewer API Reference - EditViewer Class +keywords: Documentation, Dynamsoft Document Viewer, API Reference, EditViewer Class +breadcrumbText: EditViewer Class +description: Dynamsoft Document Viewer Documentation API Reference EditViewer Class Page +permalink: /api/class/editviewer.html +--- + +# EditViewer Class + +Edit Viewer is used to edit the pages in document, such as, rotating, cropping, filtering, etc. as well as adjust the layout of the display. + +## API Index + +**Create and Destroy Instances** + +| API Name | Description | +| ----------------------------- | ------------------------------------------------ | +| [`EditViewer()`](#editviewer) | Default constructor of an `EditViewer` instance. | +| [`destroy()`](#destroy) | Destroy the `EditViewer` instance. | + +**Viewer Control** + +| API Name | Description | +| --------------------------------------- | ---------------------------------------------------- | +| [`bindContainer()`](#bindcontainer) | Bind the viewer to the specified container. | +| [`unbindContainer()`](#unbindcontainer) | Unbind the viewer from the specified container. | +| [`isBoundContainer`](#isboundcontainer) | Return whether the viewer is bound to a container. | +| [`getStyle()`](#getstyle) | Get the style object of `EditViewer`. | +| [`getVisiblePagesInfo()`](#getVisiblePagesInfo) | Get the visible pages info | +| [`updateStyle()`](#updatestyle) | Update the style object of `EditViewer`. | +| [`getUiConfig()`](#getuiconfig) | Get current `UiConfig` object. | +| [`updateUiConfig()`](#updateuiconfig) | Update `UiConfig` object. | +| [`show()`](#show) | Show the viewer. | +| [`hide()`](#hide) | Hide the viewer. | +| [`isVisible`](#isvisible) | Return whether the viewer is shown or hidden. | +| [`toolMode`](#toolmode) | Specify or return the tool mode of the viewer. | +| [`annotationMode`](#annotationmode) | Specify or return the annotation mode of the viewer. | + +**Document and Page Control** + +| API Name | Description | +| ----------------------------------------------- | ----------------------------------------------- | +| [`openDocument()`](#opendocument) | Open the specified document by document uid. | +| [`closeDocument()`](#closedocument) | Close current document. | +| [`currentDocument`](#currentdocument) | Return the object of the current document. | +| [`getPageCount()`](#getpagecount) | Get the page count in the viewer. | +| [`goToPage()`](#gotopage) | Navigate to the specified page by index. | +| [`getCurrentPageIndex()`](#getcurrentpageindex) | Get the index of current page. | +| [`getCurrentPageUid()`](#getcurrentpageuid) | Get the uid of the current page. | +| [`indexToUid()`](#indextouid) | Get the uid of the specified page by its index. | +| [`uidToIndex()`](#uidtoindex) | Get the index of the specified page by its uid. | + + +**Display Control** + +| API Name | Description | +| ----------------------------------------------------- | -------------------------------------------------- | +| [`displayMode`](#displaymode) | Specify or return the display mode of the viewer. | +| [`setParallelScrollCount()`](#setparallelscrollcount) | Specify the number of pages to scroll in parallel. | +| [`fitMode`](#fitmode) | Specify or return the fit mode of the viewer. | +| [`zoom`](#zoom) | Specify or return zoom ratio. | +| [`zoomOrigin`](#zoomorigin) | Specify or return the zoom origin of the viewer. | + +**Annotation Control** + +| API Name | Description | +| ----------------------------------------------------------- | ---------------------------------------------------------------- | +| [`setAnnotationDrawingStyle()`](#setannotationdrawingstyle) | Set the default drawing style of annotations by annotation type. | +| [`selectAnnotations()`](#selectannotations) | Select the specified annotation(s) on the current page. | +| [`getSelectedAnnotations()`](#getselectedannotations) | Get selected annotation(s). | +| [`getAnnotationDrawingStyle()`](#getannotationdrawingstyle) | Get the annotation drawing style(s). | + + +**Edit Operations** + +| API Name | Description | +| ------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| [`rotate()`](#rotate) | Rotate the specified pages. | +| [`crop()`](#crop) | Crop the specified page(s) with the specified rectangle. | +| [`getCropRect()`](#getcroprect) | Get the crop rectangular selection. | +| [`setCropRect()`](#setcroprect) | Set a crop rectangular selection on the current page. *This method is only available when [`toolMode`](#toolmode) is `crop` mode.* | +| [`cropMode`](#cropmode) | Get the current mode for cropping: crop the current image or all the images | +| [`undo()`](#undo) | Undo the last editing operation. | +| [`redo()`](#redo) | Redo the last undo operation. | +| [`saveOperations()`](#saveoperations) | Save the edit operations in pages to document. | + +**Text Selection** + +| API Name | Description | +| --------------- | -------------------------------------------------- | +| [`getTextSelection()`](#gettextselection) | Get selected text's detailed info. | + +**Search** + +| API Name | Description | +| --------------- | -------------------------------------------------- | +| [`searchNextText()`](#searchnexttext) | Search the next matched result. | +| [`searchPrevText()`](#searchprevtext) | Search the previous matched result. | +| [`searchFullText()`](#searchfulltext) | Search the full text to get all the matched results. | + +**Events** + +| API Name | Description | +| --------------- | -------------------------------------------------- | +| [`on()`](#on) | Bind a listener to the specified event. | +| [`off()`](#off) | Unbind event listener(s) from the specified event. | + +***Integrated Events*** + +| Event Name | +| ----------------------------------------------------------- | +| [`resized`](#resized) | +| [`pageRendered`](#pagerendered) | +| [`currentIndexChanged`](#currentindexchanged) | +| [`currentPageChanged`](#currentpagechanged) | +| [`displayModeChanged`](#displaymodechanged) | +| [`fitModeChanged`](#fitmodechanged) | +| [`zoomChanged`](#zoomchanged) | +| [`toolModeChanged`](#toolmodechanged) | +| [`cropRectDrawn`](#croprectdrawn) | +| [`cropRectDeleted`](#croprectdeleted) | +| [`cropRectModified`](#croprectmodified) | +| [`annotationDrawingStyleChanged`](#annotationdrawingstylechanged) | +| [`selectedAnnotationsChanged`](#selectedannotationschanged) | +| [`click`](#click) | +| [`dblclick`](#dbclick) | +| [`rightclick`](#rightclick) | +| [`visibilityChanged`](#visibilitychanged) | +| [`textUnselected`](#textunselected) | +| [`textSelected`](#textselected) | +| [`textSearchTriggered`](#textsearchtriggered) | +| [`undoRedoStateChanged`](#undoredostatechanged) | +| [`paginationChanged`](#paginationchanged) | +| [`pointerdown`](#pointerdown) | +| [`pointerdown`](#pointerdown) | +| [`pointermove`](#pointermove) | +| [`pointerup`](#pointerup) | +| [`pageover`](#pageover) | +| [`pageout`](#pageout) | +| [`scroll`](#scroll) | + +## Create and Destroy Instances + +### EditViewer() + +Default constructor of an `EditViewer` instance. + +**Syntax** + +```typescript +new Dynamsoft.DDV.EditViewer(options?: EditViewerConstructorOptions); +``` + +**Parameters** + +`options`: The constructor options for an `EditViewer` instance. Please refer to [`EditViewerConstructorOptions`](/api/interface/editviewerconstructoroptions.md). + +**Code Snippet** + +```typescript +const editViewer = new Dynamsoft.DDV.EditViewer({ + container: document.getElementById("viewer"), +}); + +// An IBrowseViewer object will be created at meanwhile. Please refer to Remark part. +const thumbnailObj = editViewer.thumbnail; +``` + +**Exception** + + | Error Code | Error Message | + | ---------- | -------------------------------------------------------------------------------------- | + | -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | + | -80001 | License string is invalid. | + | -80002 | *XXX(LicenseModuleName)* module license has expired. | + | -80003 | *XXX(LicenseModuleName)* module license is missing. | + | -80004 | *XXX(LicenseModuleName)* module license version does not match. | + | -80005 | Domain does not match the domain bound to the *XXX(LicenseModuleName)* module license. | + | -80050 | DDV.Core.init() has not been set up yet. | + | -80051 | DDV.Core.init() has not been completed. | + | -80302 | minZoom value cannot be larger than maxZoom value. | + +**Warning** + + | Error Code | Error Message | + | ---------- | ------------------------------------------------------------------------------------------------------------ | + | -80316 | ImageFilter needs to be configured by Dynamsoft.DDV.setProcessingHandler to enable the image filter feature. | + +**Remark** + +- An `IBrowseViewer` object, `editViewer.thumbnail`, will be created at meanwhile which represents the thumbnail object in edit viewer. Please refer to [`IBrowseViewer`]({{ site.api }}interface/ibrowseviewer.html). + +### destroy() + +Destroy the `EditViewer` instance. + +**Syntax** + +```typescript +destroy(): void; +``` + +**Code Snippet** + +```typescript +editViewer.destroy(); +``` + +**Remark** + +- The editing operations (rotating, cropping, filtering) in pages will be saved to document automatically when destroy the viewer instance. + +**See Also** + +[saveOperations](#saveoperations) + +## Viewer Control + +### bindContainer() + +Bind the viewer to the specified container. + +**Syntax** + +```typescript +bindContainer(container: string | HTMLElement): void; +``` + +**Parameters** + +`container`: The container which is used to show the viewer. Its `id` or `HTMLElement` is acceppted. + +**Code Snippet** + +```typescript +// Assume there is a container with id "viewercontainer" on the page. +editViewer.bindContainer("viewercontainer"); +``` + +**Exception** + + Error Code | Error Message +--------|----------------------------------------------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. + -80301 | The specified container does not exist. + +**Remark** + +- A viewer can only be bound to one container at once. If you bind the viewer to another container when it has been bound to a container, the viewer will be bound to the new container and unbound from the old container automatically. + +### unbindContainer() + +Unbind the viewer from the specified container. + +**Syntax** + +```typescript +unbindContainer(): void; +``` + +**Code Snippet** + +```typescript +editViewer.unbindContainer(); +``` + +### isBoundContainer + +Return whether the viewer is bound to a container. + +**Syntax** + +```typescript +readonly isBoundContainer: boolean; +``` + +### getStyle() + +Get the style object of `EditViewer`. + +**Syntax** + +```typescript +getStyle(editViewerStyleName: EditViewerStyleName): EditViewerStyle | null; +``` + +**Parameters** + +`editViewerStyleName`: An `EditViewerStyleName` can be one of five types. + +```typescript +type EditViewerStyleName = "canvasStyle" | "pageStyle" | "currentPageStyle" | "quadSelectionStyle" | "annotationSelectionStyle"; +``` + +**Return values** + +The style object. Please refer to [Style Interfaces]({{ site.api }}interface/styleinterface/index.html).. + +**Code Snippet** + +```typescript +// Get pageStyle object; +const pageStyle = editViewer.getStyle("pageStyle"); +``` + +**Warning** + + Error Code | Error Message | API Return Value +--------|-------------------------------------------------------------------------|---------------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | `null` + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. | `null` + -80103 | *XXX(API)*: The value for *XXX(ParameterName)* is not supported. | `null` + +### getVisiblePagesInfo() + +Get the visible pages info. + +**Syntax** + +```typescript +getVisiblePagesInfo(): PageVisualInfo[]; +``` + +**Return values** + +Array of the `PageVisualInfo` object. Please refer to [`PageVisualInfo`](/api/interface/pagevisualinfo.md). + +### updateStyle() + +Update the style object of `EditViewer`. + +**Syntax** + +```typescript +updateStyle(editViewerStyleName: EditViewerStyleName, editViewerStyle: EditViewerStyle): boolean; +``` + +**Parameters** + +`editViewerStyleName`: An `EditViewerStyleName` can be one of five types. + +```typescript +type EditViewerStyleName = "canvasStyle" | "pageStyle" | "currentPageStyle" | "quadSelectionStyle" | "annotationSelectionStyle"; +``` + +`editViewerStyle`: The style object. Please refer to [Style Interfaces]({{ site.api }}interface/styleinterface/index.html). + +**Return Value** + +`true`: Successfully. + +`false`: Failed. + +**Code Snippet** + +- First method + + ```typescript + // Get style object + const pageStyle = editViewer.getStyle("pageStyle"); + + // Modify the style object + pageStyle.background = "red"; + pageStyle.border = "1px solid green"; + + // Update page style + editViewer.updateStyle("pageStyle", pageStyle); + ``` + +- Second method + + ```typescript + // Update the style object directly + editViewer.updateStyle("pageStyle", { + background: "red", + border: "1px solid green", + }); + ``` + +**Warning** + + Error Code | Error Message | API Return Value +--------|-------------------------------------------------------------------------|---------------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | `false` + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. | `false` + -80103 | *XXX(API)*: The value for *XXX(ParameterName)* is not supported. | `false` + + +**Remark** + +- The updates are independent of whether the viewer is displayed and are updated in real time. + +### getUiConfig() + +Get current `UiConfig` object. + +**Syntax** + +```typescript +getUiConfig(): UiConfig; +``` + +**Return Value** + +The [`UiConfig`]({{ site.api }}interface/uiconfig.html) object. + +**Code Snippet** + +```typescript +const viewerUi = editViewer.getUiConfig(); +``` + +### updateUiConfig() + +Update `UiConfig` object. + +**Syntax** + +```typescript +updateUiConfig(uiConfig: UiConfig): boolean; +``` + +**Parameters** + +`uiConfig`: The [`UiConfig`]({{ site.api }}interface/uiconfig.html) to update. + +**Return Value** + +`true`: Successfully. + +`false`: Failed. + +**Code Snippet** + +```typescript +const viewerUi = Dynamsoft.DDV.getDefaultUiConfig("editViewer"); +const header = viewerUi.children[0]; +header.children.splice(0,0,Dynamsoft.DDV.Elements.Delete); //Add `Delete` element in header. +editViewer.updateUiConfig(viewerUi); +``` + +**Warning** + + Error Code | Error Message | API Return Value +--------|-----------------------------------------------------|---------------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | `false` + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. | `false` + -80313 | The element *XXX(ElementName)* is not supported in *XXX(ClassName)* class. | `false` + +**Remark** + +- The updates are independent of whether the viewer is displayed and are updated in real time. + +### show() + +Show the viewer. + +**Syntax** + +```typescript +show(): void; +``` + +**Code Snippet** + +```typescript +editViewer.show(); +``` + +**Remark** + +- The viewer is shown automatically when it is created. + +### hide() + +Hide the viewer. + +**Syntax** + +```typescript +hide(): void; +``` + +**Code Snippet** + +```typescript +editViewer.hide(); +``` + +### isVisible + +Return whether the viewer is shown or hidden. + +**Syntax** + +```typescript +readonly isVisible: boolean; +``` + +**Remark** + +- The viewer is shown automatically when it is created which means the default value of `isVisible` is `true`. + +### toolMode + +Specify or return the tool mode of the viewer. + +**Syntax** + +```typescript +toolMode: ToolMode; +``` + +A `ToolMode` can be one of following types. + +```typescript +type ToolMode = "pan" | "crop" | "annotation" | "textSelection"; +``` + +`pan`: The default tool mode. + +`crop`: A mode what allows drawing a rectangle by [`setCropRect()`](#setcroprect). + +`annotation`: A mode that allows creating annotations to be manipulated via the UI. + +`textSelection`: A mode that allows selecting text to be manipulated via the UI. + +**Code Snippet** + +```typescript +editViewer.toolMode = "crop"; +``` + +**Warning** + + Error Code | Error Message +--------|----------------------------------------------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. + -80103 | *XXX(API)*: The value for *XXX(ParameterName)* is not supported. + +**Remark** + +- If `toolMode` is set to `annotation`, can use [`annotationMode`](#annotationmode) to clarify the specific operation. + +### annotationMode + +Specify or return the annotation mode of the viewer. + +**Syntax** + +```typescript +annotationMode: AnnotationMode; +``` + +An `AnnotationMode` can be one of following types. + +```typescript +type AnnotationMode = "select" | "erase" | "rectangle" | "ellipse" | "line" | "polygon" | "polyline" | "ink" | "textBox" | "textTypewriter" | "stamp" | "highlight" | "strikeout" | "underline"; +``` + +**Code Snippet** + +```typescript +editViewer.toolMode = "annotation"; +editViewer.annotationMode = "select"; +``` + +**Warning** + + Error Code | Error Message +--------|----------------------------------------------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. + -80103 | *XXX(API)*: The value for *XXX(ParameterName)* is not supported. + +**Remark** + +- It only take effect when [`toolMode`](#toolmode) is `annotation`. +- Default value is `select`. +- When `enableContinuousDrawing` is false, please note that the `toolMode` will automatically switch to `pan` after completing an annotation drawing interaction, unless the `annotationMode` is set to `select`, `erase`, or `ink` mode. + +## Document and Page Control + +### openDocument() + +Open the specified document. + +**Syntax** + +```typescript +openDocument(docUid: string | doc: IDocument): void; +``` + +**Parameters** + +`docUid`: The uid of the specified document. + +`doc`: The object of the document to open. Please refer to [IDocument]({{ site.api }}interface/idocument/index.html). + +**Code Snippet** + +```typescript +// Assume there is a document whose id is "lnn0ll9o124". +editViewer.openDocument("lnn0ll9o124"); + +// OR +// Assume there is a document object firstDoc. +const docUid = firstDoc.uid; +editViewer.openDocument(docUid); +editViewer.openDocument(firstDoc); +``` + +**Exception** + + Error Code | Error Message +--------|----------------------------------------------------- + -80100 | *XXX(API)*: docUid or doc is invalid. + -80102 | *XXX(API)*: docUid or doc is missing. + -80104 | *XXX(API)*: The specified document(s) do not exist. + +**Remark** + +- If another ducument is opened when there is a document already opened, the opened document will be closed automatically. + +### closeDocument() + +Close current document. + +**Syntax** + +```typescript +closeDocument(): boolean; +``` + +**Return Value** + +`true`: Successfully. + +`false`: Failed. + +**Code Snippet** + +```typescript +editViewer.closeDocument(); +``` + +**Warning** + + Error Code | Error Message | API Return Value +--------|-----------------------------------------------------|-------------------- + -80304 | No document opened. | `false` + +### currentDocument + +Return the object of the current document. + +**Syntax** + +```typescript +readonly currentDocument: IDocument | null; +``` + +**Code Snippet** + +```typescript +const currentDoc = editViewer.currentDocument; +``` + +**See Also** + +[IDocument]({{ site.api }}interface/idocument/index.html) + +### getPageCount() + +Get the page count in the viewer. + +**Syntax** + +```typescript +getPageCount(): number; +``` + +**Return Value** + +The page count. + +**Code Snippet** + +```typescript +const pageCount = editViewer.getPageCount(); +``` + +**Warning** + + Error Code | Error Message | API Return Value +--------|-----------------------------------------------------|-------------------- + -80304 | No document opened. | `-1` + +### goToPage() + +Navigate to the specified page by index. + +**Syntax** + +```typescript +goToPage(index: number): number; +``` + +**Parameters** + +`index`: The index of the page which need to navigate to. + +**Return Value** + +The index of the page which navigate to. + +**Code Snippet** + +```typescript +// Navigate to page 4. +editViewer.goToPage(3); +``` + +**Warning** + + Error Code | Error Message | API Return Value +--------|----------------------------------------------------------|------------------ + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | `-1` + -80101 | *XXX(API)*: *XXX(ParameterName)* is out of range. | `-1` + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. | `-1` + -80304 | No document opened. | `-1` + -80305 | There is no image in the current document. | `-1` + +### getCurrentPageIndex() + +Get the index of the current page. + +**Syntax** + +```typescript +getCurrentPageIndex(): number; +``` + +**Return Value** + +The index of the current page. + +**Code Snippet** + +```typescript +const currentIndex = editViewer.getCurrentPageIndex(); +``` + +**Warning** + + Error Code | Error Message | API Return Value +--------|-----------------------------------------------------|-------------------- + -80304 | No document opened. | `-1` + -80305 | There is no image in the current document. | `-1` + +### getCurrentPageUid() + +Get the uid of the current page. + +**Syntax** + +```typescript +getCurrentPageUid(): string; +``` + +**Return Value** + +The uid of the current page. + +**Code Snippet** + +```typescript +const curPageUid = editViewer.getCurrentPageUid(); +``` + +**Warning** + + Error Code | Error Message | API Return Value +--------|-----------------------------------------------------|-------------------- + -80304 | No document opened. | `''` + -80305 | There is no image in the current document. | `''` + +### indexToUid() + +Get the uid of the specified page by its index. + +**Syntax** + +```typescript +indexToUid(index: number): string; +``` + +**Parameters** + +`index`: The index of the specified page. + +**Return Value** + +The uid of the page. + +**Code Snippet** + +```typescript +// Get the first page's uid +const firstPageUid = editViewer.indexToUid(0); +``` + +**Warning** + + Error Code | Error Message | API Return Value +--------|----------------------------------------------------------|------------------ + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | `''` + -80101 | *XXX(API)*: *XXX(ParameterName)* is out of range. | `''` + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. | `''` + -80304 | No document opened. | `''` + -80305 | There is no image in the current document. | `''` + +### uidToIndex() + +Get the index of the specified page by its uid. + +**Syntax** + +```typescript +uidToIndex(pageUid: string): number; +``` + +**Parameters** + +`pageUid`: The uid of the specified page. + +**Return Value** + +The index of the page. + +**Code Snippet** + +```typescript +const curPageUid = editViewer.getCurrentPageUid(); +editViewer.uidToIndex(curPageUid); +``` + +**Warning** + + Error Code | Error Message | API Return Value +--------|----------------------------------------------------------|------------------ + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | `-1` + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. | `-1` + -80105 | *XXX(API)*: The specified page(s) do not exist. | `-1` + -80304 | No document opened. | `-1` + -80305 | There is no image in the current document. | `-1` + +## Annotation Control + +### setAnnotationDrawingStyle() + +Set the default drawing style of annotations by annotation type. + +**Syntax** + +```typescript +setAnnotationDrawingStyle(config: AnnotationDrawingStyleConfig): boolean; +``` + +**Parameters** + +`config`: Specifies the default drawing style of each stamp type provided. See [`AnnotationDrawingStyleConfig`]({{ site.api }}interface/styleinterface/annotationdrawingstyleconfig.html) for details. + +**Return value** + +`true`: Successfully set the specified default drawing styles. + +`false`: Failed to set the specified default drawing styles. + +**Warning** + + | Error Code | Error Message | API return value | + | ---------- | -------------------------------------------- | ---------------- | + | -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | `false` | + | -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. | `false` | + +### selectAnnotations() + +Select the specified annotations on the current page. + +**Syntax** + +```typescript +selectAnnotations(annotationUids: string[]): boolean; +``` + +**Parameters** + +`annotationUids`: Specify the array of annotation uids to select. If set to `[]`, no annotation will be selected. + +**Return value** + +`true`: Selected the specified annotations. + +`false`: Failed to select the specified annotations. + + +**Warning** + + | Error Code | Error Message | API return value | + | ---------- | ------------------------------------------------------------------------- | ---------------- | + | -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | `false` | + | -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. | `false` | + | -80304 | No document opened. | `false` | + | -80305 | There is no image in the current document. | `false` | + | -80314 | *XXX(API)*: Not available in current toolMode. | `false` | + | -80317 | The specified annotation(s) is not on the current page or does not exist. | `false` | + | -80319 | ReadOnly annotation or noView annotation cannot be selected. | `false` | + | -80320 | Unknown annotation or incomplete annotation cannot be selected. | `false` | + | -80321 | Flattened annotation cannot be selected. | `false` | + +### getSelectedAnnotations() + +Get selected annotation(s). + +**Syntax** + +```typescript +getSelectedAnnotations(): Annotation[]; +``` + +**Return value** + +An array of selected `Annotation` object. + +**Code Snippet** + +```typescript +const selectAnnots = editViewer.getSelectAnnotations(); +``` + +**Warning** + + Error Code | Error Message | API return value + ---------- | ------------------------------------------------------------|--------- + -80304 | No document opened. | `[]` + -80305 | There is no image in the current document. | `[]` + +### getAnnotationDrawingStyle() + +Get the annotation drawing style. + +**Syntax** + +```typescript +getAnnotationDrawingStyle(): AnnotationDrawingStyleConfig; +``` + +**Return value** + +An [`AnnotationDrawingStyleConfig`](/api/interface/styleinterface/annotationdrawingstyleconfig.md) object. + + +## Display Control + +### displayMode + +Specify or return the display mode of the viewer. + +**Syntax** + +```typescript +displayMode: DisplayMode; +``` + +A `DisplayMode` can be one of two types. + +```typescript +type DisplayMode = "single" | "continuous"; +``` + +`single`: The pages in the viewer is displayed page by page. + +`continuous`: The pages in the viewer is displayed continuously. + +**Code Snippet** + +```typescript +editViewer.displayMode = "single"; +``` + +**Warning** + + Error Code | Error Message +--------|----------------------------------------------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. + -80103 | *XXX(API)*: The value for *XXX(ParameterName)* is not supported. + +**Remark** + +- Default `displayMode` is `continuous`. +- When `displayMode` is `continuous`, the default number of pages to scroll in parallel is 1 and which can be configure by [`setParallelScrollCount`](#setparallelscrollcount). + +### setParallelScrollCount() + +Specify the number of pages to scroll in parallel. + +**Syntax** + +```typescript +setParallelScrollCount(count: number): boolean; +``` +**Parameters** + +`count`: The number of pages to scroll in parallel. The maximum value is 20. + +**Return Value** + +`true`: Successfully. + +`false`: Failed. + +**Code Snippet** + +```typescript +// Set three pages to scroll in parallel +editViewer.setParallelScrollCount(3); +``` + +**Warning** + + Error Code | Error Message | API Return Value +--------|--------------------------------------------------------------|-------------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | `false` + -80101 | *XXX(API)*: *XXX(ParameterName)* is out of range. | `false` + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. | `false` + -80308 | EditViewer.setParallelScrollCount: Not available in current displayMode. | `false` + +**Remark** + +- The setting will be applied when [`displayMode`](#displaymode) is `continuous` mode. + +### fitMode + +Specify or return the fit mode of the viewer. + +**Syntax** + +```typescript +fitMode: FitMode; +``` + +A `FitMode` can be one of four types. + +```typescript +type FitMode = "width" | "height" | "window" | "actualSize"; +``` + +`width`: The page is displayed to fit the width. + +`height`: The page is displayed to fit the height. + +`window`: The page is displayed to fit the window. + +`actualSize`: The page is displayed at its actual size, equal to [`zoom`](#zoom) set to 1. + +**Code Snippet** + +```typescript +editViewer.fitMode = "width"; +``` + +**Warning** + + Error Code | Error Message +--------|----------------------------------------------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. + -80103 | *XXX(API)*: The value for *XXX(ParameterName)* is not supported. + +**Remark** + +- The default `fitMode` is `window`, which means fit window. +- Since the specified `fitMode` is calculated by zoom ratio, if the zoom ratio which set by `zoom` does not match any of `fitMode`, the page will be displayed in specified zoom ratio and `fitMode` will return `none`. + +### zoom + +Specify or return zoom ratio. + +**Syntax** + +```typescript +zoom: number; +``` + +**Code Snippet** + +```typescript +//Actual size +editViewer.zoom = 1; + +//Twice the actual size +editViewer.zoom = 2; + +//10% the actual size +editViewer.zoom = 0.1; +``` + +**Warning** + + Error Code | Error Message +--------|----------------------------------------------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. + -80306 | The value for zoom is larger than maxZoom value. + -80307 | The value for zoom is smaller than minZoom value. + +**Remark** + +- The interval of available values depends on `minZoom` and `maxZoom` which is set in [EditViewerConfig](#editviewerconfig) when create `EditViewer` object. +- 1 means actual size of the page and equals to `actualSize` in [`fitMode`](#fitmode). +- Return value will be rounded to four decimal places. + +### zoomOrigin + +Specify or return the zoom origin of the viewer. + +**Syntax** + +```typescript +zoomOrigin: ZoomOrigin; +``` + +**Code Snippet** + +```typescript +// Set the zoom origin to upper left +const newZoomOrigin = { + x: "start", + y: "start", +}; + +editViewer.zoomOrigin = newZoomOrigin; +``` + +**Warning** + + Error Code | Error Message +--------|----------------------------------------------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. + +**Remark** + +- The default zoomOrigin is center point of the viewer. + +**See Also** + +[`ZoomOrigin`]({{ site.api }}interface/zoomorigin.html) + +## Edit Operations + +### rotate() + +Rotate the specified pages. + +**Syntax** + +```typescript +rotate( + angle: number, + indices?: number[] +): boolean; +``` + +**Parameters** + +`angle`: Specify the angle. Only multiples of 90 degrees are supported. Positive value means clockwise rotation, negative value means counterclockwise rotation. + +`indices`: The array of the pages indices which will be rotated. If not set, the current page will be rotated. + +**Return Value** + +`true`: Successfully. + +`false`: Failed. + +**Code Snippet** + +```typescript +// Rotate the first and second pages 90 degrees clockwise. +editViewer.rotate(90, [0,1]); + +// Rotate current page 90 degrees counterclockwise. +editViewer.rotate(-90); +``` + +**Warning** + + Error Code | Error Message | API Return Value +--------|-------------------------------------------------------------------------|------------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | `false` + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. | `false` + -80103 | *XXX(API)*: The value for *XXX(ParameterName)* is not supported. | `false` + -80304 | No document opened. | `false` + -80305 | There is no image in the current document. | `false` + +### crop() + +Crop the specified page(s) with the specified rectangle. + +**Syntax** + +```typescript +crop( + rect: Rect, + indices?: number[] +): boolean; +``` +**Parameters** + +`rect`: Specify the rectangle. Please refer to [`Rect`]({{ site.api }}interface/rect.html). + +`indices`: Specify the indices of the pages to be cropped. If not set, it will crop based on [`cropMode`](#cropmode), which uses the current image if the mode is `current` and all the images if the mode is `all`. + +**Return Value** + +`true`: Successfully. + +`false`: Failed. + +**Code Snippet** + +```typescript +const rect = { + left: 100, + top: 100, + width: 200, + height: 200, +}; + +editViewer.crop(rect, [0]); // Crop the first page +``` + +**Warning** + + Error Code | Error Message | API Return Value +--------|------------------------------------------------------------|------------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | `false` + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. | `false` + -80304 | No document opened. | `false` + -80305 | There is no image in the current document. | `false` + -80309 | The specified rect exceeds the bounds of page index *X(IndexNum)*. | `false` + +**Remark** + +If one of the points of the rectangle is out of page range, crop operation does not take effect in this page and report warning. + + +### cropMode + +Get or set the current mode for cropping: crop the current image or all the images. + +**Syntax** + +```typescript +cropMode: CropMode; +``` + +It can be one of the two types. + +```typescript +type CropMode = "current" | "all"; +``` + +### getCropRect() + +Get the crop rectangular selection. + +**Syntax** + +```typescript +getCropRect(): Rect | null; +``` + +**Return Value** + +The rectangular selection. Please refer to [`Rect`]({{ site.api }}interface/rect.html). + +**Code Snippet** + +```typescript +editViewer.getCropRect(); +``` + +**Warning** + + Error Code | Error Message | API Return Value +--------|-----------------------------------------------------------|--------------------- +-80304 | No document opened. | `null` + +**Remark** + +- If there is no crop rectangular selection, returns `null`. + +### setCropRect() + +> *This method is only available when [`toolMode`](#toolmode) is `crop` mode.* + +Set a crop rectangular selection on the current page. + +**Syntax** + +```typescript +setCropRect(rect: Rect): boolean; +``` + +**Parameters** + +`rect`: Specify the rectangular selection. Please refer to [`Rect`]({{ site.api }}interface/rect.html). + +**Return Value** + +`true`: Successfully. + +`false`: Failed. + +**Code Snippet** + +```typescript +editViewer.toolMode = "crop"; // Set toolMode to "crop" + +const rect = { + left: 100, + top: 100, + width: 200, + height: 200, +}; + +editViewer.setCropRect(rect); +``` + +**Warning** + + Error Code | Error Message | API Return Value +--------|-----------------------------------------------------------|------------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | `false` + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. | `false` + -80304 | No document opened. | `false` + -80305 | There is no image in the current document. | `false` + -80309 | The specified rect exceeds the bounds of page index *X(IndexNum)*. | `false` + -80314 | *XXX(API)*: Not available in current toolMode. | `false` + +**Remark** + +- In the viewer, only one rectangular selection can exist on the page at a time, which means if there is a rectangular selection existed when a new selection is drawn, the old one will be clear automatically. +- When [`toolMode`](#toolmode) is set to `pan`, the drawn rectangular selection will be clear. + +### undo() + +> *This method takes effect only for [crop](#crop), [rotate](#rotate) operations.* + +Undo the last editing operation. + +**Syntax** + +```typescript +undo(): boolean; +``` + +**Return Value** + +`true`: Successfully. + +`false`: Failed. + +**Code Snippet** + +```typescript +editViewer.undo(); +``` + +**Warning** + + Error Code | Error Message | API Return Value +--------|-----------------------------------------------------|----------------- + -80304 | No document opened. | `false` + -80310 | No operations to undo. | `false` + +### redo() + +> *This method takes effect only for [crop](#crop), [rotate](#rotate) operations.* + +Redo the last undo operation. + +**Syntax** + +```typescript +redo(): boolean; +``` + +**Return Value** + +`true`: Successfully. + +`false`: Failed. + +**Code Snippet** + +```typescript +editViewer.redo(); +``` + +**Warning** + + Error Code | Error Message | API Return Value +--------|-----------------------------------------------------|----------------- + -80304 | No document opened. | `false` + -80311 | No operations to redo. | `false` + +### saveOperations() + +> *This method takes effect only for [crop](#crop), [rotate](#rotate) & filter(which is operated by using UI Element) operations.* + +Save the edit operations in pages to document. + +**Syntax** + +```typescript +saveOperations(): boolean; +``` + +**Return Value** + +`true`: Successfully. + +`false`: Failed. + +**Code Snippet** + +```typescript +editViewer.saveOperations(); +``` + +**Warning** + + Error Code | Error Message | API Return Value +--------|-----------------------------------------------------|----------------- + -80304 | No document opened. | `false` + +## Text Selection + +### getTextSelection() + +Get selected text's detailed info. + +**Syntax** + +```typescript +getTextSelection(): ITextSelectedInfo[]; +``` + +**Return values** + +Array of the `ITextSelectedInfo` object. Please refer to [`ITextSelectedInfo`](/api/interface/itextselectedinfo.md). + +## Search + +### searchNextText() + +Search the next matched result. + +**Syntax** + +```typescript +searchNextText(text: string, options?: SearchTextOptions): Promise; +``` + +**Parameters** + +* `text`: text to search +* `options`: Please refer to [`SearchTextOptions`](/api/interface/searchtextoptions.md) + +**Warnings** + + Error Code | Error Message +--------|----------------------------------------------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. + -80104 | *XXX(API)*: The specified document(s) do not exist. + -80304 | No document opened. + -80305 | There is no image in the current document. + -80322 | No results found. + +### searchPrevText() + +Search the previous matched result. + +**Syntax** + +```typescript +searchPrevText(text: string, options?: SearchTextOptions): Promise; +``` + +**Parameters** + +* `text`: text to search +* `options`: Please refer to [`SearchTextOptions`](/api/interface/searchtextoptions.md) + +**Warnings** + + Error Code | Error Message +--------|----------------------------------------------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. + -80104 | *XXX(API)*: The specified document(s) do not exist. + -80304 | No document opened. + -80305 | There is no image in the current document. + -80322 | No results found. + +### searchFullText() + +Search the full text to get all the matched results. + +**Syntax** + +```typescript +searchFullText(text: string, options?: SearchTextOptions): Promise; +``` + +**Parameters** + +* `text`: text to search +* `options`: Please refer to [`SearchTextOptions`](/api/interface/searchtextoptions.md) + +**Warnings** + + Error Code | Error Message +--------|----------------------------------------------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. + -80104 | *XXX(API)*: The specified document(s) do not exist. + -80304 | No document opened. + -80305 | There is no image in the current document. + -80322 | No results found. + +## Events + +### on() + +Bind a listener to the specified event. + +**Syntax** + +```typescript +on(eventName: EventName, listener:(event:EventObject)=>void): void; +``` + +**Parameters** + +`eventName`: Specify the event name. It can be [an integrated event name](#integrated-events) or a custom event name configured through [`UiConfig`-`events`]({{ site.api }}interface/uiconfig.html#events). + +`listener`: Specify the listener. + +**Code Snippet** + +```typescript +// Bind a listener to the integrated event resized. +const eventFunc = (e)=>{ + console.log(e); + console.log(e.oldWidth); + console.log(e.newWidth); +}; + +editViewer.on("resized", eventFunc); +``` + +**Warning** + + Error Code | Error Message +--------|----------------------------------------------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. + + +### off() + +Unbind event listener(s) from the specified event. + +**Syntax** + +```typescript +off(eventName: EventName, listener?:(event:EventObject)=>void): void; +``` + +**Parameters** + +`eventName`: Specify the event name. It can be [an integrated event name](#integrated-events) or a custom event name configured through [`UiConfig`-`events`]({{ site.api }}interface/uiconfig.html#events). + +`listener`: Specify the listener. If no listener is specified, unbind all event listeners from the specified event. + +**Code Snippet** + +```typescript +const eventFunc = (e)=>{ + console.log(e); + console.log(e.oldWidth); + console.log(e.newWidth); +}; + +editViewer.on("resized", eventFunc); + +// Unbind the specified event listener. +editViewer.off("resized", eventFunc); +``` + +**Warning** + + Error Code | Error Message +--------|----------------------------------------------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. + +### Integrated Events + +#### resized + +Triggered when the viewer is resized. + +**Callback** + +`ResizedEvent`: An EventObject. + +**Attributes** + +`oldWidth`: The old width of the viewer. + +`oldHeight`: The old height of the viewer. + +`newWidth`: The new width of the viewer. + +`newHeight`: The new height of the viewer. + +#### pageRendered + +Triggered when a page has been completely rendered. We only render the pages that are visible on the screen, so this event won't get fired for every page in the document at once. This event will get called when the user scrolls up and down the document, or when a page is zoomed or rotated, or anything else that makes it rerender. + +**Callback** + +`PageRenderedEvent`: An EventObject. + +**Attributes** + +`index`: The index of the rendered page. + +`pageUid`: The pageUid of the rendered page. + +#### currentIndexChanged + +Triggered when currentIndex is changed. + +**Callback** + +`CurrentindexChangedEvent`: An EventObject. + +**Attributes** + +`oldIndex`: The old current index. + +`newIndex`: The new current index. If there is no index in the viewer, return `-1`. + +#### currentPageChanged + +Triggered when current page is changed. + +**Callback** + +`CurrentPageChangedEvent`: An EventObject. + +**Attributes** + +`oldPageUid`: The uid of the page which is old current index. If the old page is removed, return `''`. + +`newPageUid`: The uid of the page which is new current index. If there is no index in the viewer, return `''`. + +#### displayModeChanged + +Triggered when the display mode is changed. + +**Callback** + +`DisplayModeChangedEvent`: An EventObject. + +**Attributes** + +`oldDisplayMode`: The old display mode. + +`newDisplayMode`: The new display mode. + +#### fitModeChanged + +Triggered when the fit mode has changed. + +**Callback** + +`FitModeChangedEvent`: An EventObject. + +**Attributes** + +`oldFitMode`: The old fit mode. + +`newFitmode`: The new fit mode. + +#### zoomChanged + +Triggered when the zoom ratio has been changed. + +**Callback** + +`ZoomChangedEvent`: An EventObject. + +**Attributes** + +`oldZoomRatio`: The old zoom ratio. + +`newZoomRatio`: The new zoom ratio. + +#### toolModeChanged + +Triggered when the tool mode has changed. + +**Callback** + +`ToolModeChangedEvent`: An EventObject. + +**Attributes** + +`oldToolMode`: The old tool mode. + +`newToolMode`: The new tool mode. + +#### cropRectDrawn + +Triggered when a rectangular selection is drawn. + +**Callback** + +`CropRectDrawnEvent`: An EventObject. + +**Attributes** + +`rect`: The drawn rectangle. + +#### cropRectDeleted + +Triggered when the rectangular selection is deleted. + +**Callback** + +`CropRectDeletedEvent`: An EventObject. + +**Attributes** + +`rect`: The deleted rectangle. + +#### cropRectModified + +Triggered when the crop rectangular selection is modified. + +**Callback** + +`CropRectModifiedEvent`: An EventObject. + +**Attributes** + +`oldRect`: The old rectangle. + +`newRect`: The new rectangle. + +#### annotationDrawingStyleChanged + +Triggered when the annotation drawing style is changed. It will return the old drawing style and the new drawing style of the selected annotation. See also [`AnnotationDrawingStyleConfig`](/api/interface/styleinterface/annotationdrawingstyleconfig.md). + +#### selectedAnnotationsChanged + +Triggered when selected annotation(s) is changed. + +**Callback** + +`SelectedAnnotationsChanged`: An EventObject. + +**Attributes** + +`oldAnnotationUids`: The array of old selected annotations uids. + +`newAnnotationUids`: The array of new selected annotations uids. + +#### visibilityChanged + +Triggered when the viewer's visibility is changed. It will return an `isVisible` boolean value. + +#### textSelected + +Triggered when text is selected. It will return an array of [`ITextSelectedInfo`](/api/interface/itextselectedinfo.md). + +#### textUnselected + +Triggered when text is unselected. + +#### textSearchTriggered + +Triggered when text search is performed. It will return an array of [`ITextSearchedInfo`](/api/interface/itextsearchedinfo.md). + + + +#### undoRedoStateChanged + +Triggered when the viewer's undo and redo state is changed. It will return an [`IUndoRedoStateChangedEvent`](/api/interface/iundoredostatechangedevent.md) object. + +#### paginationChanged + +Triggered when the viewer's current page number or the page count is changed. It will return an [`IPaginationChangedEvent`](/api/interface/ipaginationchangedevent.md) object. + +#### pointerdown + +Triggered when a pointer becomes active buttons state. It will return an [`IPointerEvent`](/api/interface/ipointerevent.md) object. + +#### pointermove + +Triggered when a pointer changes coordinates. It will return an [`IPointerEvent`](/api/interface/ipointerevent.md) object. + +#### pointerup + +Triggered when a pointer is no longer active buttons state. It will return an [`IPointerEvent`](/api/interface/ipointerevent.md) object. + +#### pageover + +Triggered when a pointer is moved into a page's hit test boundaries. It will return an [`IPointerEvent`](/api/interface/ipointerevent.md) object. + +#### pageout + +Triggered when a pointer is moved out of the hit test boundaries of a page. It will return an [`IPointerEvent`](/api/interface/ipointerevent.md) object. + +#### scroll + +Triggered when the viewer is scrolled. It will return the native event object. + +#### Mouse Events + +##### click + +Triggered when click in the viewer's viewing area. On mobile device, triggered when tap in the viewer's viewing area. + +##### dblclick + +Triggered when double click in the viewer's viewing area. + +##### rightclick + +Triggered when right click in the viewer's viewing area. On mobile device, triggered when long-tap in the viewer's viewing area. + + +**Callback for mouse events** + + `IPointerEvent`: An EventObject. + +**Attributes** + +`index`: The page index. + +`pageUid`: The page uid. + +`imageX`: The relative x-coordinate of the click pointer on the image. + +`imageY`: The relative y-coordinate of the click pointer on the image. + +`canvasX`: The relative x-coordinate of the click pointer on the canvas. + +`canvasY`: The relative x-coordinate of the click pointer on the canvas. + +`nativeEvent`: [`PointerEvent`](https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent) diff --git a/_v3.2.1/api/errorlist.md b/_v3.2.1/api/errorlist.md new file mode 100644 index 0000000..a31e803 --- /dev/null +++ b/_v3.2.1/api/errorlist.md @@ -0,0 +1,112 @@ +--- +layout: default-layout +needAutoGenerateSidebar: true +needGenerateH3Content: true +noTitleIndex: true +title: Dynamsoft Document Viewer API Reference - Error List +keywords: Documentation, Dynamsoft Document Viewer, API Reference, Error List +breadcrumbText: API Reference +description: Dynamsoft Document Viewer Documentation API Reference Error List Page +permalink: /api/errorlist.html +--- + +# Error List + +## License Related Errors + + Error Code | Error Message + ---------- | ------------------------------------------------------ + -80001 | License string is invalid. + -80002 | *XXX(LicenseModuleName)* module license has expired. + -80003 | *XXX(LicenseModuleName)* module license is missing. + -80004 | *XXX(LicenseModuleName)* module license version does not match. + -80005 | Domain does not match the domain bound to the *XXX(LicenseModuleName)* module license. + +## Initialize Related Errors + + Error Code | Error Message + ---------- | ------------------------------------------------ + -80050 | DDV.Core.init() has not been set up yet. + -80051 | DDV.Core.init() has not been completed. + -80052 | *XXX(API)*: Resource is not found from the specified engineResourcePath. + -80053 | *XXX(API)*: The resource version at the specified engineResourcePath does not match this version of Dynamsoft Document Viewer. + +## Common Errors + + Error Code | Error Message + ---------- | ------------------------------------------------------------ + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. + -80101 | *XXX(API)*: *XXX(ParameterName)* is out of range. + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. + -80103 | *XXX(API)*: The value for *XXX(ParameterName)* is not supported. + -80104 | *XXX(API)*: The specified document(s) do not exist. + -80105 | *XXX(API)*: The specified page(s) do not exist. + -80106 | *XXX(API)*: The specified annotation does not exist. + -80108 | *XXX(API)*: The document has been destroyed. + -80109 | *XXX(API)*: The page has been destroyed. + + +## Document Related Errors + + Error Code | Error Message + ---------- | --------------------------------------------- + -80200 | File type is not supported. + -80201 | docUid does not allow duplicate. + -80202 | Failed to read the PDF file because it's encrypted and the correct password is not provided. + -80203 | Failed to read some annotations because they are not supported by Dynamsoft Document Viewer so far. + -80204 | PDFs containing XFA (XML Forms Architecture) forms are not supported. + -80205 | The pageData has been destroyed. + -80206 | The DocTextSearcher has been destroyed. + +## Viewer Releated Errors + + Error Code | Error Message + ---------- | ------------------------------------------------------------ + -80301 | The specified container does not exist. + -80302 | minZoom value cannot be larger than maxZoom value. + -80304 | No document opened. + -80305 | There is no image in the current document. + -80306 | The value for zoom is larger than maxZoom value. + -80307 | The value for zoom is smaller than minZoom value. + -80308 | EditViewer.setParallelScrollCount: Not available in current displayMode. + -80309 | The specified rect exceeds the bounds of page index *X(IndexNum)*. + -80310 | No operations to undo. + -80311 | No operations to redo. + -80312 | The specified quad exceeds the bounds of the current page. + -80313 | The element *XXX(ElementName)* is not supported in *XXX(ClassName)* class. + -80314 | *XXX(API)*: Not available in current toolMode. + -80315 | DocumentDetect needs to be configured by Dynamsoft.DDV.setProcessingHandler to enable the document detection feature. + -80316 | ImageFilter needs to be configured by Dynamsoft.DDV.setProcessingHandler to enable the image filter feature. + -80317 | The specified annotation(s) is not on the current page or does not exist. + -80318 | The document contains unsupported fonts, which may result in font loss after saving. + -80319 | ReadOnly annotation or noView annotation cannot be selected. + -80320 | Unknown annotation or incomplete annotation cannot be selected. + -80321 | Flattened annotation cannot be selected. + -80322 | No results found. + +## Camera Releated Errors + + Error Code | Error Message + ---------- | ------------------------------------------- + -80400 | The specified camera does not exist. + -80401 | The specified camera is occupied. + -80402 | No video stream is played. + -80403 | Not HTTPS, failed to play the video stream. + -80404 | The camera does not support a flashlight. + -80405 | No camera available. + -80406 | The selected camera is denied by browser. + -80407 | No bound container. + + +## Wasm Error + + Error Code | Error Message +------------|---------------- + -81000 | *WASM Error* + +## External Error + + Error Code | Error Message +------------|---------------- + -81100 | *External Error* + \ No newline at end of file diff --git a/_v3.2.1/api/interface/annotationinterface/flags.md b/_v3.2.1/api/interface/annotationinterface/flags.md new file mode 100644 index 0000000..7658e31 --- /dev/null +++ b/_v3.2.1/api/interface/annotationinterface/flags.md @@ -0,0 +1,101 @@ +--- +layout: default-layout +needAutoGenerateSidebar: true +needGenerateH3Content: true +noTitleIndex: true +title: Dynamsoft Document Viewer API Reference - Interface Flags +keywords: Documentation, Dynamsoft Document Viewer, API Reference, Interface Flags +breadcrumbText: Interface Flags +description: Dynamsoft Document Viewer Documentation API Reference Interface Flags Page +permalink: /api/interface/annotationinterface/flags.html +--- + +# Flags + +## Syntax + +```typescript +interface Flags { + print?: boolean; + noMove?: boolean; + noView?: boolean; + noResize?: boolean; + noRotate?: boolean; + readOnly?: boolean; +} +``` + +## Attributes + +### print + + +Indicates whether the annotation is printable. Default value: `true`. Only printable annotations will be included when the page is printed. + +### noMove + +Prevents users from moving annotations. + +Default value: `false` + +Note: + +For the following annotations, it is not effective and the default value is `true`. + +* [`Highlight`](/api/class/annotation/highlight.md) +* [`Strikeout`](/api/class/annotation/strikeout.md) +* [`Underline`](/api/class/annotation/underline.md) + +### noView + +Not to display the annotation or allow a user to interact with the annotation. + +Default value: `false` + +### noResize + +Prevents users from resizing annotations. + +Default value: `false`. + +Note: + +For [`TextTypeWriter`](/api/class/annotation/texttypewriter.md), it is not effective and the default value is `true`. + +### noRotate + +Prevents users from rotating annotations. + +Default value: `false` + +Note: + +For the following annotations, it is not effective and the default value is `true`. + +* [`TextTypeWriter`](/api/class/annotation/texttypewriter.md) +* [`Polyline`](/api/class/annotation/polyline.md) +* [`Polygon`](/api/class/annotation/polygon.md) +* [`Line`](/api/class/annotation/line.md) +* [`Highlight`](/api/class/annotation/highlight.md) +* [`Strikeout`](/api/class/annotation/strikeout.md) +* [`Underline`](/api/class/annotation/underline.md) + + +### readOnly + +Not to allow a user to interact with the annotation, default value: `false`. + +## Related + +- [`RectAnnotationOptions`]({{ site.api }}interface/annotationinterface/rectannotationoptions.html) +- [`EllipseAnnotationOptions`]({{ site.api }}interface/annotationinterface/ellipseannotationoptions.html) +- [`PolygonAnnotationOptions`]({{ site.api }}interface/annotationinterface/polygonannotationoptions.html) +- [`PolylineAnnotationOptions`]({{ site.api }}interface/annotationinterface/polylineannotationoptions.html) +- [`LineAnnotationOptions`]({{ site.api }}interface/annotationinterface/lineannotationoptions.html) +- [`InkAnnotationOptions`]({{ site.api }}interface/annotationinterface/inkannotationoptions.html) +- [`TextBoxAnnotationOptions`]({{ site.api }}interface/annotationinterface/textboxannotationoptions.html) +- [`TextTypewriterAnnotationOptions`]({{ site.api }}interface/annotationinterface/texttypewriterannotationoptions.html) +- [`StampAnnotationOptions`]({{ site.api }}interface/annotationinterface/stampannotationoptions.html) +- [`HighlightAnnotationOptions`](/api/interface/annotationinterface/highlightannotationoptions.md) +- [`UnderlineAnnotationOptions`](/api/interface/annotationinterface/underlineannotationoptions.md) +- [`StrikeoutAnnotationOptions`](/api/interface/annotationinterface/strikeoutannotationoptions.md) \ No newline at end of file diff --git a/_v3.2.1/api/interface/annotationinterface/index.md b/_v3.2.1/api/interface/annotationinterface/index.md new file mode 100644 index 0000000..b17815f --- /dev/null +++ b/_v3.2.1/api/interface/annotationinterface/index.md @@ -0,0 +1,53 @@ +--- +layout: default-layout +needAutoGenerateSidebar: true +needGenerateH3Content: true +noTitleIndex: true +title: Dynamsoft Document Viewer API Reference - Annotation Interfaces +keywords: Documentation, Dynamsoft Document Viewer, API Reference, Annotation Interfaces +breadcrumbText: Annotation Interfaces +description: Dynamsoft Document Viewer Documentation API Reference Annotation Interfaces Page +permalink: /api/interface/annotationinterface/index.html +--- + +# Annotation Interfaces + +## Options + +- [`RectAnnotationOptions`](/api/interface/annotationinterface/rectannotationoptions.md) +- [`EllipseAnnotationOptions`](/api/interface/annotationinterface/ellipseannotationoptions.md) +- [`PolygonAnnotationOptions`](/api/interface/annotationinterface/polygonannotationoptions.md) +- [`PolylineAnnotationOptions`](/api/interface/annotationinterface/polylineannotationoptions.md) +- [`LineAnnotationOptions`](/api/interface/annotationinterface/lineannotationoptions.md) +- [`InkAnnotationOptions`](/api/interface/annotationinterface/inkannotationoptions.md) +- [`TextBoxAnnotationOptions`](/api/interface/annotationinterface/textboxannotationoptions.md) +- [`TextTypewriterAnnotationOptions`](/api/interface/annotationinterface/texttypewriterannotationoptions.md) +- [`StampAnnotationOptions`](/api/interface/annotationinterface/stampannotationoptions.md) +- [`HighlightAnnotationOptions`](/api/interface/annotationinterface/highlightannotationoptions.md) +- [`UnderlineAnnotationOptions`](/api/interface/annotationinterface/underlineannotationoptions.md) +- [`StrikeoutAnnotationOptions`](/api/interface/annotationinterface/strikeoutannotationoptions.md) + +## Styles + +- [`RectangleStyle`](/api/interface/annotationinterface/rectanglestyle.md) +- [`EllipseStyle`](/api/interface/annotationinterface/ellipsestyle.md) +- [`PolygonStyle`](/api/interface/annotationinterface/polygonstyle.md) +- [`PolylineStyle`](/api/interface/annotationinterface/polylinestyle.md) +- [`LineStyle`](/api/interface/annotationinterface/linestyle.md) +- [`InkStyle`](/api/interface/annotationinterface/inkstyle.md) +- [`TextBoxStyle`](/api/interface/annotationinterface/textboxstyle.md) +- [`TextTypewriterStyle`](/api/interface/annotationinterface/texttypewriterstyle.md) +- [`StampStyle`](/api/interface/annotationinterface/stampstyle.md) +- [`HighlightStyle`](/api/interface/annotationinterface/highlightstyle.md) +- [`UnderlineStyle`](/api/interface/annotationinterface/underlinestyle.md) +- [`StrikeoutStyle`](/api/interface/annotationinterface/strikeoutstyle.md) + +## Other + +- [`Flags`](/api/interface/annotationinterface/flags.md) +- [`Point`](/api/interface/annotationinterface/point.md) +- [`TextContent`](/api/interface/annotationinterface/textcontent.md) +- [`ToolbarConfig`](/api/interface/annotationinterface/toolbarconfig.md) +- [`PaletteConfig`](/api/interface/annotationinterface/paletteconfig.md) +- [`AnnotationToolbarButton`](/api/interface/annotationinterface/annotationtoolbarbutton.md) + diff --git a/_v3.2.1/api/interface/annotationinterface/paletteconfig.md b/_v3.2.1/api/interface/annotationinterface/paletteconfig.md new file mode 100644 index 0000000..203f94d --- /dev/null +++ b/_v3.2.1/api/interface/annotationinterface/paletteconfig.md @@ -0,0 +1,110 @@ +--- +layout: default-layout +needAutoGenerateSidebar: true +needGenerateH3Content: true +noTitleIndex: true +title: Dynamsoft Document Viewer API Reference - Interface PaletteConfig +keywords: Documentation, Dynamsoft Document Viewer, API Reference, Interface PaletteConfig +breadcrumbText: Interface PaletteConfig +description: Dynamsoft Document Viewer Documentation API Reference Interface PaletteConfig Page +permalink: /api/interface/annotationinterface/paletteconfig.html +--- + +# PaletteConfig + +## Syntax + +```typescript +interface PaletteConfig { + enabled?: boolean; + id?: string; + className?: string; + style?: cssstyleDeclaration; + colorList?: string[]; + labels?: { + text? : string; + stroke? : string; + fill?: string; + opacity?: string; + style?: string; + standardBusiness?: string; + } + } +``` + +## Attributes + +### enabled + +Whether or not the toolbar is enabled. + +Default value: `true` + +### id + +The id of Dom Element. If it is not specified, a random string will be generated. + +### className + +The className of CSS. + +### style + +The style which will cover CSS. + +### colorList + +The color list in palette. Supported string value: +- Named color, for example, `red`, `green`, etc. +- HEX(`#RRGGBB`), for example, `#ff0000`, `#008000`, etc. +- RGB(`rgb(red, green, blue)`), for example, `rgb(255, 0, 0)`, `rgb(0, 128, 0)`, etc. +- HSL(`hsl(Hue, Saturation, Lightness)`), for example, `hsl(0, 100%, 50%)`, `hsl(120, 100%, 25%)` ,etc. + +Default value: `["#F01314", "#FD7C10", "#FFEE5F", "#07C37F", "#0E68F5", "#9D3BFE", "#000000","#FF9494", "#87440C", "#B7A514", "#046743", "#50C9FF", "#EBA3ED", "#FFFFFF","#CECECE"]` + +![ColorList](/assets/imgs/colorlist.png) + + +**Example** + +```typescript +colorList: ["red", "green", "#0000ff", "#ffff00" , "rgb(0, 0, 0)", "rgb(128, 128, 128)", "hsl(0, 0%, 100%)", "hsl(350, 100%, 88%)"], +``` + +**Remarks** + +- The palette's UI defaults to presenting 27 color circles for display. Consequently, only the first 27 values within the `colorList` array can be utilized and will appear in the UI in a sequential manner. The remaining values in the array will be disregarded. +- If the number of values in the `colorList` array are less than 27, after applying the values configured in the array, the remaining color circles will be replaced by custom color circles. +- Custom color circles can be set to a specified color by clicking on the circle via the user interface. Similarly, for color circles, the color can be modified by double-clicking on them through the user interface. + +### displayText + +The display text in palette. + +#### text + +Default value: `Text` + +#### stroke + +Default value: `Stroke` + +#### fill + +Default value: `Fill` + +#### opacity + +Default value: `Opacity` + +#### style + +Default value: `Style` + +#### standardBusiness + +Default value: `StandardBusiness` + +## Related + +- [`EditViewerConstructorOptions`]({{ site.api }}interface/editviewerconstructoroptions.html) diff --git a/_v3.2.1/api/interface/annotationinterface/toolbarconfig.md b/_v3.2.1/api/interface/annotationinterface/toolbarconfig.md new file mode 100644 index 0000000..788dbf3 --- /dev/null +++ b/_v3.2.1/api/interface/annotationinterface/toolbarconfig.md @@ -0,0 +1,78 @@ +--- +layout: default-layout +needAutoGenerateSidebar: true +needGenerateH3Content: true +noTitleIndex: true +title: Dynamsoft Document Viewer API Reference - Interface ToolbarConfig +keywords: Documentation, Dynamsoft Document Viewer, API Reference, Interface ToolbarConfig +breadcrumbText: Interface ToolbarConfig +description: Dynamsoft Document Viewer Documentation API Reference Interface ToolbarConfig Page +permalink: /api/interface/annotationinterface/toolbarconfig.html +--- + +# ToolbarConfig + +## Syntax + +```typescript +interface ToolbarConfig { + enabled?: boolean; + id?: string; + className?: string; // the className of CSS + style?: CssStyleDeclaration; // the style of the toolbar + paletteButton?: AnnotationToolbarButton; + deleteButton?: AnnotationToolbarButton; + copyButton?: AnnotationToolbarButton; + highlightButton?: AnnotationToolbarButton; + underlineButton?: AnnotationToolbarButton; + strikeoutButton?: AnnotationToolbarButton; +} +``` + +## Attributes + +### enabled + +Whether or not the toolbar is enabled. + +Default value: `true` + +### id + +The id of Dom Element. If it is not specified, a random string will be generated. + +### className + +The className of CSS. + +### style + +The style which will cover CSS. + +### paletteButton + +The configuration of palette button in the toolbar. Please refer to [`AnnotationToolbarButton`]({{ site.api }}interface/annotationinterface/annotationtoolbarbutton.html). + +### deleteButton + +The configuration of delete button in the toolbar. Please refer to [`AnnotationToolbarButton`]({{ site.api }}interface/annotationinterface/annotationtoolbarbutton.html). + +### copyButton + +The configuration of copy button in the toolbar. Please refer to [`AnnotationToolbarButton`]({{ site.api }}interface/annotationinterface/annotationtoolbarbutton.html). + +### highlightButton + +The configuration of highlight button in the toolbar. Please refer to [`AnnotationToolbarButton`]({{ site.api }}interface/annotationinterface/annotationtoolbarbutton.html). + +### underlineButton + +The configuration of underline button in the toolbar. Please refer to [`AnnotationToolbarButton`]({{ site.api }}interface/annotationinterface/annotationtoolbarbutton.html). + +### strikeoutButton + +The configuration of strikeout button in the toolbar. Please refer to [`AnnotationToolbarButton`]({{ site.api }}interface/annotationinterface/annotationtoolbarbutton.html). + +## Related + +- [`EditViewerConstructorOptions`]({{ site.api }}interface/editviewerconstructoroptions.html) \ No newline at end of file diff --git a/_v3.2.1/api/interface/infoobject.md b/_v3.2.1/api/interface/infoobject.md new file mode 100644 index 0000000..40d11ad --- /dev/null +++ b/_v3.2.1/api/interface/infoobject.md @@ -0,0 +1,97 @@ +--- +layout: default-layout +needAutoGenerateSidebar: true +needGenerateH3Content: true +noTitleIndex: true +title: Dynamsoft Document Viewer API Reference - Interface InfoOjbect +keywords: Documentation, Dynamsoft Document Viewer, API Reference, Interface InfoObject +breadcrumbText: Interface InfoObject +description: Dynamsoft Document Viewer Documentation API Reference Interface InfoObject Page +permalink: /api/interface/infoobject.html +--- + +# InfoObject + +```typescript +interface InitInfo {} + +interface LoadWasmInfo {} + +interface LoadSourceInfo { + docUid: string; + current: number; + total: number; +} + +interface SaveSourceInfo { + docUid: string; + pageUids: []; + current: number; + total: number; +} + +interface FilterInfo { + pageUid: string; + filterType: string; +} + +interface PerspectiveInfo { + pageUid: string; + perspectiveQuad: Quad; +} + +interface InfoDetailsMap { + init: InitInfo; + loadSource: LoadSourceInfo; + save: SaveSourceInfo; + filter: FilterInfo; + perspective: PerspectiveInfo; + loadWasm: LoadWasmInfo; +} + +type InfoStatus = + | "Pending" + | "InProgress" + | "Completed" + | "Failed" + +interface InfoObject { + id: number; + type: K; + status: InfoStatus; + timestamp: number; + details?: InfoDetailsMap[K]; +} +``` + +## Attributes + +### id + +Numeric event identifier. + +### type + +Indicates the task type of the event. Must be one of the following events, in one of its possible statuses: + +| Event \ Status | `Pending` | `InProgress` | `Completed` | `Failed` | +| -------------- | --------- | ------------ | ----------- | -------- | +| `init` | ✓ | | ✓ | ✓ | +| `loadSource` | ✓ | ✓ | ✓ | ✓ | +| `save` | ✓ | ✓ | ✓ | ✓ | +| `filter` | ✓ | | ✓ | ✓ | +| `perspective` | ✓ | | ✓ | ✓ | +| `loadWasm` | ✓ | | ✓ | ✓ | + +### status + +Indicates the status of the task. Can only be one of the following: + +- `Pending` +- `InProgress` +- `Completed` +- `Failed` + +### details + +Contains additional event type-specific info. \ No newline at end of file diff --git a/_v3.2.1/api/interface/styleinterface/annotationdrawingstyleconfig.md b/_v3.2.1/api/interface/styleinterface/annotationdrawingstyleconfig.md new file mode 100644 index 0000000..db4f3e5 --- /dev/null +++ b/_v3.2.1/api/interface/styleinterface/annotationdrawingstyleconfig.md @@ -0,0 +1,76 @@ +--- +layout: default-layout +needAutoGenerateSidebar: true +needGenerateH3Content: true +noTitleIndex: true +title: Dynamsoft Document Viewer API Reference - Interface AnnotationDrawingStyleConfig +keywords: Documentation, Dynamsoft Document Viewer, API Reference, Interface AnnotationDrawingStyleConfig +breadcrumbText: Interface AnnotationDrawingStyleConfig +description: Dynamsoft Document Viewer Documentation API Reference Interface AnnotationDrawingStyleConfig Page +permalink: /api/interface/styleinterface/annotationdrawingstyleconfig.html +--- + +# Interface + +```typescript +interface AnnotationDrawingStyleConfig { + rectangle?: RectangleStyle; + ellipse?: EllipseStyle; + polygon?: PolygonStyle; + polyline?: PolylineStyle; + line?: LineStyle; + ink?: InkStyle; + textBox?: TextBoxStyle; + textTypewriter?: TextTypewriterStyle; + stamp?: StampStyle; + highlight?: HighlightStyle; + underline?: UnderlineStyle; + strikeout?: StrikeoutStyle; +} +``` + +## Attributes + +### rectangle + +The default drawing style of rectangle annotation - see [`RectangleStyle`]({{ site.api }}interface/annotationinterface/rectanglestyle.html) for more details. If not set, this uses the default values of `RectangleStyle`. + +### ellipse + +The default drawing style of ellipse annotation - see [`EllipseStyle`]({{ site.api }}interface/annotationinterface/ellipsestyle.html) for more details. If not set, this uses the default values of `EllipseStyle`. + +### polygon + +The default drawing style of the polygon annotation - see [`PolygonStyle`]({{ site.api }}interface/annotationinterface/polygonstyle.html) for more details. If not set, this uses the default values of `PolygonStyle`. + +### polyline + +The default drawing style of the polyline annotation - see [`PolylineStyle`]({{ site.api }}interface/annotationinterface/polylinestyle.html) for more details. If not set, this uses the default values of `PolylineStyle`. + +### line + +The default drawing style of the line annotation - see [`LineStyle`]({{ site.api }}interface/annotationinterface/linestyle.html) for more details. If not set, this uses the default values of `LineStyle`. + +### textBox + +The default drawing style of the textbox annotation - see [`TextBoxStyle`]({{ site.api }}interface/annotationinterface/textboxstyle.html) for more details. If not set, this uses the default values of `TextBoxStyle`. + +### textTypewriter + +The default drawing style of the text typewriter annotation - see [`TextTypewriterStyle`]({{ site.api }}interface/annotationinterface/texttypewriterstyle.html) for more details. If not set, this uses the default values of `TextTypewriterStyle`. + +### stamp + +The default drawing style of the stamp annotation - see [`StampStyle`]({{ site.api }}interface/annotationinterface/stampstyle.html) for more details. If not set, this uses the default values of `StampStyle`. + +### highlight + +The default drawing style of the highlight annotation - see [`HighlightStyle`](/api/interface/annotationinterface/highlightstyle.md) for more details. If not set, this uses the default values of `HighlightStyle`. + +### underline + +The default drawing style of the underline annotation - see [`UnderlineStyle`](/api/interface/annotationinterface/underlinestyle.md) for more details. If not set, this uses the default values of `UnderlineStyle`. + +### strikeout + +The default drawing style of the strikeout annotation - see [`StrikeoutStyle`](/api/interface/annotationinterface/strikeoutstyle.md) for more details. If not set, this uses the default values of `StrikeoutStyle`. diff --git a/_v3.2.1/ui/default_elements.md b/_v3.2.1/ui/default_elements.md new file mode 100644 index 0000000..5427521 --- /dev/null +++ b/_v3.2.1/ui/default_elements.md @@ -0,0 +1,158 @@ +--- +layout: default-layout +needAutoGenerateSidebar: true +needGenerateH3Content: true +noTitleIndex: true +title: Dynamsoft Document Viewer User Interface - Built-in Elements +keywords: Documentation, Dynamsoft Document Viewer, User Interface, Built-in Elements +breadcrumbText: Built-in Elements +description: Dynamsoft Document Viewer Documentation User Interface Built-in Elements part +permalink: /ui/default_elements.html +--- + + +# Built-in Elements + +DDV provides many built-in elements which have their own designed icons and bind to specific event to call the according APIs, have state interaction with viewer as well as between elements. + +Specific Elements can only be applied to specific viewers. For example, `Dynamsoft.DDV.Elements.Zoom` can only be applied in `EditViewer`, and `Dynamsoft.DDV.Elements.Capture` can only be applied in `CaptureViewer`. + +The following are lists of built-in elements as well as their default icons that are currently available for different viewer classes. + +
        + +- [Edit viewer](#edit-viewer) +- [Capture viewer](#capture-viewer) +- [Perspective viewer](#perspective-viewer) +- [Browse viewer](#browse-viewer) +- [Common](#common) + +
        + +| Supported Elements | className of its default icon | More descriptions +|------------------------------------|-------------------------------------------------------------|------------------- +| Dynamsoft.DDV.Elements.Pagination | ddv-first-page
        ddv-prev-page
        ddv-next-page
        ddv-last-page | +| Dynamsoft.DDV.Elements.RotateLeft | ddv-rotate-left | +| Dynamsoft.DDV.Elements.RotateRight | ddv-rotate-right | +| Dynamsoft.DDV.Elements.Delete | ddv-delete-current | Composite element contains DeleteCurrent and DeleteAll. +| Dynamsoft.DDV.Elements.DeleteCurrent | ddv-delete-current | +| Dynamsoft.DDV.Elements.DeleteAll | ddv-delete-all | +| Dynamsoft.DDV.Elements.Zoom | N/A | Composite element contains ZoomIn and ZoomOut. +| Dynamsoft.DDV.Elements.ZoomIn | ddv-zoom-in | +| Dynamsoft.DDV.Elements.ZoomOut | ddv-zoom-out | +| Dynamsoft.DDV.Elements.ZoomByPercentage | N/A | +| Dynamsoft.DDV.Elements.ThumbnailSwitch | ddv-thumbnail-switch | Control the thumbnail to show or not. +| Dynamsoft.DDV.Elements.FitMode | N/A | Composite element contains FitWindow, FitHeight, FitWindow and ActualSize. +| Dynamsoft.DDV.Elements.DisplayMode | N/A | Composite element contains SinglePage and ContinuousPage. +| Dynamsoft.DDV.Elements.Crop | N/A | +| Dynamsoft.DDV.Elements.Filter | ddv-filter | +| Dynamsoft.DDV.Elements.Load | ddv-load-image | Load file from local. If there is no document is opend when you click Load button, a new document (default name: doc-*timestamp*) will be created and opened automatically. +| Dynamsoft.DDV.Elements.Undo | ddv-undo-page | +| Dynamsoft.DDV.Elements.Redo | ddv-redo-page | +| Dynamsoft.DDV.Elements.Pan | ddv-pan-mode | +| Dynamsoft.DDV.Elements.Print | ddv-print-page | +| Dynamsoft.DDV.Elements.FitWidth | ddv-fit-width | +| Dynamsoft.DDV.Elements.FitHeight | ddv-fit-height | +| Dynamsoft.DDV.Elements.FitWindow | ddv-fit-window | +| Dynamsoft.DDV.Elements.ActualSize | ddv-fit-actual | +| Dynamsoft.DDV.Elements.SinglePage | ddv-single-mode | +| Dynamsoft.DDV.Elements.ContinuousPage | ddv-continuous-mode | +| Dynamsoft.DDV.Elements.Download | ddv-button-download | Download pages in pdf format to local. | +| Dynamsoft.DDV.Elements.TextSelectionMode | ddv-text-selection-mode | | +| Dynamsoft.DDV.Elements.TextSearchPanelSwitch | ddv-search-switch | | +| Dynamsoft.DDV.Elements.TextSearchPanel | N/A | | + +|Annotation-related Elements | className of its default icon | +| ----------------------------------------------- | ----------------------------- | +| Dynamsoft.DDV.Elements.AnnotationSet | ddv-annotation-mode | +| Dynamsoft.DDV.Elements.RectAnnotation | ddv-rect | +| Dynamsoft.DDV.Elements.EllipseAnnotation | ddv-ellipse | +| Dynamsoft.DDV.Elements.PolygonAnnotation | ddv-polygon | +| Dynamsoft.DDV.Elements.PolylineAnnotation | ddv-polyline | +| Dynamsoft.DDV.Elements.LineAnnotation | ddv-line | +| Dynamsoft.DDV.Elements.InkAnnotation | ddv-ink | +| Dynamsoft.DDV.Elements.TextBoxAnnotation | ddv-text-box | +| Dynamsoft.DDV.Elements.TextTypewriterAnnotation | ddv-typewriter | +| Dynamsoft.DDV.Elements.StampIconAnnotation | ddv-stamp-icon | +| Dynamsoft.DDV.Elements.StampImageAnnotation | ddv-stamp-image | +| Dynamsoft.DDV.Elements.HighlightAnnotation | ddv-highlight-mode | +| Dynamsoft.DDV.Elements.UnderlineAnnotation | ddv-underline-mode | +| Dynamsoft.DDV.Elements.StrikeoutAnnotation | ddv-strikeout-mode | +| Dynamsoft.DDV.Elements.SelectAnnotation | ddv-annot-select | +| Dynamsoft.DDV.Elements.EraseAnnotation | ddv-annot-eraser | +| Dynamsoft.DDV.Elements.BringForward | ddv-bring-forward | +| Dynamsoft.DDV.Elements.BringToFront | ddv-bring-to-front | +| Dynamsoft.DDV.Elements.SendBackward | ddv-send-backward | +| Dynamsoft.DDV.Elements.SendToBack | ddv-send-to-back | + +
        + +
        + +| Supported Elements | className of default icon | More descriptions +|--------------------------------|---------------------------|-------------------- +| Dynamsoft.DDV.Elements.Capture | ddv-capture-image | If there is no document opened when you click Capture button, a new document (default name: doc-*timestamp*) will be created and opened automatically. +| Dynamsoft.DDV.Elements.Flashlight | ddv-camera-flashlight | +| Dynamsoft.DDV.Elements.CameraConvert | ddv-camera-convert | +| Dynamsoft.DDV.Elements.CameraResolution | ddv-resolution | +| Dynamsoft.DDV.Elements.AutoDetect | ddv-auto-detect | +| Dynamsoft.DDV.Elements.AutoCapture | ddv-auto-capture | +| Dynamsoft.DDV.Elements.ImagePreview | N/A | + +
        + +
        + +| Supported Elements | className of default icon | More descriptions +|-----------------------------------|-------------------------------------------------------------|------------------ +| Dynamsoft.DDV.Elements.Pagination | ddv-first-page
        ddv-prev-page
        ddv-next-page
        ddv-last-page | +| Dynamsoft.DDV.Elements.RotateLeft | ddv-rotate-left | +| Dynamsoft.DDV.Elements.RotateRight | ddv-rotate-right | +| Dynamsoft.DDV.Elements.Delete | N/A | Composite element contains DeleteCurrent and DeleteAll. +| Dynamsoft.DDV.Elements.DeleteCurrent | ddv-delete-current | +| Dynamsoft.DDV.Elements.DeleteAll | ddv-delete-all | +| Dynamsoft.DDV.Elements.PerspectiveAll | ddv-perspective-all | +| Dynamsoft.DDV.Elements.FullQuad | ddv-full-quad | +| Dynamsoft.DDV.Elements.Load | ddv-load-image | Load file from local. If there is no document is opend when you click Load button, a new document (default name: doc-*timestamp*) will be created and opened automatically. +| Dynamsoft.DDV.Elements.Download | ddv-button-download | Download pages in pdf format to local. +| Dynamsoft.DDV.Elements.Print | ddv-print-page | + +
        + +
        + +| Supported Elements | className of default icon | More descriptions +|------------------------------------|-------------------------------------------------------------|------------------- +| Dynamsoft.DDV.Elements.Pagination | ddv-first-page, ddv-prev-page, ddv-next-page, ddv-last-page | +| Dynamsoft.DDV.Elements.RotateLeft | ddv-rotate-left | +| Dynamsoft.DDV.Elements.RotateRight | ddv-rotate-right | +| Dynamsoft.DDV.Elements.Delete | ddv-delete-current | Composite element contains DeleteCurrent and DeleteAll. +| Dynamsoft.DDV.Elements.DeleteCurrent | ddv-delete-current | +| Dynamsoft.DDV.Elements.DeleteAll | ddv-delete-all | +| Dynamsoft.DDV.Elements.Print | ddv-print-page | +| Dynamsoft.DDV.Elements.Load | ddv-load-image | Load file from local. If there is no document is opend when you click Load button, a new document (default name: doc-*timestamp*) will be created and opened automatically. +| Dynamsoft.DDV.Elements.Download | ddv-button-download | Download pages in pdf format to local. + +
        + +
        + +The following list shows the common elements which could be used within all viewer classes. + +| Elements | className of default icon | More descriptions +|----------------------------|---------------------------|---------------- +| Dynamsoft.DDV.Elements.Blank | N/A | +| Dynamsoft.DDV.Elements.SeparatorLine | N/A | +| Dynamsoft.DDV.Elements.MainView | N/A | It cannot be used in CustomViewer. + +Besides, three designed icons are provided and can be used if you want to add the related buttons in order to unify the icon style. + +| Related Button | className of default icon +|------------------|---------------------- +| Close | ddv-button-close +| Done | ddv-button-done +| Back | ddv-button-back + +
        + +
        From 142ebd0d43c8727fa5de929c12169e4ef854490b Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Thu, 12 Mar 2026 14:43:51 +0800 Subject: [PATCH 20/49] add v3.2.1 in config.yml --- _config.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/_config.yml b/_config.yml index 0bad00a..e941afc 100644 --- a/_config.yml +++ b/_config.yml @@ -44,6 +44,9 @@ collections: v2.1: output: true permalink: /:path-:collection:output_ext + v3.2.1: + output: true + permalink: /:path-:collection:output_ext defaults: - scope: From 705b223be7a222440efaf23777077054fb3c36d8 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Thu, 12 Mar 2026 14:46:01 +0800 Subject: [PATCH 21/49] update api/index.md --- api/index.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/api/index.md b/api/index.md index 133b11a..8d6385e 100644 --- a/api/index.md +++ b/api/index.md @@ -33,6 +33,7 @@ permalink: /api/index.html - Annotation - [Rectangle]({{ site.api }}class/annotation/rectangle.html) + - [Redaction](/api/class/annotation/rectangle.md) - [Ellipse]({{ site.api }}class/annotation/ellipse.html) - [Polygon]({{ site.api }}class/annotation/polygon.html) - [Polyline]({{ site.api }}class/annotation/polyline.html) @@ -89,6 +90,7 @@ permalink: /api/index.html - [`HighlightAnnotationOptions`](/api/interface/annotationinterface/highlightannotationoptions.md) - [`UnderlineAnnotationOptions`](/api/interface/annotationinterface/underlineannotationoptions.md) - [`StrikeoutAnnotationOptions`](/api/interface/annotationinterface/strikeoutannotationoptions.md) + - [`RedactionAnnotationOptions`](/api/interface/annotationinterface/redactionannotationoptions.md) - [`Flags`]({{ site.api }}interface/annotationinterface/flags.html) - [`Point`]({{ site.api }}interface/annotationinterface/point.html) - [`TextContent`]({{ site.api }}interface/annotationinterface/textcontent.html) @@ -104,6 +106,7 @@ permalink: /api/index.html - [`HighlightStyle`](/api/interface/annotationinterface/highlightstyle.md) - [`UnderlineStyle`](/api/interface/annotationinterface/underlinestyle.md) - [`StrikeoutStyle`](/api/interface/annotationinterface/strikeoutstyle.md) + - [`RedactionStyle`](/api/interface/annotationinterface/rectanglestyle.md) - [`ToolbarConfig`]({{ site.api }}interface/annotationinterface/toolbarconfig.html) - [`PaletteConfig`]({{ site.api }}interface/annotationinterface/paletteconfig.html) - [`AnnotationToolbarButton`]({{ site.api }}interface/annotationinterface/annotationtoolbarbutton.html) From c7b9de488d3b541484a4ecb12fbe65b303d7a2e9 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Thu, 12 Mar 2026 14:52:18 +0800 Subject: [PATCH 22/49] remove permalinks in v3.2.1 --- _v3.2.1/api/class/annotation/ellipse.md | 1 - _v3.2.1/api/class/annotation/incomplete.md | 1 - _v3.2.1/api/class/annotation/index.md | 1 - _v3.2.1/api/class/annotation/ink.md | 1 - _v3.2.1/api/class/annotation/line.md | 1 - _v3.2.1/api/class/annotation/polygon.md | 1 - _v3.2.1/api/class/annotation/polyline.md | 1 - _v3.2.1/api/class/annotation/rectangle.md | 1 - _v3.2.1/api/class/annotation/stamp.md | 1 - _v3.2.1/api/class/annotation/textbox.md | 1 - _v3.2.1/api/class/annotation/texttypewriter.md | 1 - _v3.2.1/api/class/annotation/unknown.md | 1 - _v3.2.1/api/class/annotationmanager.md | 1 - _v3.2.1/api/class/editviewer.md | 1 - _v3.2.1/api/errorlist.md | 1 - _v3.2.1/api/interface/annotationinterface/flags.md | 1 - _v3.2.1/api/interface/annotationinterface/index.md | 1 - _v3.2.1/api/interface/annotationinterface/paletteconfig.md | 1 - _v3.2.1/api/interface/annotationinterface/toolbarconfig.md | 1 - _v3.2.1/api/interface/infoobject.md | 1 - .../api/interface/styleinterface/annotationdrawingstyleconfig.md | 1 - _v3.2.1/ui/default_elements.md | 1 - 22 files changed, 22 deletions(-) diff --git a/_v3.2.1/api/class/annotation/ellipse.md b/_v3.2.1/api/class/annotation/ellipse.md index 780f796..90f42c8 100644 --- a/_v3.2.1/api/class/annotation/ellipse.md +++ b/_v3.2.1/api/class/annotation/ellipse.md @@ -7,7 +7,6 @@ title: Dynamsoft Document Viewer API Reference - Ellipse Class keywords: Documentation, Dynamsoft Document Viewer, API Reference, Ellipse Class breadcrumbText: Ellipse Class description: Dynamsoft Document Viewer Documentation API Reference Ellipse Class Page -permalink: /api/class/annotation/ellipse.html --- # Ellipse Class diff --git a/_v3.2.1/api/class/annotation/incomplete.md b/_v3.2.1/api/class/annotation/incomplete.md index 42b2ef8..b87aa3a 100644 --- a/_v3.2.1/api/class/annotation/incomplete.md +++ b/_v3.2.1/api/class/annotation/incomplete.md @@ -7,7 +7,6 @@ title: Dynamsoft Document Viewer API Reference - Incomplete Class keywords: Documentation, Dynamsoft Document Viewer, API Reference, Incomplete Class breadcrumbText: Incomplete Class description: Dynamsoft Document Viewer Documentation API Reference Incomplete Class Page -permalink: /api/class/annotation/incomplete.html --- # Incomplete Class diff --git a/_v3.2.1/api/class/annotation/index.md b/_v3.2.1/api/class/annotation/index.md index fc4c947..c0fb86e 100644 --- a/_v3.2.1/api/class/annotation/index.md +++ b/_v3.2.1/api/class/annotation/index.md @@ -7,7 +7,6 @@ title: Dynamsoft Document Viewer Annotation API Reference - Class keywords: Documentation, Dynamsoft Document Viewer, API Reference, Class, Annotation breadcrumbText: EditViewer Class description: Dynamsoft Document Viewer Documentation Annotation API Reference Class Index Page -permalink: /api/class/annotation/index.html --- diff --git a/_v3.2.1/api/class/annotation/ink.md b/_v3.2.1/api/class/annotation/ink.md index d910812..fd46aab 100644 --- a/_v3.2.1/api/class/annotation/ink.md +++ b/_v3.2.1/api/class/annotation/ink.md @@ -7,7 +7,6 @@ title: Dynamsoft Document Viewer API Reference - Ink Class keywords: Documentation, Dynamsoft Document Viewer, API Reference, Ink Class breadcrumbText: Ink Class description: Dynamsoft Document Viewer Documentation API Reference Ink Class Page -permalink: /api/class/annotation/ink.html --- # Ink Class diff --git a/_v3.2.1/api/class/annotation/line.md b/_v3.2.1/api/class/annotation/line.md index b304544..250b955 100644 --- a/_v3.2.1/api/class/annotation/line.md +++ b/_v3.2.1/api/class/annotation/line.md @@ -7,7 +7,6 @@ title: Dynamsoft Document Viewer API Reference - Line Class keywords: Documentation, Dynamsoft Document Viewer, API Reference, Line Class breadcrumbText: Line Class description: Dynamsoft Document Viewer Documentation API Reference Line Class Page -permalink: /api/class/annotation/line.html --- # Line Class diff --git a/_v3.2.1/api/class/annotation/polygon.md b/_v3.2.1/api/class/annotation/polygon.md index d0f7047..47226d9 100644 --- a/_v3.2.1/api/class/annotation/polygon.md +++ b/_v3.2.1/api/class/annotation/polygon.md @@ -7,7 +7,6 @@ title: Dynamsoft Document Viewer API Reference - Polygon Class keywords: Documentation, Dynamsoft Document Viewer, API Reference, Polygon Class breadcrumbText: Polygon Class description: Dynamsoft Document Viewer Documentation API Reference Polygon Class Page -permalink: /api/class/annotation/polygon.html --- # Polygon Class diff --git a/_v3.2.1/api/class/annotation/polyline.md b/_v3.2.1/api/class/annotation/polyline.md index c4cd44c..51429c8 100644 --- a/_v3.2.1/api/class/annotation/polyline.md +++ b/_v3.2.1/api/class/annotation/polyline.md @@ -7,7 +7,6 @@ title: Dynamsoft Document Viewer API Reference - Polyline Class keywords: Documentation, Dynamsoft Document Viewer, API Reference, Polyline Class breadcrumbText: Polyline Class description: Dynamsoft Document Viewer Documentation API Reference Polyline Class Page -permalink: /api/class/annotation/polyline.html --- # Polyline Class diff --git a/_v3.2.1/api/class/annotation/rectangle.md b/_v3.2.1/api/class/annotation/rectangle.md index 7c54891..6165d7f 100644 --- a/_v3.2.1/api/class/annotation/rectangle.md +++ b/_v3.2.1/api/class/annotation/rectangle.md @@ -7,7 +7,6 @@ title: Dynamsoft Document Viewer API Reference - Rectangle Class keywords: Documentation, Dynamsoft Document Viewer, API Reference, Rectangle Class breadcrumbText: Rectangle Class description: Dynamsoft Document Viewer Documentation API Reference Rectangle Class Page -permalink: /api/class/annotation/rectangle.html --- # Rectangle Class diff --git a/_v3.2.1/api/class/annotation/stamp.md b/_v3.2.1/api/class/annotation/stamp.md index 4634b49..484c213 100644 --- a/_v3.2.1/api/class/annotation/stamp.md +++ b/_v3.2.1/api/class/annotation/stamp.md @@ -7,7 +7,6 @@ title: Dynamsoft Document Viewer API Reference - Stamp Class keywords: Documentation, Dynamsoft Document Viewer, API Reference, Stamp Class breadcrumbText: Stamp Class description: Dynamsoft Document Viewer Documentation API Reference Stamp Class Page -permalink: /api/class/annotation/stamp.html --- # Stamp Class diff --git a/_v3.2.1/api/class/annotation/textbox.md b/_v3.2.1/api/class/annotation/textbox.md index 521e38b..f90d97a 100644 --- a/_v3.2.1/api/class/annotation/textbox.md +++ b/_v3.2.1/api/class/annotation/textbox.md @@ -7,7 +7,6 @@ title: Dynamsoft Document Viewer API Reference - TextBox Class keywords: Documentation, Dynamsoft Document Viewer, API Reference, TextBox Class breadcrumbText: TextBox Class description: Dynamsoft Document Viewer Documentation API Reference TextBox Class Page -permalink: /api/class/annotation/textbox.html --- # TextBox Class diff --git a/_v3.2.1/api/class/annotation/texttypewriter.md b/_v3.2.1/api/class/annotation/texttypewriter.md index ed19aab..d798ee5 100644 --- a/_v3.2.1/api/class/annotation/texttypewriter.md +++ b/_v3.2.1/api/class/annotation/texttypewriter.md @@ -7,7 +7,6 @@ title: Dynamsoft Document Viewer API Reference - TextTypewriter Class keywords: Documentation, Dynamsoft Document Viewer, API Reference, TextTypewriter Class breadcrumbText: TextTypewriter Class description: Dynamsoft Document Viewer Documentation API Reference TextTypewriter Class Page -permalink: /api/class/annotation/texttypewriter.html --- # TextTypewriter Class diff --git a/_v3.2.1/api/class/annotation/unknown.md b/_v3.2.1/api/class/annotation/unknown.md index 2175887..dc8d4eb 100644 --- a/_v3.2.1/api/class/annotation/unknown.md +++ b/_v3.2.1/api/class/annotation/unknown.md @@ -7,7 +7,6 @@ title: Dynamsoft Document Viewer API Reference - Unknown Class keywords: Documentation, Dynamsoft Document Viewer, API Reference, Unknown Class breadcrumbText: Unknown Class description: Dynamsoft Document Viewer Documentation API Reference Unknown Class Page -permalink: /api/class/annotation/unknown.html --- # Unknown Class diff --git a/_v3.2.1/api/class/annotationmanager.md b/_v3.2.1/api/class/annotationmanager.md index e50a121..39c0ed5 100644 --- a/_v3.2.1/api/class/annotationmanager.md +++ b/_v3.2.1/api/class/annotationmanager.md @@ -7,7 +7,6 @@ title: Dynamsoft Document Viewer API Reference - AnnotationManager Class keywords: Documentation, Dynamsoft Document Viewer, API Reference, AnnotationManager Class breadcrumbText: AnnotationManager Class description: Dynamsoft Document Viewer Documentation API Reference AnnotationManager Class Page -permalink: /api/class/annotationmanager.html --- # AnnotationManager Class diff --git a/_v3.2.1/api/class/editviewer.md b/_v3.2.1/api/class/editviewer.md index 5e477a5..610a471 100644 --- a/_v3.2.1/api/class/editviewer.md +++ b/_v3.2.1/api/class/editviewer.md @@ -7,7 +7,6 @@ title: Dynamsoft Document Viewer API Reference - EditViewer Class keywords: Documentation, Dynamsoft Document Viewer, API Reference, EditViewer Class breadcrumbText: EditViewer Class description: Dynamsoft Document Viewer Documentation API Reference EditViewer Class Page -permalink: /api/class/editviewer.html --- # EditViewer Class diff --git a/_v3.2.1/api/errorlist.md b/_v3.2.1/api/errorlist.md index a31e803..ce3a56e 100644 --- a/_v3.2.1/api/errorlist.md +++ b/_v3.2.1/api/errorlist.md @@ -7,7 +7,6 @@ title: Dynamsoft Document Viewer API Reference - Error List keywords: Documentation, Dynamsoft Document Viewer, API Reference, Error List breadcrumbText: API Reference description: Dynamsoft Document Viewer Documentation API Reference Error List Page -permalink: /api/errorlist.html --- # Error List diff --git a/_v3.2.1/api/interface/annotationinterface/flags.md b/_v3.2.1/api/interface/annotationinterface/flags.md index 7658e31..2ec0f4b 100644 --- a/_v3.2.1/api/interface/annotationinterface/flags.md +++ b/_v3.2.1/api/interface/annotationinterface/flags.md @@ -7,7 +7,6 @@ title: Dynamsoft Document Viewer API Reference - Interface Flags keywords: Documentation, Dynamsoft Document Viewer, API Reference, Interface Flags breadcrumbText: Interface Flags description: Dynamsoft Document Viewer Documentation API Reference Interface Flags Page -permalink: /api/interface/annotationinterface/flags.html --- # Flags diff --git a/_v3.2.1/api/interface/annotationinterface/index.md b/_v3.2.1/api/interface/annotationinterface/index.md index b17815f..c7dec59 100644 --- a/_v3.2.1/api/interface/annotationinterface/index.md +++ b/_v3.2.1/api/interface/annotationinterface/index.md @@ -7,7 +7,6 @@ title: Dynamsoft Document Viewer API Reference - Annotation Interfaces keywords: Documentation, Dynamsoft Document Viewer, API Reference, Annotation Interfaces breadcrumbText: Annotation Interfaces description: Dynamsoft Document Viewer Documentation API Reference Annotation Interfaces Page -permalink: /api/interface/annotationinterface/index.html --- # Annotation Interfaces diff --git a/_v3.2.1/api/interface/annotationinterface/paletteconfig.md b/_v3.2.1/api/interface/annotationinterface/paletteconfig.md index 203f94d..9b88574 100644 --- a/_v3.2.1/api/interface/annotationinterface/paletteconfig.md +++ b/_v3.2.1/api/interface/annotationinterface/paletteconfig.md @@ -7,7 +7,6 @@ title: Dynamsoft Document Viewer API Reference - Interface PaletteConfig keywords: Documentation, Dynamsoft Document Viewer, API Reference, Interface PaletteConfig breadcrumbText: Interface PaletteConfig description: Dynamsoft Document Viewer Documentation API Reference Interface PaletteConfig Page -permalink: /api/interface/annotationinterface/paletteconfig.html --- # PaletteConfig diff --git a/_v3.2.1/api/interface/annotationinterface/toolbarconfig.md b/_v3.2.1/api/interface/annotationinterface/toolbarconfig.md index 788dbf3..e4c5058 100644 --- a/_v3.2.1/api/interface/annotationinterface/toolbarconfig.md +++ b/_v3.2.1/api/interface/annotationinterface/toolbarconfig.md @@ -7,7 +7,6 @@ title: Dynamsoft Document Viewer API Reference - Interface ToolbarConfig keywords: Documentation, Dynamsoft Document Viewer, API Reference, Interface ToolbarConfig breadcrumbText: Interface ToolbarConfig description: Dynamsoft Document Viewer Documentation API Reference Interface ToolbarConfig Page -permalink: /api/interface/annotationinterface/toolbarconfig.html --- # ToolbarConfig diff --git a/_v3.2.1/api/interface/infoobject.md b/_v3.2.1/api/interface/infoobject.md index 40d11ad..0f23024 100644 --- a/_v3.2.1/api/interface/infoobject.md +++ b/_v3.2.1/api/interface/infoobject.md @@ -7,7 +7,6 @@ title: Dynamsoft Document Viewer API Reference - Interface InfoOjbect keywords: Documentation, Dynamsoft Document Viewer, API Reference, Interface InfoObject breadcrumbText: Interface InfoObject description: Dynamsoft Document Viewer Documentation API Reference Interface InfoObject Page -permalink: /api/interface/infoobject.html --- # InfoObject diff --git a/_v3.2.1/api/interface/styleinterface/annotationdrawingstyleconfig.md b/_v3.2.1/api/interface/styleinterface/annotationdrawingstyleconfig.md index db4f3e5..b14cbbf 100644 --- a/_v3.2.1/api/interface/styleinterface/annotationdrawingstyleconfig.md +++ b/_v3.2.1/api/interface/styleinterface/annotationdrawingstyleconfig.md @@ -7,7 +7,6 @@ title: Dynamsoft Document Viewer API Reference - Interface AnnotationDrawingStyl keywords: Documentation, Dynamsoft Document Viewer, API Reference, Interface AnnotationDrawingStyleConfig breadcrumbText: Interface AnnotationDrawingStyleConfig description: Dynamsoft Document Viewer Documentation API Reference Interface AnnotationDrawingStyleConfig Page -permalink: /api/interface/styleinterface/annotationdrawingstyleconfig.html --- # Interface diff --git a/_v3.2.1/ui/default_elements.md b/_v3.2.1/ui/default_elements.md index 5427521..a554c1e 100644 --- a/_v3.2.1/ui/default_elements.md +++ b/_v3.2.1/ui/default_elements.md @@ -7,7 +7,6 @@ title: Dynamsoft Document Viewer User Interface - Built-in Elements keywords: Documentation, Dynamsoft Document Viewer, User Interface, Built-in Elements breadcrumbText: Built-in Elements description: Dynamsoft Document Viewer Documentation User Interface Built-in Elements part -permalink: /ui/default_elements.html --- From 2c0eb131c725415c3db069ce8a73eb1be9f251db Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Fri, 20 Mar 2026 16:11:02 +0800 Subject: [PATCH 23/49] update convert mode --- api/enumeration-type/enumconvertmode.md | 5 +++++ api/interface/idocument/index.md | 2 +- api/interface/idocument/pdfsource.md | 8 ++++++-- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/api/enumeration-type/enumconvertmode.md b/api/enumeration-type/enumconvertmode.md index d4986f3..685e52b 100644 --- a/api/enumeration-type/enumconvertmode.md +++ b/api/enumeration-type/enumconvertmode.md @@ -12,10 +12,15 @@ permalink: /api/enumeration-type/enumconvertmode.html # EnumConvertMode +This enumeration defines how the PDF is loaded. It affects whether PDF elements like text layers are loaded and the image for display and saving. + ```typescript enum EnumConvertMode { + /** Render the pages. */ CM_RENDERALL = "cm/renderall", + /** Extract the images. */ CM_IMAGEONLY = "cm/imageonly", + /** Automatically decide which mode to use based on whether there is only one image object in the page */ CM_AUTO = "cm/auto", } ``` diff --git a/api/interface/idocument/index.md b/api/interface/idocument/index.md index a41543d..99c8798 100644 --- a/api/interface/idocument/index.md +++ b/api/interface/idocument/index.md @@ -140,7 +140,7 @@ loadSource(sources: Source | PdfSource | (Source | PdfSource)[], index?: number) `fileData`: The blob of the file to be loaded. -`sources`: The target files, it could be a file or a file array. Please refer to [`Source`]({{ site.api }}interface/idocument/source.html). `Source` can be extended to [`PdfSource`]({{ site.api }}interface/idocument/pdfsource.html). +`sources`: The target files, it could be a file or a file array. Please refer to [`Source`](/api/interface/idocument/source.md). `Source` can be extended to [`PdfSource`](/api/interface/idocument/pdfsource.md). `index`: The position in the document where the file(s) will be loaded to. If not set or out of the maximum range, the loaded file(s) will be added from the end of the document. diff --git a/api/interface/idocument/pdfsource.md b/api/interface/idocument/pdfsource.md index 85560b9..5e0a24d 100644 --- a/api/interface/idocument/pdfsource.md +++ b/api/interface/idocument/pdfsource.md @@ -36,10 +36,12 @@ interface PdfSource extends Source { ### convertMode -Specify PDF convert mode. Please refer to [`EnumConvertMode`]({{ site.api }}enumeration-type/enumconvertmode.html). +Specify PDF convert mode. It affects whether PDF elements like text layers are loaded and the image for display and saving. Please refer to [`EnumConvertMode`](/api/enumeration-type/enumconvertmode.md). Default value: `Dynamsoft.DDV.EnumConvertMode.CM_AUTO` +Related to the `renderOptions` attribute if the actual mode is rendering. + ### password If a password is required to open the PDF, please set it here. @@ -58,7 +60,9 @@ Default value: `Dynamsoft.DDV.EnumAnnotationRenderMode.NO_ANNOTATIONS` #### resolution -PDF DPI. Only affects rasterized text. Does not affect images which are extracted from the PDF file. +PDF DPI. Only effective when the actual `convertMode` is rendering. + +Since v4.0 has added high-fidelity rendering, it does not affect the image displayed and only affects the image saved using methods like [`saveToJpeg()`](/api/interface/idocument/index.md#savetojpeg). Default value: 200 From a9c372142bac2c3d7282bc6ed594decb845448d2 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Fri, 20 Mar 2026 16:59:37 +0800 Subject: [PATCH 24/49] add redaction in annotation management --- features/datamanagement/annotmanagement.md | 29 ++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/features/datamanagement/annotmanagement.md b/features/datamanagement/annotmanagement.md index 22d4cf3..493dd9e 100644 --- a/features/datamanagement/annotmanagement.md +++ b/features/datamanagement/annotmanagement.md @@ -33,6 +33,7 @@ Up to now, the annotation types supported by DDV are as follows: - [Highlight]({{ site.api }}class/annotation/highlight.html) - [Underline]({{ site.api }}class/annotation/underline.html) - [Strikeout]({{ site.api }}class/annotation/strikeout.html) +- [Redaction](/api/class/annotation/redaction.md) ### Create a specified type annotation instance @@ -274,3 +275,31 @@ In the same page, annotations maintain a hierarchical relationship with each oth ```typescript Dynamsoft.DDV.annotationManager.sendAnnotationToBack(rect.uid); ``` + +## Redaction + +A redaction annotation identifies content that is intended to be removed from the document. Redaction involves two processes: + +* Content identification. A user creates redact annotations that specify the pieces or regions of content that should be removed. Up until the next step is performed, the user can see, move and redefine these annotations. +* Content removal. The user instructs the viewer application to apply the redact annotations, after which the content in the area specified by the redact annotations is removed. In the removed content's place, some marking appears to indicate the area has been redacted. Also, the redact annotations are removed from the PDF document. + +1. Create a redaction annotation by searching text. + + ```js + const searcher = editViewer.currentDocument.createTextSearcher("content to redact",{caseSensitive:false}) + for (const result of results) { + Dynamsoft.DDV.annotationManager.createAnnotation( + editViewer.getCurrentPageUid(), + "redaction", + { "rects": result.rects } + ); + } + ``` + + In Dynamsoft Document Viewer, there are two types of redaction annotation: text and rectangle. Text-type redaction annotation can be created by selecting text and can have multiple rectangles in `rects`. Rectangle redaction can only have one rectangle in `rects` and can be adjusted freely. + +2. Apply the redaction annotation. + + ```js + let success = await Dynamsoft.DDV.annotationManager.applyRedactions(editViewer.getCurrentPageUid()); + ``` \ No newline at end of file From df63d17d92dd73462f750521956e78d9461f4c5c Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Fri, 20 Mar 2026 17:02:10 +0800 Subject: [PATCH 25/49] fix redaction creation code --- features/datamanagement/annotmanagement.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/features/datamanagement/annotmanagement.md b/features/datamanagement/annotmanagement.md index 493dd9e..a411495 100644 --- a/features/datamanagement/annotmanagement.md +++ b/features/datamanagement/annotmanagement.md @@ -283,10 +283,11 @@ A redaction annotation identifies content that is intended to be removed from th * Content identification. A user creates redact annotations that specify the pieces or regions of content that should be removed. Up until the next step is performed, the user can see, move and redefine these annotations. * Content removal. The user instructs the viewer application to apply the redact annotations, after which the content in the area specified by the redact annotations is removed. In the removed content's place, some marking appears to indicate the area has been redacted. Also, the redact annotations are removed from the PDF document. -1. Create a redaction annotation by searching text. +1. Create redaction annotations by searching text. ```js - const searcher = editViewer.currentDocument.createTextSearcher("content to redact",{caseSensitive:false}) + const searcher = editViewer.currentDocument.createTextSearcher("content to redact",{caseSensitive:false}); + const results = await searcher.getResults(0); //search the results on the first page for (const result of results) { Dynamsoft.DDV.annotationManager.createAnnotation( editViewer.getCurrentPageUid(), From 43534728545a2823d3bdf458e206b7c8ed823508 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Fri, 20 Mar 2026 17:24:58 +0800 Subject: [PATCH 26/49] 4.0 release note --- releasenotes/index.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/releasenotes/index.md b/releasenotes/index.md index 1524fb6..3aa9e4d 100644 --- a/releasenotes/index.md +++ b/releasenotes/index.md @@ -12,6 +12,24 @@ permalink: /releasenotes/index.html # Release Notes +## 4.0 (04/10/2026) + +### New Features + +* Added support for redaction annotation. +* New high-fidelity PDF rendering mode. + +### API Changes + +* Added redaction-related interfaces: [`Redaction`](/api/class/annotation/redaction.md), [`RedactionAnnotationOptions`](/api/interface/annotationinterface/redactionannotationoptions.md), [`RedactionStyle`](/api/interface/annotationinterface/redactionstyle.md), [`applyRedactions()`](/api/class/annotationmanager.md#applyredactions). +* Added redaction-related UI elements. +* Added `printPreparation` to [`InfoObject`](/api/interface/infoobject.md). + +### Bug Fixes + +* Fixed loading of interlaced PNGs. +* Fixed loading of some non-standard PDFs with redundant trailing data. + ## 3.2.1 (03/10/2026) Updated third-party libraries to enhance security. From c212a6432f4710a0f968a729e99d9d7b7926ffbe Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Fri, 20 Mar 2026 17:26:00 +0800 Subject: [PATCH 27/49] add link to redaction annotation's guide in release note --- releasenotes/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/releasenotes/index.md b/releasenotes/index.md index 3aa9e4d..1e3c6ad 100644 --- a/releasenotes/index.md +++ b/releasenotes/index.md @@ -16,7 +16,7 @@ permalink: /releasenotes/index.html ### New Features -* Added support for redaction annotation. +* Added support for [redaction annotation](/features/datamanagement/annotmanagement.md#redaction). * New high-fidelity PDF rendering mode. ### API Changes From 941ee4057588e2d92ecee8ba613782e007b530c0 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Fri, 20 Mar 2026 18:06:01 +0800 Subject: [PATCH 28/49] fix code in RedactionAnnotationOptions --- .../redactionannotationoptions.md | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/api/interface/annotationinterface/redactionannotationoptions.md b/api/interface/annotationinterface/redactionannotationoptions.md index 5243fd8..72a6d62 100644 --- a/api/interface/annotationinterface/redactionannotationoptions.md +++ b/api/interface/annotationinterface/redactionannotationoptions.md @@ -16,20 +16,20 @@ description: Dynamsoft Document Viewer Documentation API Reference Interface Red ```typescript interface RedactionAnnotationOptions { redactionType?: "rectangle" | "text"; -    rects?: RectXY[]; -    background?: string; -    borderColor?: string; -    overlayBackground?: string; -    overlayText?: { -        text: string; -        color?: string; -        textAlign?: "left" | "center" | "right"; -        fontSize?: number; -        fontFamily?: string; -        repeatText?: boolean; -        autoFontSize?: boolean; -    }; -    flags?: Flags; + rects?: RectXY[]; + background?: string; + borderColor?: string; + overlayBackground?: string; + overlayText?: { + text: string; + color?: string; + textAlign?: "left" | "center" | "right"; + fontSize?: number; + fontFamily?: string; + repeatText?: boolean; + autoFontSize?: boolean; + }; + flags?: Flags; } ``` From aebd347092da803413e9080d61dab866ee27c8d9 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Mon, 23 Mar 2026 15:21:35 +0800 Subject: [PATCH 29/49] update infoobject --- api/interface/infoobject.md | 10 ++++++++++ api/namespace/ddv.md | 1 + 2 files changed, 11 insertions(+) diff --git a/api/interface/infoobject.md b/api/interface/infoobject.md index bd5f806..c3f6710 100644 --- a/api/interface/infoobject.md +++ b/api/interface/infoobject.md @@ -19,14 +19,18 @@ interface LoadWasmInfo {} interface LoadSourceInfo { docUid: string; + /** Number of documents processed so far */ current: number; + /** Total number of documents to process */ total: number; } interface SaveSourceInfo { docUid: string; pageUids: []; + /** Number of pages processed so far */ current: number; + /** Total number of pages to process */ total: number; } @@ -42,7 +46,9 @@ interface PerspectiveInfo { interface PrintPreparationInfo { docUid: string; + /** Number of pages processed so far */ current: number; + /** Total number of pages to process */ total: number; } @@ -103,3 +109,7 @@ Indicates the status of the task. Can only be one of the following: ### details Contains additional event type-specific info. + +## See Also + +[`DDV.on("info")`](/api/namespace/ddv.md#info) diff --git a/api/namespace/ddv.md b/api/namespace/ddv.md index 3019167..2cd18b2 100644 --- a/api/namespace/ddv.md +++ b/api/namespace/ddv.md @@ -390,6 +390,7 @@ Triggered for any of the following tasks: - `filter` - `perspective` - `loadWasm` +- `printPreparation` See [`InfoObject`]({{ site.api }}interface/infoobject.html) for details. From 62d10d462301620712ed70baa55182c77a56722f Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Mon, 23 Mar 2026 17:27:22 +0800 Subject: [PATCH 30/49] Update infoobject.md --- api/interface/infoobject.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/api/interface/infoobject.md b/api/interface/infoobject.md index c3f6710..8c1940b 100644 --- a/api/interface/infoobject.md +++ b/api/interface/infoobject.md @@ -7,7 +7,6 @@ title: Dynamsoft Document Viewer API Reference - Interface InfoOjbect keywords: Documentation, Dynamsoft Document Viewer, API Reference, Interface InfoObject breadcrumbText: Interface InfoObject description: Dynamsoft Document Viewer Documentation API Reference Interface InfoObject Page -permalink: /api/interface/infoobject.html --- # InfoObject @@ -20,7 +19,7 @@ interface LoadWasmInfo {} interface LoadSourceInfo { docUid: string; /** Number of documents processed so far */ - current: number; + processed: number; /** Total number of documents to process */ total: number; } @@ -29,7 +28,7 @@ interface SaveSourceInfo { docUid: string; pageUids: []; /** Number of pages processed so far */ - current: number; + processed: number; /** Total number of pages to process */ total: number; } @@ -47,7 +46,7 @@ interface PerspectiveInfo { interface PrintPreparationInfo { docUid: string; /** Number of pages processed so far */ - current: number; + processed: number; /** Total number of pages to process */ total: number; } From c2bea56216b12297d5ebe473f627a9dbcc026c89 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Mon, 23 Mar 2026 17:27:28 +0800 Subject: [PATCH 31/49] update release notes --- releasenotes/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/releasenotes/index.md b/releasenotes/index.md index 1e3c6ad..9d082bd 100644 --- a/releasenotes/index.md +++ b/releasenotes/index.md @@ -17,13 +17,13 @@ permalink: /releasenotes/index.html ### New Features * Added support for [redaction annotation](/features/datamanagement/annotmanagement.md#redaction). -* New high-fidelity PDF rendering mode. +* Changed PDF rendering mode to high-fidelity rendering. ### API Changes * Added redaction-related interfaces: [`Redaction`](/api/class/annotation/redaction.md), [`RedactionAnnotationOptions`](/api/interface/annotationinterface/redactionannotationoptions.md), [`RedactionStyle`](/api/interface/annotationinterface/redactionstyle.md), [`applyRedactions()`](/api/class/annotationmanager.md#applyredactions). * Added redaction-related UI elements. -* Added `printPreparation` to [`InfoObject`](/api/interface/infoobject.md). +* Added `printPreparation` to progress info and renamed attribute `current` to `processed` for `LoadSourceInfo` and `SaveSourceInfo`. See [`InfoObject`](/api/interface/infoobject.md). ### Bug Fixes From 1e74549f6eafae5789123e002566c511ccb1dd96 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Fri, 10 Apr 2026 15:22:01 +0800 Subject: [PATCH 32/49] update release notes about 3rd party libraries --- releasenotes/index.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/releasenotes/index.md b/releasenotes/index.md index 9d082bd..4a50459 100644 --- a/releasenotes/index.md +++ b/releasenotes/index.md @@ -25,11 +25,17 @@ permalink: /releasenotes/index.html * Added redaction-related UI elements. * Added `printPreparation` to progress info and renamed attribute `current` to `processed` for `LoadSourceInfo` and `SaveSourceInfo`. See [`InfoObject`](/api/interface/infoobject.md). +### Improvements + +Updated third-party libraries to enhance security. + ### Bug Fixes * Fixed loading of interlaced PNGs. * Fixed loading of some non-standard PDFs with redundant trailing data. + + ## 3.2.1 (03/10/2026) Updated third-party libraries to enhance security. From 39db4252a119f9fa3f8e2de3ba836d8e815bce34 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Fri, 10 Apr 2026 15:57:55 +0800 Subject: [PATCH 33/49] update v3.2.1 --- _v3.2.1/api/class/annotation/ellipse.md | 1 + _v3.2.1/api/class/annotation/incomplete.md | 1 + _v3.2.1/api/class/annotation/index.md | 1 + _v3.2.1/api/class/annotation/ink.md | 1 + _v3.2.1/api/class/annotation/line.md | 1 + _v3.2.1/api/class/annotation/polygon.md | 1 + _v3.2.1/api/class/annotation/polyline.md | 1 + _v3.2.1/api/class/annotation/rectangle.md | 1 + _v3.2.1/api/class/annotation/stamp.md | 1 + _v3.2.1/api/class/annotation/textbox.md | 1 + .../api/class/annotation/texttypewriter.md | 1 + _v3.2.1/api/class/annotation/unknown.md | 1 + _v3.2.1/api/class/annotationmanager.md | 1 + _v3.2.1/api/class/editviewer.md | 1 + .../api/enumeration-type/enumconvertmode.md | 21 + _v3.2.1/api/errorlist.md | 1 + _v3.2.1/api/index.md | 173 ++++ .../interface/annotationinterface/flags.md | 1 + .../interface/annotationinterface/index.md | 1 + .../annotationinterface/paletteconfig.md | 1 + .../annotationinterface/toolbarconfig.md | 1 + _v3.2.1/api/interface/idocument/index.md | 865 ++++++++++++++++++ _v3.2.1/api/interface/idocument/pdfsource.md | 87 ++ _v3.2.1/api/interface/infoobject.md | 1 + .../annotationdrawingstyleconfig.md | 1 + _v3.2.1/api/namespace/ddv.md | 408 +++++++++ .../datamanagement/annotmanagement.md | 276 ++++++ _v3.2.1/releasenotes/index.md | 391 ++++++++ _v3.2.1/ui/default_elements.md | 1 + 29 files changed, 2243 insertions(+) create mode 100644 _v3.2.1/api/enumeration-type/enumconvertmode.md create mode 100644 _v3.2.1/api/index.md create mode 100644 _v3.2.1/api/interface/idocument/index.md create mode 100644 _v3.2.1/api/interface/idocument/pdfsource.md create mode 100644 _v3.2.1/api/namespace/ddv.md create mode 100644 _v3.2.1/features/datamanagement/annotmanagement.md create mode 100644 _v3.2.1/releasenotes/index.md diff --git a/_v3.2.1/api/class/annotation/ellipse.md b/_v3.2.1/api/class/annotation/ellipse.md index 90f42c8..2c47a2f 100644 --- a/_v3.2.1/api/class/annotation/ellipse.md +++ b/_v3.2.1/api/class/annotation/ellipse.md @@ -7,6 +7,7 @@ title: Dynamsoft Document Viewer API Reference - Ellipse Class keywords: Documentation, Dynamsoft Document Viewer, API Reference, Ellipse Class breadcrumbText: Ellipse Class description: Dynamsoft Document Viewer Documentation API Reference Ellipse Class Page + --- # Ellipse Class diff --git a/_v3.2.1/api/class/annotation/incomplete.md b/_v3.2.1/api/class/annotation/incomplete.md index b87aa3a..f16474d 100644 --- a/_v3.2.1/api/class/annotation/incomplete.md +++ b/_v3.2.1/api/class/annotation/incomplete.md @@ -7,6 +7,7 @@ title: Dynamsoft Document Viewer API Reference - Incomplete Class keywords: Documentation, Dynamsoft Document Viewer, API Reference, Incomplete Class breadcrumbText: Incomplete Class description: Dynamsoft Document Viewer Documentation API Reference Incomplete Class Page + --- # Incomplete Class diff --git a/_v3.2.1/api/class/annotation/index.md b/_v3.2.1/api/class/annotation/index.md index c0fb86e..8c54c68 100644 --- a/_v3.2.1/api/class/annotation/index.md +++ b/_v3.2.1/api/class/annotation/index.md @@ -7,6 +7,7 @@ title: Dynamsoft Document Viewer Annotation API Reference - Class keywords: Documentation, Dynamsoft Document Viewer, API Reference, Class, Annotation breadcrumbText: EditViewer Class description: Dynamsoft Document Viewer Documentation Annotation API Reference Class Index Page + --- diff --git a/_v3.2.1/api/class/annotation/ink.md b/_v3.2.1/api/class/annotation/ink.md index fd46aab..cef30f6 100644 --- a/_v3.2.1/api/class/annotation/ink.md +++ b/_v3.2.1/api/class/annotation/ink.md @@ -7,6 +7,7 @@ title: Dynamsoft Document Viewer API Reference - Ink Class keywords: Documentation, Dynamsoft Document Viewer, API Reference, Ink Class breadcrumbText: Ink Class description: Dynamsoft Document Viewer Documentation API Reference Ink Class Page + --- # Ink Class diff --git a/_v3.2.1/api/class/annotation/line.md b/_v3.2.1/api/class/annotation/line.md index 250b955..0ce4651 100644 --- a/_v3.2.1/api/class/annotation/line.md +++ b/_v3.2.1/api/class/annotation/line.md @@ -7,6 +7,7 @@ title: Dynamsoft Document Viewer API Reference - Line Class keywords: Documentation, Dynamsoft Document Viewer, API Reference, Line Class breadcrumbText: Line Class description: Dynamsoft Document Viewer Documentation API Reference Line Class Page + --- # Line Class diff --git a/_v3.2.1/api/class/annotation/polygon.md b/_v3.2.1/api/class/annotation/polygon.md index 47226d9..82b2714 100644 --- a/_v3.2.1/api/class/annotation/polygon.md +++ b/_v3.2.1/api/class/annotation/polygon.md @@ -7,6 +7,7 @@ title: Dynamsoft Document Viewer API Reference - Polygon Class keywords: Documentation, Dynamsoft Document Viewer, API Reference, Polygon Class breadcrumbText: Polygon Class description: Dynamsoft Document Viewer Documentation API Reference Polygon Class Page + --- # Polygon Class diff --git a/_v3.2.1/api/class/annotation/polyline.md b/_v3.2.1/api/class/annotation/polyline.md index 51429c8..7f7a28b 100644 --- a/_v3.2.1/api/class/annotation/polyline.md +++ b/_v3.2.1/api/class/annotation/polyline.md @@ -7,6 +7,7 @@ title: Dynamsoft Document Viewer API Reference - Polyline Class keywords: Documentation, Dynamsoft Document Viewer, API Reference, Polyline Class breadcrumbText: Polyline Class description: Dynamsoft Document Viewer Documentation API Reference Polyline Class Page + --- # Polyline Class diff --git a/_v3.2.1/api/class/annotation/rectangle.md b/_v3.2.1/api/class/annotation/rectangle.md index 6165d7f..65c807d 100644 --- a/_v3.2.1/api/class/annotation/rectangle.md +++ b/_v3.2.1/api/class/annotation/rectangle.md @@ -7,6 +7,7 @@ title: Dynamsoft Document Viewer API Reference - Rectangle Class keywords: Documentation, Dynamsoft Document Viewer, API Reference, Rectangle Class breadcrumbText: Rectangle Class description: Dynamsoft Document Viewer Documentation API Reference Rectangle Class Page + --- # Rectangle Class diff --git a/_v3.2.1/api/class/annotation/stamp.md b/_v3.2.1/api/class/annotation/stamp.md index 484c213..a337989 100644 --- a/_v3.2.1/api/class/annotation/stamp.md +++ b/_v3.2.1/api/class/annotation/stamp.md @@ -7,6 +7,7 @@ title: Dynamsoft Document Viewer API Reference - Stamp Class keywords: Documentation, Dynamsoft Document Viewer, API Reference, Stamp Class breadcrumbText: Stamp Class description: Dynamsoft Document Viewer Documentation API Reference Stamp Class Page + --- # Stamp Class diff --git a/_v3.2.1/api/class/annotation/textbox.md b/_v3.2.1/api/class/annotation/textbox.md index f90d97a..3e1081c 100644 --- a/_v3.2.1/api/class/annotation/textbox.md +++ b/_v3.2.1/api/class/annotation/textbox.md @@ -7,6 +7,7 @@ title: Dynamsoft Document Viewer API Reference - TextBox Class keywords: Documentation, Dynamsoft Document Viewer, API Reference, TextBox Class breadcrumbText: TextBox Class description: Dynamsoft Document Viewer Documentation API Reference TextBox Class Page + --- # TextBox Class diff --git a/_v3.2.1/api/class/annotation/texttypewriter.md b/_v3.2.1/api/class/annotation/texttypewriter.md index d798ee5..b0d919e 100644 --- a/_v3.2.1/api/class/annotation/texttypewriter.md +++ b/_v3.2.1/api/class/annotation/texttypewriter.md @@ -7,6 +7,7 @@ title: Dynamsoft Document Viewer API Reference - TextTypewriter Class keywords: Documentation, Dynamsoft Document Viewer, API Reference, TextTypewriter Class breadcrumbText: TextTypewriter Class description: Dynamsoft Document Viewer Documentation API Reference TextTypewriter Class Page + --- # TextTypewriter Class diff --git a/_v3.2.1/api/class/annotation/unknown.md b/_v3.2.1/api/class/annotation/unknown.md index dc8d4eb..e018cef 100644 --- a/_v3.2.1/api/class/annotation/unknown.md +++ b/_v3.2.1/api/class/annotation/unknown.md @@ -7,6 +7,7 @@ title: Dynamsoft Document Viewer API Reference - Unknown Class keywords: Documentation, Dynamsoft Document Viewer, API Reference, Unknown Class breadcrumbText: Unknown Class description: Dynamsoft Document Viewer Documentation API Reference Unknown Class Page + --- # Unknown Class diff --git a/_v3.2.1/api/class/annotationmanager.md b/_v3.2.1/api/class/annotationmanager.md index 39c0ed5..7f9d32b 100644 --- a/_v3.2.1/api/class/annotationmanager.md +++ b/_v3.2.1/api/class/annotationmanager.md @@ -7,6 +7,7 @@ title: Dynamsoft Document Viewer API Reference - AnnotationManager Class keywords: Documentation, Dynamsoft Document Viewer, API Reference, AnnotationManager Class breadcrumbText: AnnotationManager Class description: Dynamsoft Document Viewer Documentation API Reference AnnotationManager Class Page + --- # AnnotationManager Class diff --git a/_v3.2.1/api/class/editviewer.md b/_v3.2.1/api/class/editviewer.md index 610a471..f7a4c9d 100644 --- a/_v3.2.1/api/class/editviewer.md +++ b/_v3.2.1/api/class/editviewer.md @@ -7,6 +7,7 @@ title: Dynamsoft Document Viewer API Reference - EditViewer Class keywords: Documentation, Dynamsoft Document Viewer, API Reference, EditViewer Class breadcrumbText: EditViewer Class description: Dynamsoft Document Viewer Documentation API Reference EditViewer Class Page + --- # EditViewer Class diff --git a/_v3.2.1/api/enumeration-type/enumconvertmode.md b/_v3.2.1/api/enumeration-type/enumconvertmode.md new file mode 100644 index 0000000..97a0a5b --- /dev/null +++ b/_v3.2.1/api/enumeration-type/enumconvertmode.md @@ -0,0 +1,21 @@ +--- +layout: default-layout +needAutoGenerateSidebar: true +needGenerateH3Content: true +noTitleIndex: true +title: Dynamsoft Document Viewer API Reference - Enumeration EnumConvertMode +keywords: Documentation, Dynamsoft Document Viewer, API Reference, Enumeration EnumConvertMode +breadcrumbText: Enumeration EnumConvertMode +description: Dynamsoft Document Viewer Documentation API Reference Enumeration EnumConvertMode Page + +--- + +# EnumConvertMode + +```typescript +enum EnumConvertMode { + CM_RENDERALL = "cm/renderall", + CM_IMAGEONLY = "cm/imageonly", + CM_AUTO = "cm/auto", +} +``` diff --git a/_v3.2.1/api/errorlist.md b/_v3.2.1/api/errorlist.md index ce3a56e..d436688 100644 --- a/_v3.2.1/api/errorlist.md +++ b/_v3.2.1/api/errorlist.md @@ -7,6 +7,7 @@ title: Dynamsoft Document Viewer API Reference - Error List keywords: Documentation, Dynamsoft Document Viewer, API Reference, Error List breadcrumbText: API Reference description: Dynamsoft Document Viewer Documentation API Reference Error List Page + --- # Error List diff --git a/_v3.2.1/api/index.md b/_v3.2.1/api/index.md new file mode 100644 index 0000000..ba02dd5 --- /dev/null +++ b/_v3.2.1/api/index.md @@ -0,0 +1,173 @@ +--- +layout: default-layout +needAutoGenerateSidebar: true +needGenerateH3Content: true +noTitleIndex: true +title: Dynamsoft Document Viewer API Reference +keywords: Documentation, Dynamsoft Document Viewer, API Reference +breadcrumbText: API Reference +description: Dynamsoft Document Viewer Documentation API Reference Page + +--- + +# API Reference + +## Namespaces + +- [`Dynamsoft.DDV`]({{ site.api }}namespace/ddv.html) +- [`Dynamsoft.DDV.Core`]({{ site.api }}namespace/ddv_core.html) +- [`Dynamsoft.DDV.Elements`]({{ site.api }}namespace/ddv_elements.html) + +## Classes + +- Dynamsoft.DDV + - [DocumentManager]({{ site.api }}class/documentmanager.html) + - [EditViewer]({{ site.api }}class/editviewer.html) + - [CaptureViewer]({{ site.api }}class/captureviewer.html) + - [PerspectiveViewer]({{ site.api }}class/perspectiveviewer.html) + - [BrowseViewer]({{ site.api }}class/browseviewer.html) + - [CustomViewer]({{ site.api }}class/customviewer.html) + - Advanced + - [ImageFilter]({{ site.api }}class/advanced/imagefilter.html) + - [DocumentDetect]({{ site.api }}class/advanced/documentdetect.html) + +- Annotation + - [Rectangle]({{ site.api }}class/annotation/rectangle.html) + - [Ellipse]({{ site.api }}class/annotation/ellipse.html) + - [Polygon]({{ site.api }}class/annotation/polygon.html) + - [Polyline]({{ site.api }}class/annotation/polyline.html) + - [Line]({{ site.api }}class/annotation/line.html) + - [Ink]({{ site.api }}class/annotation/ink.html) + - [TextBox]({{ site.api }}class/annotation/textbox.html) + - [TextTypewriter]({{ site.api }}class/annotation/texttypewriter.html) + - [Stamp]({{ site.api }}class/annotation/stamp.html) + - [Highlight](/api/class/annotation/highlight.md) + - [Underline](/api/class/annotation/underline.md) + - [Strikeout](/api/class/annotation/strikeout.md) + - [Incomplete]({{ site.api }}class/annotation/incomplete.html) + - [Unknown]({{ site.api }}class/annotation/unknown.html) + + +## Interfaces + +- [`IDocument`]({{ site.api }}interface/idocument/index.html) + - [`Source`]({{ site.api }}interface/idocument/source.html) + - [`PdfSource`]({{ site.api }}interface/idocument/pdfsource.html) + - [`SavePngSettings`]({{ site.api }}interface/idocument/savepngsettings.html) + - [`SaveJpegSettings`]({{ site.api }}interface/idocument/savejpegsettings.html) + - [`SaveTiffSettings`]({{ site.api }}interface/idocument/savetiffsettings.html) + - [`SavePdfSettings`]({{ site.api }}interface/idocument/savepdfsettings.html) + - [`CustomTag`]({{ site.api }}interface/idocument/customtag.html) + - [`PrintSettings`]({{ site.api }}interface/idocument/printsettings.html) + - [`IDocTextSearcher`](/api/interface/idocument/idoctextsearcher.md) + +- Style Interfaces + + | Style Name | Style Interface | + | -------------------- | ------------------------------------------------------------ | + | `pageStyle` | [`BaseStyle`]({{ site.api }}interface/styleinterface/basestyle.html) | + | `currentPageStyle` | [`BaseStyle`]({{ site.api }}interface/styleinterface/basestyle.html) | + | `selectedPageStyle` | [`BaseStyle`]({{ site.api }}interface/styleinterface/basestyle.html) | + | `hoveredPageStyle` | [`BaseStyle`]({{ site.api }}interface/styleinterface/basestyle.html) | + | `placeholderStyle` | [`BaseStyle`]({{ site.api }}interface/styleinterface/basestyle.html) | + | `pageNumberStyle` | [`PageNumberStyle`]({{ site.api }}interface/styleinterface/pagenumberstyle.html) | + | `checkboxStyle` | [`CheckboxStyle`]({{ site.api }}interface/styleinterface/checkboxstyle.html) | + | `canvasStyle` | [`CanvasStyle`]({{ site.api }}interface/styleinterface/canvasstyle.html) | + | `quadSelectionStyle` | [`QuadSelectionStyle`]({{ site.api }}interface/styleinterface/quadselectionstyle.html) | + | `annotationSelectionStyle`| [`AnnotationSelectionStyle`]({{ site.api }}interface/styleinterface/annotationselectionstyle.html) | + +- Annotation Interfaces + - [`RectAnnotationOptions`]({{ site.api }}interface/annotationinterface/rectannotationoptions.html) + - [`EllipseAnnotationOptions`]({{ site.api }}interface/annotationinterface/ellipseannotationoptions.html) + - [`PolygonAnnotationOptions`]({{ site.api }}interface/annotationinterface/polygonannotationoptions.html) + - [`PolylineAnnotationOptions`]({{ site.api }}interface/annotationinterface/polylineannotationoptions.html) + - [`LineAnnotationOptions`]({{ site.api }}interface/annotationinterface/lineannotationoptions.html) + - [`InkAnnotationOptions`]({{ site.api }}interface/annotationinterface/inkannotationoptions.html) + - [`TextBoxAnnotationOptions`]({{ site.api }}interface/annotationinterface/textboxannotationoptions.html) + - [`TextTypewriterAnnotationOptions`]({{ site.api }}interface/annotationinterface/texttypewriterannotationoptions.html) + - [`StampAnnotationOptions`]({{ site.api }}interface/annotationinterface/stampannotationoptions.html) + - [`HighlightAnnotationOptions`](/api/interface/annotationinterface/highlightannotationoptions.md) + - [`UnderlineAnnotationOptions`](/api/interface/annotationinterface/underlineannotationoptions.md) + - [`StrikeoutAnnotationOptions`](/api/interface/annotationinterface/strikeoutannotationoptions.md) + - [`Flags`]({{ site.api }}interface/annotationinterface/flags.html) + - [`Point`]({{ site.api }}interface/annotationinterface/point.html) + - [`TextContent`]({{ site.api }}interface/annotationinterface/textcontent.html) + - [`RectangleStyle`]({{ site.api }}interface/annotationinterface/rectanglestyle.html) + - [`EllipseStyle`]({{ site.api }}interface/annotationinterface/ellipsestyle.html) + - [`PolygonStyle`]({{ site.api }}interface/annotationinterface/polygonstyle.html) + - [`PolylineStyle`]({{ site.api }}interface/annotationinterface/polylinestyle.html) + - [`LineStyle`]({{ site.api }}interface/annotationinterface/linestyle.html) + - [`InkStyle`]({{ site.api }}interface/annotationinterface/inkstyle.html) + - [`TextBoxStyle`]({{ site.api }}interface/annotationinterface/textboxstyle.html) + - [`TextTypewriterStyle`]({{ site.api }}interface/annotationinterface/texttypewriterstyle.html) + - [`StampStyle`]({{ site.api }}interface/annotationinterface/stampstyle.html) + - [`HighlightStyle`](/api/interface/annotationinterface/highlightstyle.md) + - [`UnderlineStyle`](/api/interface/annotationinterface/underlinestyle.md) + - [`StrikeoutStyle`](/api/interface/annotationinterface/strikeoutstyle.md) + - [`ToolbarConfig`]({{ site.api }}interface/annotationinterface/toolbarconfig.html) + - [`PaletteConfig`]({{ site.api }}interface/annotationinterface/paletteconfig.html) + - [`AnnotationToolbarButton`]({{ site.api }}interface/annotationinterface/annotationtoolbarbutton.html) + +- [`AnnotationConfig`]({{ site.api }}interface/annotationconfig.html) +- [`BrowseViewerConfig`]({{ site.api }}interface/browseviewerconfig.html) +- [`BrowseViewerConstructorOptions`]({{ site.api }}interface/browseviewerconstructoroptions.html) +- [`CaptureViewerConfig`]({{ site.api }}interface/captureviewerconfig.html) +- [`CaptureViewerConstructorOptions`]({{ site.api }}interface/captureviewerconstructoroptions.html) +- [`ConfigResult`]({{ site.api }}interface/configresult.html) +- [`CreateDocumentOptions`]({{ site.api }}interface/createdocumentoptions.html) +- [`CustomViewerConstructorOptions`]({{ site.api }}interface/customviewerconstructoroptions.html) +- [`DDVError`]({{ site.api }}interface/ddverror.html) +- [`DetectResult`]({{ site.api }}interface/detectresult.html) +- [`DisplayTextConfig`]({{ site.api }}interface/displaytextconfig.html) +- [`DocumentDetectConfig`]({{ site.api }}interface/documentdetectconfig.html) +- [`DocumentDetectResult`]({{ site.api }}interface/documentdetectresult.html) +- [`EditViewerConfig`]({{ site.api }}interface/editviewerconfig.html) +- [`EditViewerConstructorOptions`]({{ site.api }}interface/editviewerconstructoroptions.html) +- [`IBrowseViewer`]({{ site.api }}interface/ibrowseviewer.html) +- [`IImageFilter`]({{ site.api }}interface/iimagefilter.html) +- [`IPointerEvent`](/api/interface/ipointerevent.md) +- [`IPageData`](/api/interface/ipagedata.md) +- [`IQuadModifiedEvent`](/api/interface/iquadmodifiedevent.md) +- [`ITextSearchedInfo`](/api/interface/itextsearchedinfo.md) +- [`ITextSelectedInfo`](/api/interface/itextselectedinfo.md) +- [`IDocumentDetect`]({{ site.api }}interface/idocumentdetect.html) +- [`ImageFilterItem`]({{ site.api }}interface/imagefilteritem.html) +- [`MergeDocumentOptions`]({{ site.api }}interface/mergedocumentoptions.html) +- [`PageImageInfo`](/api/interface/pageimageinfo.md) +- [`PageVisualInfo`](/api/interface/pagevisualinfo.md) +- [`PerspectiveViewerConfig`]({{ site.api }}interface/perspectiveviewerconfig.html) +- [`PerspectiveViewerConstructorOptions`]({{ site.api }}interface/perspectiveviewerconstructoroptions.html) +- [`PlayCallbackInfo`]({{ site.api }}interface/playcallbackinfo.html) +- [`Rect`]({{ site.api }}interface/rect.html) +- [`RectXY`](/api/interface/rectxy.md) +- [`SearchTextOptions`](/api/interface/searchtextoptions.md) +- [`TextSearchResult`](/api/interface/textsearchresult.md) +- [`ThumbnailConfig`]({{ site.api }}interface/thumbnailconfig.html) +- [`Tooltip`]({{ site.api }}interface/tooltip.html) +- [`TransferOptions`]({{ site.api }}interface/transferoptions.html) +- [`UiConfig`]({{ site.api }}interface/uiconfig.html) +- [`UpdatedPdfSource`](/api/interface/updatedpdfsource.md) +- [`UpdatedSource`](/api/interface/updatedsource.md) +- [`VError`]({{ site.api }}interface/verror.html) +- [`VideoConfig`]({{ site.api }}interface/videoconfig.html) +- [`VideoDeviceInfo`]({{ site.api }}interface/videodeviceinfo.html) +- [`VImageData`]({{ site.api }}interface/vimagedata.html) +- [`ZoomOrigin`]({{ site.api }}interface/zoomorigin.html) + +## Enumeration & Type + +- [`EnumPdfPageType`]({{ site.api }}enumeration-type/enumpdfpagetype.html) +- [`EnumPdfCompressionType`]({{ site.api }}enumeration-type/enumpdfcompressiontype.html) +- [`EnumTiffCompressionType`]({{ site.api }}enumeration-type/enumtiffcompressiontype.html) +- [`EnumConvertMode`]({{ site.api }}enumeration-type/enumconvertmode.html) +- [`EnumAnnotationRenderMode`]({{ site.api }}enumeration-type/enumannotationrendermode.html) +- [`EnumImageDataType`]({{ site.api }}enumeration-type/enumimagedatatype.html) +- [`EnumImageFilterType`]({{ site.api }}enumeration-type/enumimagefiltertype.html) +- [`EnumDocumentDetectionStatus`]({{ site.api }}enumeration-type/enumdocumentdetectionstatus.html) +- [`EnumStampIcon`]({{ site.api }}enumeration-type/enumstampicon.html) +- [`EnumLineEnding`]({{ site.api }}enumeration-type/enumlineending.html) +- [`type Quad`]({{ site.api }}enumeration-type/quad.html) + +## Error + +- [Error List]({{ site.api }}errorlist.html) \ No newline at end of file diff --git a/_v3.2.1/api/interface/annotationinterface/flags.md b/_v3.2.1/api/interface/annotationinterface/flags.md index 2ec0f4b..d7f9cd8 100644 --- a/_v3.2.1/api/interface/annotationinterface/flags.md +++ b/_v3.2.1/api/interface/annotationinterface/flags.md @@ -7,6 +7,7 @@ title: Dynamsoft Document Viewer API Reference - Interface Flags keywords: Documentation, Dynamsoft Document Viewer, API Reference, Interface Flags breadcrumbText: Interface Flags description: Dynamsoft Document Viewer Documentation API Reference Interface Flags Page + --- # Flags diff --git a/_v3.2.1/api/interface/annotationinterface/index.md b/_v3.2.1/api/interface/annotationinterface/index.md index c7dec59..75a6d6f 100644 --- a/_v3.2.1/api/interface/annotationinterface/index.md +++ b/_v3.2.1/api/interface/annotationinterface/index.md @@ -7,6 +7,7 @@ title: Dynamsoft Document Viewer API Reference - Annotation Interfaces keywords: Documentation, Dynamsoft Document Viewer, API Reference, Annotation Interfaces breadcrumbText: Annotation Interfaces description: Dynamsoft Document Viewer Documentation API Reference Annotation Interfaces Page + --- # Annotation Interfaces diff --git a/_v3.2.1/api/interface/annotationinterface/paletteconfig.md b/_v3.2.1/api/interface/annotationinterface/paletteconfig.md index 9b88574..e6b5d28 100644 --- a/_v3.2.1/api/interface/annotationinterface/paletteconfig.md +++ b/_v3.2.1/api/interface/annotationinterface/paletteconfig.md @@ -7,6 +7,7 @@ title: Dynamsoft Document Viewer API Reference - Interface PaletteConfig keywords: Documentation, Dynamsoft Document Viewer, API Reference, Interface PaletteConfig breadcrumbText: Interface PaletteConfig description: Dynamsoft Document Viewer Documentation API Reference Interface PaletteConfig Page + --- # PaletteConfig diff --git a/_v3.2.1/api/interface/annotationinterface/toolbarconfig.md b/_v3.2.1/api/interface/annotationinterface/toolbarconfig.md index e4c5058..713e1ef 100644 --- a/_v3.2.1/api/interface/annotationinterface/toolbarconfig.md +++ b/_v3.2.1/api/interface/annotationinterface/toolbarconfig.md @@ -7,6 +7,7 @@ title: Dynamsoft Document Viewer API Reference - Interface ToolbarConfig keywords: Documentation, Dynamsoft Document Viewer, API Reference, Interface ToolbarConfig breadcrumbText: Interface ToolbarConfig description: Dynamsoft Document Viewer Documentation API Reference Interface ToolbarConfig Page + --- # ToolbarConfig diff --git a/_v3.2.1/api/interface/idocument/index.md b/_v3.2.1/api/interface/idocument/index.md new file mode 100644 index 0000000..b94021b --- /dev/null +++ b/_v3.2.1/api/interface/idocument/index.md @@ -0,0 +1,865 @@ +--- +layout: default-layout +needAutoGenerateSidebar: true +needGenerateH3Content: true +noTitleIndex: true +title: Dynamsoft Document Viewer API Reference - Interface IDocument +keywords: Documentation, Dynamsoft Document Viewer, API Reference, Interface IDocument +breadcrumbText: Interface IDocument +description: Dynamsoft Document Viewer Documentation API Reference Interface IDocument Page + +--- + +# IDocument + +This interface that defines a document object. + +## Members + +| API Name | Description | +| ------------------- | ------------------------------------------------------------ | +| [`name`](#name) | Return the name of current document. | +| [`author`](#author) | Return the author of current document. | +| [`creationDate`](#creationdate) | Return the creation date of current document. | +| [`uid`](#uid) | Return the docUid of current document. | +| [`pages`](#pages) | Return the array of pageUids of current document. | +| [`loadSource()`](#loadsource) | Load file(s) to current document. | +| [`getPageData()`](#getpagedata) | Get the data of specified page. | +| [`updatePage()`](#updatepage) | Update a page specified by the pageUid with the new data. | +| [`setPageCustomData()`](#setpagecustomdata) | Set the custom data to the specified page. | +| [`getPageCustomData()`](#getpagecustomdata) | Get the custom data of the specified page. | +| [`deletePages()`](#deletepages) | Delete the specified pages from current document. | +| [`deleteAllPages()`](#deleteallpages) | Delete all pages in current document. | +| [`movePages()`](#movepages) | Move specified page(s) to the target position in current document. | +| [`switchPage()`](#switchpage) | Swap the position of two pages in current document. | +| [`insertBlankPage()`](#insertblankpage) | Insert a blank page to current document. | +| [`isPageModified()`](#ispagemodified) | Check if a page is modified. | +| [`rename()`](#rename) | Rename current document. | +| [`saveToPng()`](#savetopng) | Save specified page or current page in current document to a PNG file. | +| [`saveToJpeg()`](#savetojpeg) | Save specified page or current page in current document to a JPEG file. | +| [`saveToTiff()`](#savetotiff) | Save specified page(s) or all pages in current document to a TIFF file. | +| [`saveToPdf()`](#savetopdf) | Save specified page(s) or all pages in current document to a PDF file. | +| [`print()`](#print) | Use the browser’s built-in print feature to print the specified image(s). | +| [`createTextSearcher()`](#createtextsearcher) | Create a text searcher. | + +### name + +Return the name of current document. + +**Syntax** + +```typescript +readonly name: string; +``` + +**Remark** + +- It can be set while creating the document by using [`createDocument()`]({{ site.api }}class/documentmanager.html#createdocument). If it is not set, return the name which is auto generated. + +### author + +Return the author of current document. + +**Syntax** + +```typescript +readonly author: string; +``` + +**Remark** + +- It can be set while creating the document by using [`createDocument()`]({{ site.api }}class/documentmanager.html#createdocument). If it is not set, return `''`. + +### creationDate + +Return the creation date of current document. + +**Syntax** + +```typescript +readonly creationDate: string; +``` + +**Remark** + +- It can be set while creating the document by using [`createDocument()`]({{ site.api }}class/documentmanager.html#createdocument). If it is not set, return the actual creation date of the document. + +### uid + +Return the docUid of current document. + +**Syntax** + +```typescript +readonly uid: string; +``` + +### pages + +Return the array of pageUids of current document. + +**Syntax** + +```typescript +readonly pages: string[]; +``` + +**Remark** + +- Returns an array of pageUids. + +**Code Snippet** + +```typescript +const firstDoc = Dynamsoft.DDV.documentManager.createDocument({ + name: "first_document", + author: "DDV", + creationDate: "D:20230101085959-08'00'", + }); + +const docName = firstDoc.name; +const docAuthor = firstDoc.author; +const docCreationDate = firstDoc.creationDate; +const docUid = firstDoc.uid; +const docPages = firstDoc.pages; +``` + + +### loadSource() + +Load file(s) to current document. + +**Syntax** + +```typescript +loadSource(fileData: Blob | Blob[], index?: number): Promise; +loadSource(sources: Source | PdfSource | (Source | PdfSource)[], index?: number): Promise; +``` + +**Parameters** + +`fileData`: The blob of the file to be loaded. + +`sources`: The target files, it could be a file or a file array. Please refer to [`Source`]({{ site.api }}interface/idocument/source.html). `Source` can be extended to [`PdfSource`]({{ site.api }}interface/idocument/pdfsource.html). + +`index`: The position in the document where the file(s) will be loaded to. If not set or out of the maximum range, the loaded file(s) will be added from the end of the document. + +**Return Value** + +A Promise object which will be resolved with the page uids of the loaded pages when the file(s) are successfully loaded. + +**Code Snippet** + +```typescript +const firstDoc = Dynamsoft.DDV.documentManager.createDocument({ + name: "first_document", + author: "DDV", + creationDate: "D:20230101085959-08'00'", + }); +const source = { + fileData: /*sampleBlob*/; +}; +await firstDoc.loadSource([source]); +``` + +**Promise Exception** + + Error Code | Error Message +--------|----------------------------------------------------- + -80001 | License string is invalid. + -80002 | *XXX(LicenseModuleName)* module license has expired. + -80003 | *XXX(LicenseModuleName)* module license is missing. + -80004 | *XXX(LicenseModuleName)* module license version does not match. + -80005 | Domain does not match the domain bound to the *XXX(LicenseModuleName)* module license. + -80050 | DDV.Core.init() has not been set up yet. + -80051 | DDV.Core.init() has not been completed. + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. + -80200 | File type is not supported. + -80202 | Failed to read the PDF file because it's encrypted and the correct password is not provided. + -80203 | Failed to read some annotations because they are not supported by Dynamsoft Document Viewer so far. + -80204 | PDFs containing XFA (XML Forms Architecture) forms are not supported. + +### getPageData() + +Get the data of specified page. + +**Syntax** + +```typescript +getPageData(pageUid: string): IPageData; +``` + +**Parameters** + +`pageUid`: The uid of the page. + +**Return Value** + +[`IPageData`](/api/interface/ipagedata.md) object. + +**Code Snippet** + +```typescript +const pageData = firstDoc.getPageData(firstDoc.pages[0]); +``` + +**Promise Exception** + + Error Code | Error Message +--------|----------------------------------------------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. + -80105 | *XXX(API)*: The specified page(s) do not exist. + + +### updatePage() + +Update a page specified by the pageUid with the new data. + +**Syntax** + +```typescript +updatePage(pageUid: string, source: UpdatedSource | UpdatedPdfSource): Promise; +``` + +**Parameters** + +`pageUid`: The uid of the page to be updated. + +`source`: The new data. Please refer to [`UpdatedSource`](/api/interface/updatedsource.md) and [`UpdatedPdfSource`](/api/interface/updatedpdfsource.md). + +**Return Value** + +A Promise object which will be resolved with a boolean value. + +`true`: Successfully. + +`false`: Failed. + +**Code Snippet** + +```typescript +const source = { + fileIndex: 1, // Using the second page of the new multi-page file, such as PDF or TIFF. + fileData: /*sample blob*/ +}; + +await firstDoc.updatePage(firstDoc.pages[0], source); +``` + +**Promise Exception** + + Error Code | Error Message +--------|----------------------------------------------------- + -80001 | License string is invalid. + -80002 | *XXX(LicenseModuleName)* module license has expired. + -80003 | *XXX(LicenseModuleName)* module license is missing. + -80004 | *XXX(LicenseModuleName)* module license version does not match. + -80005 | Domain does not match the domain bound to the *XXX(LicenseModuleName)* module license. + -80050 | DDV.Core.init() has not been set up yet. + -80051 | DDV.Core.init() has not been completed. + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. + -80200 | File type is not supported. + -80202 | Failed to read the PDF file because it's encrypted and the correct password is not provided. + -80203 | Failed to read some annotations because they are not supported by Dynamsoft Document Viewer so far. + -80204 | PDFs containing XFA (XML Forms Architecture) forms are not supported. + + +### setPageCustomData() + +Set the custom data to the specified page. + +**Syntax** + +```typescript +setPageCustomData(pageUid: string, data: any): Promise; +``` + +**Parameters** + +`pageUid`: The uid of the page. + +`data`: The custom data to set. + +**Return Value** + +A Promise object which will be resolved with a boolean value. + +`true`: Successfully. + +`false`: Failed. + +**Code Snippet** + +```typescript +const customData ={ + hasBarcode: true; // sample custom data +}; +await firstDoc.setPageCustomData(firstDoc.pages[0], customData); +``` + +**Promise Exception** + + Error Code | Error Message +--------|----------------------------------------------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. + -80105 | *XXX(API)*: The specified page(s) do not exist. + +### getPageCustomData() + +Get the custom data of the specified page. + +**Syntax** + +```typescript +getPageCustomData(pageUid: string): Promise; +``` + +**Parameters** + +`pageUid`: The uid of the page. + +**Return Value** + +A Promise object which will be resolved with the custom data. + +**Code Snippet** + +```typescript +const customdata = await firstDoc.getPageCutomData(firstDoc.pages[0]); +``` + +**Promise Exception** + + Error Code | Error Message +--------|----------------------------------------------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. + -80105 | *XXX(API)*: The specified page(s) do not exist. + +### deletePages() + +Delete the specified pages from current document. + +**Syntax** + +```typescript +deletePages(indices: number[]): boolean; +``` + +**Parameters** + +`indices`: The array of page indices which will be removed. + +**Return Value** + +`true`: Successfully. + +`false`: Failed. + +**Code Snippet** + +```typescript +// Delete the first and second page. +firstDoc.deletePages([0,1]); +``` + +**Warning** + + Error Code | Error Message | API return value +-------------|------------------------------------------------|--------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | `false` + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. | `false` + +### deleteAllPages() + +Delete all pages in current document. + +**Syntax** + +```typescript +deleteAllPages(): boolean; +``` + +**Parameters** + +None. + +**Return Value** + +`true`: Successfully. + +`false`: Failed. + +**Code Snippet** + +```typescript +// Delete all pages from the doc. +firstDoc.deleteAllPages(); +``` + +### movePages() + +Move specified page(s) to the target position in current document. + +**Syntax** + +```typescript +movePages(indices: number[], insertBeforeIndex?: number): void; +``` + +**Parameters** + +`indices`: The array of page(s) indices to be moved. + +`insertBeforeIndex`: Moved pages will be placed before this index. If not set or out of the maximum range, the specified page(s) will be moved after the last page. + +**Code Snippet** + +```typescript +// Move the second, fourth, sixth pages to the begining of the doc +// The moved pages are in (original sixth, fourth, second) order. +firstDoc.movePages([5,3,1], 0); +``` + +**Exception** + + Error Code | Error Message +--------|----------------------------------------------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. + + +### switchPage() + +Swap the position of two pages in current document. + +**Syntax** + +```typescript +switchPage(oneIndex: number, anotherIndex: number): void; +``` + +**Parameters** + +`oneIndex`: The index of one page. + +`anotherIndex`: The index of another page. + +**Return Value** + +`true`: Successfully. + +`false`: Failed. + +**Code Snippet** + +```typescript +// Switch the third and sixth pages. +firstDoc.switchPage(2, 5); +``` + +**Exception** + + Error Code | Error Message +--------|----------------------------------------------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. + -80101 | *XXX(API)*: *XXX(ParameterName)* is out of range. + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. + +### insertBlankPage() + +Insert a blank page to current document. + +**Syntax** + +```typescript +insertBlankPage( + pageWidth: number; + pageHeight: number; + insertBeforeIndex?: number; +):string; +``` + +**Parameters** + +`pageWidth`: The page width of the blank page to insert. The unit is point. + +`pageHeight`: The page height of the blank page to insert. The unit is point. + +`insertBeforeIndex`: The blank page will be inserted before this index. If not set or out of the maximum range, the blank page will be added after the last page. + +*Common page sizes:* + + Page size | pageWidth (pt) | pageHeight (pt) +-----------|------------------|------------------- + Letter | 612 | 792 + Legal | 612 | 1008 + A4 | 597.6 | 842.4 + A3 | 842.4 | 1188 + +**Return value** + +The page uid of the inserted blank page. + +**Exception** + + Error Code | Error Message +-------------|----------------------------------------------------- + -80050 | DDV.Core.init() has not been set up yet. + -80051 | DDV.Core.init() has not been completed. + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. + -80101 | *XXX(API)*: *XXX(ParameterName)* is out of range. + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. + +### isPageModified() + +Check if a page is modified. + +**Syntax** + +```typescript +isPageModified(index: number): boolean; +``` + +**Parameters** + +`index`: The page index. + +**Return value** + +A boolean value which indicates whether the page is modified. + +**Exception** + + Error Code | Error Message +--------|----------------------------------------------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. + -80101 | *XXX(API)*: *XXX(ParameterName)* is out of range. + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. + +### rename() + +Rename current document. + +**Syntax** + +```typescript +rename(name: string): boolean; +``` + +**Parameters** + +`name`: The new name of current document. + +**Return Value** + +`true`: Successfully. + +`false`: Failed. + +**Code Snippet** + +```typescript +const firstDoc = Dynamsoft.DDV.documentManager.createDocument({ + name: "first_document", + author: "DDV", + creationDate: "D:20230101085959-08'00'", + }); +firstDoc.rename("my_doc"); +``` + +**Warning** + + Error Code | Error Message | API return value +--------|-----------------------------------------------------|--------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | `false` + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. | `false` + +### saveToPng() + +Save specified page or current page in current document to a PNG file. + +**Syntax** + +```typescript +saveToPng(index: number, savePngSettings?: SavePngSettings): Promise; +``` + +**Parameters** + +`index`: Specify index of the page to be saved. + +`savePngSettings`: Specify the save settings. Please refer to [`SavePngSettings`]({{ site.api }}interface/idocument/savepngsettings.html). + +**Return Values** + +A Promise object which will be resolved with `Blob` of the saved image. + +**Code Snippet** + +```typescript +// Save the first page to a PNG file. +const result = await firstDoc.saveToPng(0); +``` + +**Promise Exception** + + Error Code | Error Message +--------|----------------------------------------------------- + -80001 | License string is invalid. + -80002 | *XXX(LicenseModuleName)* module license has expired. + -80003 | *XXX(LicenseModuleName)* module license is missing. + -80004 | *XXX(LicenseModuleName)* module license version does not match. + -80005 | Domain does not match the domain bound to the *XXX(LicenseModuleName)* module license. + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. + -80101 | *XXX(API)*: *XXX(ParameterName)* is out of range. + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. + +### saveToJpeg() + +Save specified page or current page in current document to a JPEG file. + +**Syntax** + +```typescript +saveToJpeg(index: number, saveJpegSettings?: SaveJpegSettings): Promise; +``` + +**Parameters** + +`index`: Specify index of the page to be saved. + +`saveJpegSettings`: Specify the save settings. Please refer to [`SaveJpegSettings`]({{ site.api }}interface/idocument/savejpegsettings.html). + +**Return Values** + +A Promise object which will be resolved with `Blob` of the saved image. + +**Code Snippet** + +```typescript +// Save the first page as a JPEG file with a JPEG compression quality of 100, and the annotations are saved as part of the JPEG. +const settings = { + quality: 100, + saveAnnotation: false, +}; +const result = await firstDoc.saveToJpeg(0, settings); +``` + +**Promise Exception** + + Error Code | Error Message +--------|----------------------------------------------------- + -80001 | License string is invalid. + -80002 | *XXX(LicenseModuleName)* module license has expired. + -80003 | *XXX(LicenseModuleName)* module license is missing. + -80004 | *XXX(LicenseModuleName)* module license version does not match. + -80005 | Domain does not match the domain bound to the *XXX(LicenseModuleName)* module license. + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. + -80101 | *XXX(API)*: *XXX(ParameterName)* is out of range. + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. + +### saveToTiff() + +Save specified page(s) or all pages in current document to a TIFF file. + +**Syntax** + +```typescript +saveToTiff(indices: number[], saveTiffSettings?: SaveTiffSettings): Promise; +saveToTiff(saveTiffSettings?: SaveTiffSettings): Promise; +``` + +**Parameters** + +`indices`: The array of page indices which will be saved. If not set, will save all pages to a TIFF file by default. + +`saveTiffSettings`: Specify the save settings. Please refer to [`SaveTiffSettings`]({{ site.api }}interface/idocument/savetiffsettings.html). + +**Return Values** + +A Promise object which will be resolved with `Blob` of the saved TIFF file. + +**Code Snippet** + +```typescript +// Set custom tag +const customTag1 = { + id: 700, + content: "Created By Dynamsoft", + contentIsBase64: false, +} + +// Set SaveTiffSettings +const tiffSettings = { + customTag: [customTag1], + compression: "tiff/auto", +} + +// Save the fifth, sixth, seventh pages to a multi-page TIFF file with the specified tiff settings. +const result1 = await firstDoc.saveToTiff([4,5,6], tiffSettings); + +// Save the whole document to a multi-page TIFF file with the specified tiff settings. +const result2 = await firstDoc.saveToTiff(tiffSettings); +``` + +**Promise Exception** + + Error Code | Error Message +--------|----------------------------------------------------- + -80001 | License string is invalid. + -80002 | *XXX(LicenseModuleName)* module license has expired. + -80003 | *XXX(LicenseModuleName)* module license is missing. + -80004 | *XXX(LicenseModuleName)* module license version does not match. + -80005 | Domain does not match the domain bound to the *XXX(LicenseModuleName)* module license. + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. + -80305 | There is no image in the current document. + +### saveToPdf() + +Save specified page(s) or all pages in current document to a PDF file. + +**Syntax** + +```typescript +saveToPdf(indices: number[], savePdfSettings?: SavePdfSettings): Promise; +saveToPdf(savePdfSettings?: SavePdfSettings): Promise; +``` + +**Parameters** + +`indices`: The array of page indices which will be saved. + +`savePdfSettings`: Specify the save settings. Please refer to [`SavePdfSettings`]({{ site.api }}interface/idocument/savepdfsettings.html). If not set, will save all pages to a PDF file by default. + +**Return Values** + +A Promise object which will be resolved with `Blob` of the saved PDF file. + +**Code Snippet** + +```typescript +const pdfSettings = { + author: "Dynamsoft", + compression: "pdf/jpeg", + pageType: "page/a4", + creator: "DDV", + creationDate: "D:20230101085959-08'00'", + keyWords: "samplepdf", + modifiedDate: "D:20230101090101-08'00'", + producer: "Dynamsoft Document Viewer", + subject: "SamplePdf", + title: "SamplePdf", + version: "1.5", + quality: 90, + password: "dynamsoft", + saveAnnotation: "annotation", + imageScaleFactor: 1, +}; + +// Save the fifth, sixth, seventh pages to a multi-page PDF file with the specified pdf settings. +const result1 = await firstDoc.saveToPdf([4,5,6], pdfSettings); + +// Save the whole document to a multi-page PDF file with the specified pdf settings. +const result2 = await firstDoc.saveToPdf(pdfSettings); +``` + +**Promise Exception** + + Error Code | Error Message +--------|----------------------------------------------------- + -80001 | License string is invalid. + -80002 | *XXX(LicenseModuleName)* module license has expired. + -80003 | *XXX(LicenseModuleName)* module license is missing. + -80004 | *XXX(LicenseModuleName)* module license version does not match. + -80005 | Domain does not match the domain bound to the *XXX(LicenseModuleName)* module license. + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. + -80305 | There is no image in the current document. + -80318 | The document contains unsupported fonts, which may result in font loss after saving. + +### print() + +Use the browser’s built-in print feature to print the specified image(s) and whether printable annotations can be printed + +**Syntax** + +```typescript +print(printSettings?: PrintSettings); +print(indices: number[], printSettings?: PrintSettings); +``` + +**Parameters** + +`indices`: The array of page indices which will be printed. If not set, will export all pages to the browser’s built-in print window. + +`printSettings`: Specify the print settings. Please refer to [`PrintSettings`]({{ site.api }}interface/idocument/printsettings.html). + +**Return Values** + +`true`: Successfully. + +`false`: Failed. + +--- + +**Code Snippet** + +```typescript +// To print the whole doc pages +firstDoc.print(); + +// To print the second and third pages +firstDoc.print([1,2]); + +// To print the whole doc pages, including printable annotations. +firstDoc.print({ + printAnnotation: true; +}); +``` + +**Exception** + + Error Code | Error Message +--------|----------------------------------------------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. + -80305 | There is no image in the current document. + +### createTextSearcher() + +Create a text searcher. + +**Syntax** + +```typescript +createTextSearcher(text: string, options?: SearchTextOptions): IDocTextSearcher; +``` + +**Parameters** + +`text`: Text to search + +`options`: Please refer to [`SearchTextOptions`](/api/interface/searchtextoptions.md). + +**Return Values** + +An [`IDocTextSearcher`](/api/interface/idocument/idoctextsearcher.md) object. + +--- + +**Code Snippet** + +```typescript +const searcher = firstDoc.createTextSearcher("text",{caseSensitive:false}) +``` + +**Exception** + + Error Code | Error Message +--------|----------------------------------------------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. + diff --git a/_v3.2.1/api/interface/idocument/pdfsource.md b/_v3.2.1/api/interface/idocument/pdfsource.md new file mode 100644 index 0000000..cff8ffc --- /dev/null +++ b/_v3.2.1/api/interface/idocument/pdfsource.md @@ -0,0 +1,87 @@ +--- +layout: default-layout +needAutoGenerateSidebar: true +needGenerateH3Content: true +noTitleIndex: true +title: Dynamsoft Document Viewer API Reference - Interface PdfSource +keywords: Documentation, Dynamsoft Document Viewer, API Reference, Interface PdfSource +breadcrumbText: Interface PdfSource +description: Dynamsoft Document Viewer Documentation API Reference Interface PdfSource Page + +--- + +# PdfSource + +## Syntax + +```typescript +interface PdfSource extends Source { + convertMode: EnumConvertMode; + password?: string; + renderOptions?: { + renderAnnotations?: EnumAnnotationRenderMode; + resolution?: number; + maxWidth?: number; + maxHeight?: number; + renderGrayscale?: boolean; + }; +} +``` + +## Extends + +[`Source`]({{ site.api }}interface/idocument/source.html) + +## Attributes + +### convertMode + +Specify PDF convert mode. Please refer to [`EnumConvertMode`]({{ site.api }}enumeration-type/enumconvertmode.html). + +Default value: `Dynamsoft.DDV.EnumConvertMode.CM_AUTO` + +### password + +If a password is required to open the PDF, please set it here. + +Default value: `""`. + +### renderOptions + +#### renderAnnotations + +Specify how to load the annotations. Please refer to [`EnumAnnotationRenderMode`]({{ site.api }}enumeration-type/enumannotationrendermode.html). + +Only take effects when [`convertMode`](#convertmode) is set to `Dynamsoft.DDV.EnumConvertMode.CM_RENDERALL` or `Dynamsoft.DDV.EnumConvertMode.CM_AUTO`(`Dynamsoft.DDV.EnumConvertMode.CM_RENDERALL` in fact). + +Default value: `Dynamsoft.DDV.EnumAnnotationRenderMode.NO_ANNOTATIONS` + +#### resolution + +PDF DPI. Only affects rasterized text. Does not affect images which are extracted from the PDF file. + +Default value: 200 + +#### maxWidth + +Maximum width of the image to be rendered. + +In pixels. 0 means no limit. Default value: 0 + +#### maxHeight + +Maximum height of the image to be rendered. + +In pixels. 0 means no limit. Default value: 0 + +#### renderGrayscale + +Whether rasterize the PDF in grayscale. + +Default value: `false` + +Only take effects when [`convertMode`](#convertmode) is set to `Dynamsoft.DDV.EnumConvertMode.CM_RENDERALL` or `Dynamsoft.DDV.EnumConvertMode.CM_AUTO`(`Dynamsoft.DDV.EnumConvertMode.CM_RENDERALL` in fact). + +## Related + +- [`loadSource()`]({{ site.api }}interface/idocument/index.html#loadsource) \ No newline at end of file diff --git a/_v3.2.1/api/interface/infoobject.md b/_v3.2.1/api/interface/infoobject.md index 0f23024..2e49b25 100644 --- a/_v3.2.1/api/interface/infoobject.md +++ b/_v3.2.1/api/interface/infoobject.md @@ -7,6 +7,7 @@ title: Dynamsoft Document Viewer API Reference - Interface InfoOjbect keywords: Documentation, Dynamsoft Document Viewer, API Reference, Interface InfoObject breadcrumbText: Interface InfoObject description: Dynamsoft Document Viewer Documentation API Reference Interface InfoObject Page + --- # InfoObject diff --git a/_v3.2.1/api/interface/styleinterface/annotationdrawingstyleconfig.md b/_v3.2.1/api/interface/styleinterface/annotationdrawingstyleconfig.md index b14cbbf..ed39379 100644 --- a/_v3.2.1/api/interface/styleinterface/annotationdrawingstyleconfig.md +++ b/_v3.2.1/api/interface/styleinterface/annotationdrawingstyleconfig.md @@ -7,6 +7,7 @@ title: Dynamsoft Document Viewer API Reference - Interface AnnotationDrawingStyl keywords: Documentation, Dynamsoft Document Viewer, API Reference, Interface AnnotationDrawingStyleConfig breadcrumbText: Interface AnnotationDrawingStyleConfig description: Dynamsoft Document Viewer Documentation API Reference Interface AnnotationDrawingStyleConfig Page + --- # Interface diff --git a/_v3.2.1/api/namespace/ddv.md b/_v3.2.1/api/namespace/ddv.md new file mode 100644 index 0000000..ef58bc1 --- /dev/null +++ b/_v3.2.1/api/namespace/ddv.md @@ -0,0 +1,408 @@ +--- +layout: default-layout +needAutoGenerateSidebar: true +needGenerateH3Content: true +noTitleIndex: true +title: Dynamsoft Document Viewer API Reference - Namespace - Dynamsoft.DDV +keywords: Documentation, Dynamsoft Document Viewer, API Reference, Namespace, Dynamsoft.DDV +breadcrumbText: Dynamsoft.DDV +description: Dynamsoft Document Viewer Documentation API Reference Namespace Dynamsoft.DDV Page + +--- + +# Dynamsoft.DDV + +## Index + +**Handler Configuration** + +| API Name | Description | +| ------------------------------- | ------------------------------------------------- | +| [` setProcessingHandler()`](#static-setprocessinghandler) | Set a processing handler to the DDV system. | + +**Members** + +| API Name | Description | +| ------------------------------- | ------------------------------------------------- | +| [` documentManager`](#static-documentmanager) | [`DocumentManager`]({{ site.api }}class/documentmanager.html) instance. | +| [` annotationManager`](#static-annotationmanager) | [`AnnotationManager`]({{ site.api }}class/annotationmanager.html) instance. | + +**Classes** + +- [DocumentManager]({{ site.api }}class/documentmanager.html) +- [AnnotationManager]({{ site.api }}class/annotationmanager.html) +- [EditViewer]({{ site.api }}class/editviewer.html) +- [CaptureViewer]({{ site.api }}class/captureviewer.html) +- [PerspectiveViewer]({{ site.api }}class/perspectiveviewer.html) +- [BrowseViewer]({{ site.api }}class/browseviewer.html) +- [CustomViewer]({{ site.api }}class/customviewer.html) + +- Advanced + - [ImageFilter]({{ site.api }}class/advanced/imagefilter.html) + - [DocumentDetect]({{ site.api }}class/advanced/documentdetect.html) + +**Methods** + +| API Name | Description | +| ------------------------------- | ------------------------------------------------- | +| [` getDefaultUiConfig()`](#static-getdefaultuiconfig) | Get default UiConfig object. | +| [` addFonts()`](#static-addfonts) | Add font to library. | +| [` clearLastError()`](#static-clearlasterror) | Clear the last error or warning. | +| [` unload()`](#static-unload) | Unload all DDV resources. | + +**Properties** + +| API Name | Description | +| ------------------------------- | ------------------------------------------------- | +| [` lastError `](#static-lasterror) | Return the last error or warning. | + +**Events** + +| API Name | Description | +| -------- | -------------------------------------------------- | +| [` on()`](#static-on) | Bind a listener to the specified event. | +| [` off()`](#static-off) | Unbind event listener(s) from the specified event. | + +***Integrated Events*** + +| Event Name | Description | +| --------------------- | ------------------------------------ | +| [`error`](#error) | Triggered when any error occurs. | +| [`warning`](#warning) | Triggered when any warning occurs . | +| [`verbose`](#verbose) | Triggered when DDV is running. | +| [`info`](#info) | Triggered during various operations. | + +## Handler Configuration + +### `` setProcessingHandler() + +Set a processing handler to the DDV system. + +**Syntax** + +```typescript +static setProcessingHandler(handlerType: HandlerType, handler: any): void; +``` + +**Parameters** + +`handlerType`: The type of processing handler. + +A `HandlerType` can be one of two types. + +```typescript +type HandlerType = "documentBoundariesDetect"|"imageFilter"; +``` + +`handler`: The handler to set. Please refer to [IDocumentDetect]({{ site.api }}interface/idocumentdetect.html) and [IImageFilter]({{ site.api }}interface/iimagefilter.html). + +**Exception** + + Error Code | Error Message +--------|----------------------------------------------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. + -80103 | *XXX(API)*: The value for *XXX(ParameterName)* is not supported. + +**Remark** + +- Please configure the handler before creating +- If `documentBoundariesDetect` handler is not set, the default element `Dynamsoft.DDV.Elements.AutoDetect` will be disabled. +- If `imageFilter` handler is not set, the default element `Dynamsoft.DDV.Elements.Filter` will be disabled. +- [How to configure image filter]({{ site.features }}advanced/imagefilter.html) +- [How to configure boundaries detection]({{ site.features }}advanced/documentdetect.html) + +## Member + +### `` documentManager + +[`DocumentManager`]({{ site.api }}class/documentmanager.html) instance. + +**Code Snippet** + +```typescript +Dynamsoft.DDV.Core.license = "Your-License-String"; +Dynamsoft.DDV.Core.engineResourcePath = "https://cdn.jsdelivr.net/npm/dynamsoft-document-viewer@latest/dist/engine"; // lead to a folder containing the distributed WASM files +await Dynamsoft.DDV.Core.init(); + +const docManager = Dynamsoft.DDV.documentManager; +``` + +### `` annotationManager + +[`AnnotationManager`]({{ site.api }}class/annotationmanager.html) instance. + +**Code Snippet** + +```typescript +Dynamsoft.DDV.Core.license = "Your-License-String"; +Dynamsoft.DDV.Core.engineResourcePath = "https://cdn.jsdelivr.net/npm/dynamsoft-document-viewer@latest/dist/engine"; // lead to a folder containing the distributed WASM files +await Dynamsoft.DDV.Core.init(); + +const annotManager = Dynamsoft.DDV.annotationManager; +``` + + +## Methods + +| API Name | Description | +| ------------------------------- | ------------------------------------------------- | +| [` getDefaultUiConfig()`](#static-getdefaultuiconfig) | Get default UiConfig object. | +| [` clearLastError()`](#static-clearlasterror) | Clear the last error or warning. | +| [` unload()`](#static-unload) | Unload all DDV resources. | + +### `` getDefaultUiConfig() + +Get default UiConfig object. + +**Syntax** + +```typescript +static getDefaultUiConfig(viewerType: ViewerType): UiConfig | null; +``` + +**Parameters** + +`viewerType`: A `ViewerType` can be one of four types. + +```typescript +type ViewerType = "editViewer"|"captureViewer"|"perspectiveViewer"|"browseViewer"; +``` + + +**Return Values** + +The [default UiConfig]({{ site.ui }}default_ui.html) object for each kind of viewer. + +**Code Snippet** + +```typescript +const defaultEditUi = Dynamsoft.DDV.getDefaultUiConfig("editViewer"); +``` + +**Warning** + + Error Code | Error Message | API Return Value +--------|------------------------------------------------------------------------|---------------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | `null` + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. | `null` + -80103 | *XXX(API)*: The value for *XXX(ParameterName)* is not supported.| `null` + +### `` addFonts() + +Add font to library. You can fetch a font via an URL or use the [`queryLocalFonts()`](https://developer.mozilla.org/en-US/docs/Web/API/Window/queryLocalFonts) API to get the fonts installed on the local system. + +**Syntax** + +```typescript +addFonts(fonts: Blob[]): Promise; +``` + +**Parameters** + +`fonts`: Specify the fonts to add. + +**Return Values** + +Array of font names. + +**Exception** + + Error Code | Error Message + ---------- | ------------------------------------------------------------ + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. + + + +### `` clearLastError() + +Clear the last error or warning. + +**Syntax** + +```typescript +static clearLastError(): void; +``` + +**Remark** + +- Once called this method, [`lastError`](#static-lasterror) will return `undefined`. + +### `` unload() + +Unload all DDV resources. + +**Syntax** + +```typescript +static unload(): void; +``` + +## Properties + +| API Name | Description | +| ------------------------------- | ------------------------------------------------- | +| [` lastError `](#static-lasterror) | Return the last error or warning. | + +### `` lastError + +Return the last error or warning. + +**Syntax** + +```typescript +static readonly lastError: DDVError; +``` + +**Return Values** + +A [`DDVError`]({{ site.api }}interface/ddverror.html) object. + +## Events + +| API Name | Description | +| -------- | -------------------------------------------------- | +| [` on()`](#static-on) | Bind a listener to the specified event. | +| [` off()`](#static-off) | Unbind event listener(s) from the specified event. | + +### `` on() + +Bind a listener to the specified event. + +**Syntax** + +```typescript +static on(eventName: EventName, listener:(event:EventObject)=>void): void; +``` + +**Parameters** + +`eventName`: Specify the event name. It should be [an integrated event name](#integrated-events). + +`listener`: Specify the listener. + +**Code Snippet** + +```typescript +Dynamsoft.DDV.on("error", (e)=>{ + console.log(e.message, e.cause); +}); +``` + +**Exception** + + Error Code | Error Message +--------|----------------------------------------------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. + -80103 | *XXX(API)*: The value for *XXX(ParameterName)* is not supported. + +### `` off() + +Unbind event listener(s) from the specified event. + +**Syntax** + +```typescript +static off(eventName: EventName, listener?:(event:EventObject)=>void): void; +``` + +**Parameters** + +`eventName`: Specify the event name. It should be [an integrated event name](#integrated-events). + +`listener`: Specify the listener. If no listener is specified, unbind all event listeners from the specified event. + +**Code Snippet** + +```typescript +Dynamsoft.DDV.off("error"); +``` + +**Exception** + + Error Code | Error Message +--------|----------------------------------------------------- + -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. + -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. + -80103 | *XXX(API)*: The value for *XXX(ParameterName)* is not supported. + +### Integrated Events + +| Event Name | Description | +| --------------------- | ------------------------------------ | +| [`error`](#error) | Triggered when any error occurs. | +| [`warning`](#warning) | Triggered when any warning occurs. | +| [`verbose`](#verbose) | Triggered when DDV is running. | +| [`info`](#info) | Triggered during various operations. | + +#### error + +Triggered when any error occurs. + +**Callback** + +An EventObject which contains the detailed error info. + +**Attributes** + +[`DDVError`]({{ site.api }}interface/ddverror.html): Detailed error info. + +#### warning + +Triggered when any warning occurs. + +**Callback** + +An EventObject which contains the detailed warning info. + +**Attributes** + +[`DDVError`]({{ site.api }}interface/ddverror.html): Detailed warning info. + +#### verbose + +Triggered when DDV is running. + +**Callback** + +EventObject array which contain the detailed verbose info. + +**Example** + +```typescript +Dynamsoft.DDV.on("verbose", (...args) => { + console.log(...args); + if (args[0].cause) { + console.error(args[0].cause); + } +}); +``` + +#### info + +Triggered for any of the following tasks: + +- `init` +- `loadSource` +- `save` +- `filter` +- `perspective` +- `loadWasm` + +See [`InfoObject`]({{ site.api }}interface/infoobject.html) for details. + +**Callback** + +[`InfoObject`]({{ site.api }}interface/infoobject.html) which contains different attributes depending on the type of event. + +**Example** + +```js +DDV.on("info", (event) => { + if(event.type === "loadSource" && event.status === "Pending"){ + console.log("Begin loading file") + } +}) +``` \ No newline at end of file diff --git a/_v3.2.1/features/datamanagement/annotmanagement.md b/_v3.2.1/features/datamanagement/annotmanagement.md new file mode 100644 index 0000000..22d4cf3 --- /dev/null +++ b/_v3.2.1/features/datamanagement/annotmanagement.md @@ -0,0 +1,276 @@ +--- +layout: default-layout +needAutoGenerateSidebar: true +needGenerateH3Content: true +noTitleIndex: true +title: Dynamsoft Document Viewer Features - Annotation Management +keywords: Documentation, Dynamsoft Document Viewer, Features, Annotation Management +breadcrumbText: Annotation Management +description: Dynamsoft Document Viewer Documentation Features, Annotation Management +--- + +# Annotation Management + +Starting from DDV 2.0, annotation is supported. + +Annotations can be created using the built-in UI of Edit Viewer as well as code. This guide will focus on using the code. + +## Annotation creation + +### Supported annotation types + +Up to now, the annotation types supported by DDV are as follows: + +- [Rectangle]({{ site.api }}class/annotation/rectangle.html) +- [Ellipse]({{ site.api }}class/annotation/ellipse.html) +- [Polygon]({{ site.api }}class/annotation/polygon.html) +- [Polyline]({{ site.api }}class/annotation/polyline.html) +- [Line]({{ site.api }}class/annotation/line.html) +- [Ink]({{ site.api }}class/annotation/ink.html) +- [TextBox]({{ site.api }}class/annotation/textbox.html) +- [TextTypewriter]({{ site.api }}class/annotation/texttypewriter.html) +- [Stamp]({{ site.api }}class/annotation/stamp.html) +- [Highlight]({{ site.api }}class/annotation/highlight.html) +- [Underline]({{ site.api }}class/annotation/underline.html) +- [Strikeout]({{ site.api }}class/annotation/strikeout.html) + +### Create a specified type annotation instance + +To add an annotation to the page, first of all, you need to create an annotation instance. Take the rectangle annotation as an example, + +```typescript +// Given that editViewer is an existing instance of EditViewer and a document is currently open. +const pageUid = editViewer.indexToUid(0); +const rect = Dynamsoft.DDV.annotationManager.createAnnotation(pageUid, "rectangle"); // Create a default Rectangle annotation instance. +``` + +The following properties of the annotation can be accessed from the created instance. + +- Annotation Uid + + Each annotation possesses a unique annotation uid. + + ```typescript + const annotUid = rect.uid; + ``` + +- Page uid where the annotation is located + + ```typescript + const annotPageUid = rect.pageUid; + ``` + + if the annotation is deleted, the `pageUid` will return `''`. + +{% comment %} + +- Axis-aligned bounding box (AABB) + + ```typescript + const annotAabb = rect.aabb; + ``` + +{% endcomment %} + +- Creation date & Modification date + + ```typescript + const creationDate = rect.creationDate; //D:YYYYMMDDHHmmSSOHH'mm' + const modificationDate = rect.modificationDate; //D:YYYYMMDDHHmmSSOHH'mm' + ``` + + if the annotation is deleted, the `modificationDate` will return `''`. + + If the annotation is created but not be modified after adding, `modificationDate` equals to `creationDate`. + +### Modify the annotation options while creating + +If no specific options are passed during the creation of the annotation instance, the generated annotation will have default options. + +If you wish to create a custom-configured annotation, you can pass in the specified configuration during creation. + +For example, to create a rectangle annotation whose border color is red and background is green. + +```typescript +const rectOptions = { + borderColor: "red", + background: "green", +}; + +// Given that editViewer is an existing instance of EditViewer and a document is currently open. +const pageUid = editViewer.indexToUid(0); + +const rect = Dynamsoft.DDV.annotationManager.createAnnotation(pageUid, "rectangle", rectOptions); +``` + +### Modify the annotation options dynamically after creating + +After creating the annotation, if you want to dynamically modify its configuration, you can use `updateOptions()` method. + +For example, to modify an existing rectangle annotation. + +```typescript +const newRectOptions = { + borderWidth: 2.66, +}; + +rect.updateOptions(newRectOptions); +``` + +Even after the annotation has been created to the page by [`createAnnotation()`]({{ site.api }}class/annotationmanager.html#createAnnotation), updating the options will lead to instant changes in the displayed annotation on the page. + +### Create an annotation instance after image cropping + +After cropping, if no specific options are passed during the creation of the annotation instance, the generated annotation will use default options, which might result in it being invisible. + +If you want the annotation to be visible, you can pass specific configurations during its creation. + +For example, after cropping an image, if you wish to create a rectangle annotation at position (10, 10) within the visible area. + +```typescript +const pageData = await editViewer.currentDocument.getPageData(editViewer.getCurrentPageUid()); + +const rectOptions = { + x: pageData.cropBox.left + 10, + y: pageData.cropBox.top + 10, +}; + +// Given that editViewer is an existing instance of EditViewer and a document is currently open. +const pageUid = editViewer.indexToUid(0); + +const rect = Dynamsoft.DDV.annotationManager.createAnnotation(pageUid, "rectangle", rectOptions); +``` + +### More features + +#### Add image to the page by using Stamp Annotation + +Observing the structure of [`StampAnnotationOptions`]({{ site.api }}interface/annotationinterface/stampannotationoptions.html), the data type of stamp is `EnumStampIcon` or `Blob`. When stamp is set to `EnumStampIcon`, it indicates that the generated annotation will be displayed as a standard business stamp icon, with the default value being `DRAFT`. When stamp is set to `EnumStampIcon`, it indicates that the generated annotation will be displayed as a standard business stamp icon, with the default value being `DRAFT`. When stamp is set to a Blob, such as the blob of a custom image, it means the annotation will be displayed as an image. + +The supported types of standard business stamps are as follows: + +| EnumStampIcon | Corresponding stamp | +| ------------- | ------------------- | +| REJECTED | ![Stamp Rejected](/assets/imgs/stampRejected.png) | +| ACCEPTED | ![Stamp Accepted](/assets/imgs/stampAccepted.png) | +| INITAL_HERE | ![Stamp InitalHere](/assets/imgs/stampInitalHere.png) | +| SIGN_HERE | ![Stamp SignHere](/assets/imgs/stampSignHere.png) | +| WITNESS | ![Stamp Witness](/assets/imgs/stampWitness.png) | +| APPROVED | ![Stamp Approved](/assets/imgs/stampApproved.png) | +| NOT_APPROVED | ![Stamp NotApproved](/assets/imgs/stampNotApproved.png) | +| DRAFT | ![Stamp Draft](/assets/imgs/stampDraft.png) | +| FINAL | ![Stamp Final](/assets/imgs/stampFinal.png) | +| COMPLETED | ![Stamp Completed](/assets/imgs/stampCompleted.png) | +| CONFIDENTIAL | ![Stamp Confidential](/assets/imgs/stampConfidential.png) | +| VOID | ![Stamp Void](/assets/imgs/stampVoid.png) | + +If set to `blob`, the custom image will be added as the stamp. + +```typescript +var blob = /*Sample image blob*/; + +const stampOptions = { + stamp: blob, +}; + +// Given that editViewer is an existing instance of EditViewer and a document is currently open. +const pageUid = editViewer.indexToUid(0); + +const stamp = await Dynamsoft.DDV.annotationManager.createAnnotation(pageUid, "stamp", stampOptions); +``` + +#### Configure the styling for the part content of text within TextBox annotation or TextTypewriter annotation + +The `textContents` attribute in the [`TextBoxAnnotationOptions`]({{ site.api }}interface/annotationinterface/textboxannotationoptions.html) and [`TextTypewriterAnnotationOptions`]({{ site.api }}interface/annotationinterface/texttypewriterannotationoptions.html) accepts an array of [`TextContent`]({{ site.api }}interface/annotationinterface/textcontent.html), which means that even within the same text annotation, you can configure specified text content with different styles. + +For example, + +```typescript +const testTextContents = [ + { + content: "Dynamsoft Document Viewer ", + color: "red", + }, + { + content: "Annotation feature", + color: "green", + underline: true, + } +]; + +const textBoxAnnotationOptions = { + textContents: testTextContents, +}; + +// Given that editViewer is an existing instance of EditViewer and a document is currently open. +const pageUid = editViewer.indexToUid(0); + +const textBox = Dynamsoft.DDV.annotationManager.createAnnotation(pageUid, "textBox", textBoxAnnotationOptions); +``` + +## Delete annotation(s) + +- Delete all annotations which are located on the specified page using [`getAnnotationsByPage()`]({{ site.api }}class/annotationmanager.html#getannotationsbypage) and [`deleteAnnotations()`]({{ site.api }}class/annotationmanager.html#deleteannotations). + +```typescript +// Given that editViewer is an existing instance of EditViewer and a document is currently open. +const curPageUid = editViewer.getCurrentPageUid();; // Get the page uid of current page in the edit viewer + +const annotations = Dynamsoft.DDV.annotationManager.getAnnotationsByPage(curPageUid); + +const annotationUids = annotations.map(obj=>obj.uid); + +Dynamsoft.DDV.annotationManager.deleteAnnotations(annotationUids); +``` + +- Delete all annotations which are located in the specified doc using [`getAnnotationsByDoc()`]({{ site.api }}class/annotationmanager.html#getannotationsbydoc) and [`deleteAnnotations()`]({{ site.api }}class/annotationmanager.html#deleteannotations). + +```typescript +// Given that editViewer is an existing instance of EditViewer and a document is currently open. +const curDocUid = editViewer.currentDocument.uid; // Get the doc uid of current document which is open in the edit viewer + +const annotations = Dynamsoft.DDV.annotationManager.getAnnotationsByDoc(curDocUid); + +const annotationUids = annotations.map(obj=>obj.uid); + +Dynamsoft.DDV.annotationManager.deleteAnnotations(annotationUids); +``` + +- Delete selected annotations using [`getSelectedAnnotations`]({{ site.api }}class/editviewer.html#getselectedannotations) and [`deleteAnnotations()`]({{ site.api }}class/annotationmanager.html#deleteannotations). + +```typescript +// Given that editViewer is an existing instance of EditViewer and a document is currently open. +const annotations = editViewer.getSelectedAnnotations(); // Get the selected annotations + +const annotationUids = annotations.map(obj=>obj.uid); + +Dynamsoft.DDV.annotationManager.deleteAnnotations(annotationUids); +``` + +## Change layer of an annotation + +In the same page, annotations maintain a hierarchical relationship with each other. If you intend to alter the hierarchical level of an annotation, you can employ the following methods. + +- Bring forward using [`bringAnnotationForward()`]({{ site.api }}class/annotationmanager.html#bringannotationforward) + + ```typescript + Dynamsoft.DDV.annotationManager.bringAnnotationForward(rect.uid); + ``` + +- Send backward using [`sendAnnotationBackward()`]({{ site.api }}class/annotationmanager.html#sendannotationbackward) + + ```typescript + Dynamsoft.DDV.annotationManager.sendAnnotationBackward(rect.uid); + ``` + +- Bring to front using [`bringAnnotationToFront()`]({{ site.api }}class/annotationmanager.html#bringannotationtofront) + + ```typescript + Dynamsoft.DDV.annotationManager.bringAnnotationToFront(rect.uid); + ``` + +- Send to back using [`sendAnnotationToBack()`]({{ site.api }}class/annotationmanager.html#sendannotationtoback) + + ```typescript + Dynamsoft.DDV.annotationManager.sendAnnotationToBack(rect.uid); + ``` diff --git a/_v3.2.1/releasenotes/index.md b/_v3.2.1/releasenotes/index.md new file mode 100644 index 0000000..d47e217 --- /dev/null +++ b/_v3.2.1/releasenotes/index.md @@ -0,0 +1,391 @@ +--- +layout: default-layout +needAutoGenerateSidebar: true +needGenerateH3Content: true +noTitleIndex: true +title: Dynamsoft Document Viewer - Release Notes +keywords: Documentation, Dynamsoft Document Viewer, Release Notes +breadcrumbText: Release Notes +description: Dynamsoft Document Viewer Documentation Release Notes + +--- + +# Release Notes + +## 3.2.1 (03/10/2026) + +Updated third-party libraries to enhance security. + +## 3.2 (01/13/2026) + +### Improvements + +* Improved the context of search results, which now display the word before the searched word. +* Improved the rendering of selected annotations by reducing the number of items to draw. +* Improved the performance of selecting multiple annotations. +* Added a consistency check between the JavaScript and resource file versions. +* Added support for pinch-to-zoom under `textSelection` mode of `EditViewer` for mobile. +* Updated third-party libraries to enhance security. + +### Bug Fixes + +Fixed the text overflow issue in custom stamps. + + +## 3.1 (10/16/2025) + +### UX Changes + +For Edit Viewer: + +* Added support for panning images in `textSelection` mode. +* Text markup annotations can be modified after being cropped. +* Return to `pan` mode if `textSelection` mode is turned off on mobile by clicking the icon. +* Added support for returning to `pan` mode by pressing ESC. + +For Edit Viewer and Browse Viewer: + +When the cursor is around the viewer's edges when selecting text or dragging the thumbnails, auto-scrolling will be triggered. It can be configured using the [`enableAutoScrollForTextSelection`](/api/interface/editviewerconfig.md#enableautoscrollfortextselection) property for Edit Viewer and the [`enableAutoScrollForDragPages`](/api/interface/browseviewerconfig.md#enableautoscrollfordragpages) property for Browse Viewer. + +### API Changes + +Added interfaces for better UI customizability. + +* [`getAnnotationDrawingStyle()`](/api/class/editviewer.md#getannotationdrawingstyle) method for Edit Viewer +* [`undoRedoStateChanged`](/api/class/editviewer.md#undoredostatechanged) event for Edit Viewer +* [`annotationDrawingStyleChanged`](/api/class/editviewer.md#annotationdrawingstylechanged) event for Edit Viewer +* [`scroll`](/api/class/editviewer.md#scroll) event for Edit Viewer and Browse Viewer +* [`paginationChanged`](/api/class/editviewer.md#paginationchanged) event for all the viewers +* [`cropMode`](/api/class/editviewer.md#cropmode) property for Edit Viewer. The [`crop()`](/api/class/editviewer.md#crop) method of Edit Viewer will choose which images to crop based on the `cropMode` if no image indices are passed. + +### Improvements + +* Increased the FPS of rendering documents, especially documents with lots of pages. +* Optimized the performance of `updateOptions()`. +* Moved the magnifier into a separate layer to improve the performance and avoid being blocked. + +### Bug Fixes + +* Fixed a bug where changes of the layout will reset the position of the current document page to its top-left. +* Fixed a bug where the text is shifted if the PDF's media box has shifts. + +## 3.0 (07/08/2025) + +### Features Highlights + +* Added support for text selection. We can now copy and annotate selected text. +* Added three text markup annotations: `highlight`, `strikeout` and `underline`. +* Added support for text search. + +### API Changes + +* Added classes for text markup annotations. + * [`Highlight`](/api/class/annotation/highlight.md) + * [`Underline`](/api/class/annotation/underline.md) + * [`Strikeout`](/api/class/annotation/strikeout.md) +* Added interfaces to set up text markup annotations. + * [`HighlightAnnotationOptions`](/api/interface/annotationinterface/highlightannotationoptions.md) + * [`UnderlineAnnotationOptions`](/api/interface/annotationinterface/underlineannotationoptions.md) + * [`StrikeoutAnnotationOptions`](/api/interface/annotationinterface/strikeoutannotationoptions.md) + * [`HighlightStyle`](/api/interface/annotationinterface/highlightstyle.md) + * [`UnderlineStyle`](/api/interface/annotationinterface/underlinestyle.md) + * [`StrikeoutStyle`](/api/interface/annotationinterface/strikeoutstyle.md) + * [`RectXY`](/api/interface/rectxy.md) +* Added new [tool mode](/api/class/editviewer.md#toolmode) for `EditViewer`: `textSelection`. +* Added new [annotation modes](/api/class/editviewer.md#annotationmode) for `EditViewer`: `highlight`, `strikeout` and `underline`. +* Added new buttons in [`ToolbarConfig`](/api/interface/annotationinterface/toolbarconfig.md): `copy`, `highlight`, `strikeout` and `underline`. +* Added new [elements](/ui/default_elements.md) for `EditViewer`: + * TextSelectionMode + * TextSearchPanelSwitch + * TextSearchPanel + * HighlightAnnotation + * UnderlineAnnotation + * StrikeoutAnnotation +* Added text selection and search methods and events for [`EditViewer`](/api/class/editviewer.md). +* Added an [`IDocTextSearcher`](/api/interface/idocument/idoctextsearcher.md) interface that can be created using [`createTextSearcher()`](/api/interface/idocument/index.md#createtextsearcher) of [`IDocument`](/api/interface/idocument/index.md). +* Added [`isPageModified()`](/api/interface/idocument/index.md#ispagemodified) method to detect whether a page has been modified. +* Added [`getVisiblePagesInfo()`](/api/class/editviewer.md#getvisiblepagesinfo) for viewers. +* Added new events for viewers. +* Updated [`IPageData`](/api/interface/ipagedata.md) to use Promise functions for computing-intensive operations. +* Updated [`updatePage()`](/api/interface/idocument/index.md#updatepage) to allow updating a page with PDF page content that has annotations. +* Updated [`addFonts()`](/api/namespace/ddv.md#static-addfonts) to return an array of the names of added fonts. +* Updated [`DisplayTextConfig`](/api/interface/displaytextconfig.md) for new elements. +* Removed the options parameter of [`getDefaultUiConfig()`](/api/namespace/ddv.md#static-getdefaultuiconfig). + +### Improvements + +* Fixed the ineffective quality parameter of [`saveToJpeg()`](/api/interface/idocument/index.md#savetojpeg) if a page is unmodified. +* Improved cursor styles. +* Improved the performance of resaving a large PDF file. + + +## 2.1 (12/03/2024) + +Version 2.1 of Dynamsoft Document Viewer comes with a suite of exciting new features, improvements to existing features, and performance optimizations. + +Dynamsoft Document Viewer now comes with **massively improved performance** for working with huge documents with a large number of high resolution images. Users can expect to load, edit, annotate, and export massive documents with ease. + + + +### New Features + +- Added `enableMagnifier`, which provides a corner magnifier in the [Edit Viewer]({{ site.api }}interface/editviewerconfig.html#enablemagnifier) and [Perspective Viewer]({{ site.api }}interface/perspectiveviewerconfig.html#enablemagnifier). This magnifier creates a zoomed-in view of the selected area to allow for more precise adjustments on touchscreen devices. + +- Added keyboard shortcuts for document management. These shortcuts are controlled by [`KeyboardInteractionConfig`]({{ site.api }}interface/keyboardinteractionconfig.html). All shortcuts are available for the Edit Viewer, and only the navigation and page selection shortcuts are available for the Browse Viewer: + - Undo/redo + - Copy/cut/paste + - Annotation/page selection + - Scrolling/navigation + - Cancel/delete + +- Added drag-and-drop image loading with the new `enableLoadSourceByDrag` configuration property for the [Edit]({{ site.api }}interface/editviewerconfig.html#enableloadsourcebydrag), [Browse]({{ site.api }}interface/browseviewerconfig.html#enableloadsourcebydrag), and [Perspective]({{ site.api }}interface/perspectiveviewerconfig.html#enableloadsourcebydrag) Viewers (enabled by default). + +- The new [`setAnnotationDrawingStyle`]({{ site.api }}class/editviewer.html#setannotationdrawingstyle) method can now be used when creating annotations to set its default drawing style, for example, to set a custom image to use as the default stamp annotation. + +- Added the following flags to restrict annotation editing actions: [`noResize`]({{ site.api }}interface/annotationinterface/flags.html#noresize), [`noRotate`]({{ site.api }}interface/annotationinterface/flags.html#norotate), [`noMove`]({{ site.api }}interface/annotationinterface/flags.html#nomove). These flags are preserved when saving to PDF, and respected when importing into DDV from PDF. + +- Added a [`flattened`]({{ site.api }}class/annotation/rectangle.html#flattened) property getter/setter to annotation objects, which flattens the **individual** annotation onto the base image layer. This behavior is also preserved upon saving to PDF. For example, a rectangle annotation may be flattened with [`Rectangle.flattened = true`]({{ site.api }}class/annotation/rectangle.html#flattened). + +- Added informative task progression messaging using [`InfoObject`]({{ site.api }}interface/infoobject.html) for event listening. `InfoObject` provides different details for different types. + +### Improvements + +- Improved general performance. + +- Added support for processing much larger documents (over 1000 pages). See performance improvements compared to version 2.0: + +{% comment %} +[Performance chart](/assets/imgs/version-2.1-release-performance-chart.png) + + +Win10 i5-7400 CPU @ 3.00GHz + +| Document Type | Number of Pages | File Size | Load Time | Peak Memory Use for Loading | Save Time | Peak Memory Use for Saving | +| --------------- | ------------------| ------------|------------|------------|------------|------------------------------------------------------------ | +|Image PDF[96DPI 2160x3840 convertMode ImageOnly]| 100| 92.1MB |1.3s |650MB|1.33s|780MB| +| |500 |460MB |4.5s|890MB|12.2s|1934MB| +| |1000|921MB|9.7s|960MB|24.07s|4GB +|Text PDF[A4 convertMode render] |100|2.61MB| 0.411s|330MB|0.290s| 340MB| +| |500|13.0MB|1.185s|446MB| 2.427s|556MB| +| |1000|26.1MB|2.777s|540MB|4.861s|590MB| +{% endcomment %} + Win10 i5-7400 CPU @ 3.00GHz + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Document TypeNumber of PagesFile SizeLoad TimePeak Memory Use for LoadingSave TimePeak Memory Use for Saving
        Image PDF[96DPI 2160x3840 convertMode ImageOnly]10092.1MB1.3s650MB1.33s780MB
        500460MB4.5s890MB12.2s1934MB
        1000921MB9.7s960MB24.07s4GB
        Text PDF[A4 convertMode render]1002.61MB0.411s330MB0.290s340MB
        50013.0MB1.185s446MB2.427s556MB
        100026.1MB2.777s540MB4.861s590MB
        + +- The annotation toolbar and annotation palette in the Edit Viewer are now optional and can be toggled with [`toolbarConfig`]({{ site.api }}interface/annotationinterface/toolbarconfig.html) and [`paletteConfig`]({{ site.api }}interface/annotationinterface/paletteconfig.html) from [`annotationConfig`]({{ site.api }}interface/annotationconfig.html). + +- Removed page scrolling with mouse scroll wheel and touchscreen swiping in single page mode. + +- Improved page selection performance in the thumbnail gallery. + +## 2.0 (08/20/2024) + +**We are excited to introduce version 2.0, which focuses on adding a powerful new annotation feature. This release includes comprehensive support for various types of annotations, new APIs for managing annotations, and advanced UI capabilities for seamless interaction.** + +Supported Annotation Types: + +- [Rectangle]({{ site.api }}class/annotation/rectangle.html) +- [Ellipse]({{ site.api }}class/annotation/ellipse.html) +- [Polygon]({{ site.api }}class/annotation/polygon.html) +- [Polyline]({{ site.api }}class/annotation/polyline.html) +- [Line]({{ site.api }}class/annotation/line.html) +- [Ink]({{ site.api }}class/annotation/ink.html) +- [TextBox]({{ site.api }}class/annotation/textbox.html) +- [TextTypewriter]({{ site.api }}class/annotation/texttypewriter.html) +- [Stamp]({{ site.api }}class/annotation/stamp.html) + +### Built-in UI for Annotation + +#### Direct Annotation Operations in the UI + +- Add, select, and delete annotations +- Drag, resize, and rotate selected annotations +- Real-time editing of annotation styles using the palette + +#### New Built-in Elements + +- Added built-in elements to enhance UI configuration flexibility. + +### New APIs for Annotation + +- Added the namespace [Dynamsoft.DDV.annotationManager]({{ site.api }}class/annotationmanager.html) and APIs for annotation management: + + - Create, delete, and retrieve annotations based on various conditions + - Adjust annotation hierarchy + - Handle events triggered by annotation operations + +- Added the property [annotationConfig]({{ site.api }}interface/editviewerconstructoroptions.html#annotationConfig) to EditViewerConstructorOptions for configuring the annotations in the viewer, including the toolbar, palette, and default annotation style: + + - [annotationSelectionStyle]({{ site.api }}interface/annotationconfig.html#annotationSelectionStyle): Defines the style of annotation selection. + - [inkCreateDelay]({{ site.api }}interface/annotationconfig.html#inkCreateDelay): Specifies the delay for ink creation to support annotations created in multiple strokes. + - [showOnTopWhenSelected]({{ site.api }}interface/annotationconfig.html#showOnTopWhenSelected): Determines whether the selected annotation should be displayed on the top layer. + +- Added the method [` addFonts()`]({{ site.api }}namespace/ddv.html#static-addfonts) to add fonts to the library. + +- Added the method [`selectAnnotations()`]({{ site.api }}class/editviewer.html#selectannotations) to select the specified annotation(s) on the current page. + +- Added the method [`getSelectedAnnotations()`]({{ site.api }}class/editviewer.html#getselectedannotations) to retrieve selected annotation(s). + +- Add properties [`mediaBox`]({{ site.api }}interface/idocument/pagedata.html#mediaBox) and [`cropBox`]({{ site.api }}interface/idocument/pagedata.html#cropBox) to [`PageData`]({{ site.api }}interface/idocument/pagedata.html) for accurate annotation position calculation. + +- Added the property [`annotationMode`]({{ site.api }}class/editviewer.html#annotationmode) to specify or return the annotation mode of the viewer. + +- Add the property `saveAnnotation` to the interfaces [`SavePngSettings`]({{ site.api }}interface/idocument/savepngsettings.html), [`SaveJpegSettings`]({{ site.api }}interface/idocument/savejpegsettings.html), or [`SaveTiffSettings`]({{ site.api }}interface/idocument/savetiffsettings.html) to determine whether annotations are saved as part of the image when calling [`document.saveToPng()`]({{ site.api }}interface/idocument/index.html#saveToPng), [`document.saveToJpeg()`]({{ site.api }}interface/idocument/index.html#saveToJpeg), or [`document.saveToTiff()`]({{ site.api }}interface/idocument/index.html#saveToTiff). + +- Added the property [`saveAnnotation`]({{ site.api }}interface/idocument/savepdfsettings.html#saveAnnotation) to the interface [`SavePdfSettings`]({{ site.api }}interface/idocument/savepdfsettings.html) to configure whether annotations should be saved when [`document.saveToPdf()`]({{ site.api }}interface/idocument/index.html#saveToPdf) is called. + +- Add the parameter [`defaultUiConfigOptions`]({{ site.api }}interface/defaultuiconfigoptions.html) to [` getDefaultUiConfig()`]({{ site.api }}namespace/ddv.html#static-getdefaultuiconfig) to retrieve configurations including annotations. + +- Add the parameter [`printSettings`]({{ site.api }}interface/idocument/printsettings.html) to the [`document.print()`]({{ site.api }}interface/idocument/index.html#print) to specify whether printable annotations should be included in the print. + +- Added the type `annotation` to [`ToolMode`]({{ site.api }}class/editviewer.html#toolMode) to enable a mode that allows annotations to be manipulated via the UI. + +- Added the type `annotationSelectionStyle` to [`EditViewerStyleName`]({{ site.api }}class/editviewer.html#getStyle) for retrieving or updating the annotation selection style. + +### Other New APIs + +Additionally, we've optimized performance and added several new features to enhance the overall user experience. + +- Added the property [`password`]({{ site.api }}interface/idocument/savepdfsettings.html#password) to the interface [`SavePdfSettings`]({{ site.api }}interface/idocument/savepdfsettings.html) for configuring the password of the PDF file to save when [`document.saveToPdf()`]({{ site.api }}interface/idocument/index.html#saveToPdf) is called. + +- Added the property [`imageScaleFactor`]({{ site.api }}interface/idocument/savepdfsettings.html#imageScaleFactor) to the interface [`SavePdfSettings`]({{ site.api }}interface/idocument/savepdfsettings.html) for configuring the image scale factor of the PDF file to be saved when [`document.saveToPdf()`]({{ site.api }}interface/idocument/index.html#saveToPdf) is called. + +### Improved + +- Optimize the display effect of images in thumbnails. +- Optimize the interactive experience of scaling. +- Modified the type of [`PdfSource.renderOptions.renderAnnotations`]({{ site.api }}interface/idocument/pdfsource.html#renderAnnotations) to support reading annotations. +- The method `openDocument()` supports the UID or the document object. This affects the `openDocument()` method in the [`EditViewer`]({{ site.api }}class/editviewer.html#openDocument), [`PerspectiveViewer`]({{ site.api }}class/perspectiveviewer.html#openDocument), [`CaptureViewer`]({{ site.api }}class/captureviewer.html#openDocument), and [`BrowseViewer`]({{ site.api }}class/browseviewer.html#openDocument) classes. + +### Changed + +- Change the length unit from pixel to point for functions and events related to cropping, for example, [`crop()`]({{ site.api }}class/editviewer.html#crop), [`getCropRect()`]({{ site.api }}class/editviewer.html#getCropRect), [`setCropRect()`]({{ site.api }}class/editviewer.html#setCropRect), [`cropRectDrawn`]({{ site.api }}class/editviewer.html#cropRectDrawn), [`cropRectDeleted`]({{ site.api }}class/editviewer.html#cropRectDeleted),[`cropRectModified`]({{ site.api }}class/editviewer.html#cropRectModified). +- Change the units of the parameters pageWidth and pageHeight in the method [`insertBlankPage`]({{ site.api }}interface/idocument/index.html#insertblankpage) from inches to points. +- The related date string format change shifts from format D:YYYYMMDDHHmmSS to D:YYYYMMDDHHmmSSOHH'mm'. + +## 1.1 (01/12/2024) + +### Improved + +- Optimized compatibility with browsers. [>> Detail]({{ site.gettingstarted }}sys_requirement.html#supported-browsers) + +### Added + +- Added the namespace [`Dynamsoft.DDV.Core`]({{ site.api }}namespace/ddv_core.html). + +- Added the property [`license`]({{ site.api }}namespace/ddv_core.html#license) to specify the license string. + +- Added the property [`engineResourcePath`]({{ site.api }}namespace/ddv_core.html#engineresourcepath) to specify the path leading to a folder containing the distributed WASM files. + +- Added the property [`deviceFriendlyName`]({{ site.api }}namespace/ddv_core.html#devicefriendlyname) to specify a human-readable name for the device which corresponds to its UUID. + +- Added the method [`loadWasm()`]({{ site.api }}namespace/ddv_core.html#loadwasm) to load WASM modules before initializing. + +- Added the method [`init()`]({{ site.api }}namespace/ddv_core.html#init) to initialize DDV. + +- Added the method [`insertBlankPage()`]({{ site.api }}interface/idocument/index.html#insertblankpage) to insert a blank page to the document. + +### Removed + +The following API is removed. + +| API Name | Notes | +| ------------------------- | ------------------------------------------------------------ | +| `Dynamsoft.DDV.setConfig()` | Use [`Dynamsoft.DDV.Core.license`]({{ site.api }}namespace/ddv_core.html#license), [`Dynamsoft.DDV.Core.engineResource`]({{ site.api }}namespace/ddv_core.html#engineresourcepath), [`Dynamsoft.DDV.Core.deviceFriendlyName`]({{ site.api }}namespace/ddv_core.html#devicefriendlyname), [`Dynamsoft.DDV.Core.init()`]({{ site.api }}namespace/ddv_core.html#init) instead. | + +## 1.0.0 (12/26/2023) + +Dynamsoft Document Viewer (DDV) is a versatile SDK designed to offer a range of viewers for configuring and executing various document processing workflows. + +### Highlights + +#### Efficient Data Management + +Organize, retrieve, and manage documents and pages efficiently: +- Document Management: Document creation/deletion/merging, etc. +- Page management: Pages in documents loading/saving/deleting/moving, etc. + +#### Various Viewers + +Various kinds of viewers implement different document processing flows: +- Edit Viewer: Edit the pages in document, such as, rotating, cropping, filtering, etc. and adjust the layout of the display. +- Capture Viewer: Control camera, play video stream, and capture the images from camera. +- Perspective Viewer: Do page boundaries manual adjustment & perspective transformation. +- Browse Viewer: Display pages in multiple-mode, pages can be multiple selected. +- Custom Viewer: No built-in UI or functionality, which is used for creating your own viewer. + +#### Flexible Customization + +Besides using the default user interface and viewer directly, developers can easily and flexibly customize them: +- [User Interface](https://www.dynamsoft.com/document-viewer/docs/ui/index.html): Layout, elements +- [Viewer](https://www.dynamsoft.com/document-viewer/docs/viewer/index.html): Styles, viewer properties + +#### Advanced Features + +DDV provides methods to access document boundaries detection and image filter algorithms. +- [Image filter](https://www.dynamsoft.com/document-viewer/docs/features/advanced/imagefilter.html): Image filter algorithm which is used by Filter element in Edit Viewer. +- [Document detection](https://www.dynamsoft.com/document-viewer/docs/features/advanced/documentdetect.html): Document boundaries detection algorithm which is used during capturing images. Recommend using [Dynamsoft Document Normalizer](https://www.dynamsoft.com/document-normalizer/docs/web/programming/javascript/api-reference/document-normalizer-module.html?lang=javascript). diff --git a/_v3.2.1/ui/default_elements.md b/_v3.2.1/ui/default_elements.md index a554c1e..f84775c 100644 --- a/_v3.2.1/ui/default_elements.md +++ b/_v3.2.1/ui/default_elements.md @@ -7,6 +7,7 @@ title: Dynamsoft Document Viewer User Interface - Built-in Elements keywords: Documentation, Dynamsoft Document Viewer, User Interface, Built-in Elements breadcrumbText: Built-in Elements description: Dynamsoft Document Viewer Documentation User Interface Built-in Elements part + --- From ef6049f20504d1c2965bde643ceb75683d78443a Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Fri, 10 Apr 2026 16:35:27 +0800 Subject: [PATCH 34/49] include sidelist-apis-v3.2.1.html --- _data/full_tree.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/_data/full_tree.yml b/_data/full_tree.yml index 655fc59..3ae6998 100644 --- a/_data/full_tree.yml +++ b/_data/full_tree.yml @@ -12,4 +12,5 @@ tree_file_list: - sidelist-apis-v1.0.0.html - sidelist-apis-v1.1.html - sidelist-apis-v2.1.html + - sidelist-apis-v3.2.1.html From ed32bc35d86e74e92f6a2449cbbbc7c563283a9a Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Thu, 16 Apr 2026 13:27:16 +0800 Subject: [PATCH 35/49] add redaction to noMove = true list --- api/interface/annotationinterface/flags.md | 1 + 1 file changed, 1 insertion(+) diff --git a/api/interface/annotationinterface/flags.md b/api/interface/annotationinterface/flags.md index 458ef48..c6c6b43 100644 --- a/api/interface/annotationinterface/flags.md +++ b/api/interface/annotationinterface/flags.md @@ -45,6 +45,7 @@ For the following annotations, it is not effective and the default value is `tru * [`Highlight`](/api/class/annotation/highlight.md) * [`Strikeout`](/api/class/annotation/strikeout.md) * [`Underline`](/api/class/annotation/underline.md) +* [`Redaction`](/api/class/annotation/redaction.md) ### noView From c3ed7795354b9f61ac405b618961896eea0ec767 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Thu, 16 Apr 2026 13:30:22 +0800 Subject: [PATCH 36/49] list error -80328 for methods --- api/class/annotation/redaction.md | 7 +++++++ api/class/annotationmanager.md | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/api/class/annotation/redaction.md b/api/class/annotation/redaction.md index a72d893..8026438 100644 --- a/api/class/annotation/redaction.md +++ b/api/class/annotation/redaction.md @@ -179,3 +179,10 @@ redaction.updateOptions(options); // Update the background of the redaction to r -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | `false` -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. | `false` -80323 | The redaction annotation has already been applied. | `false` + +**Exception** + + Error Code | Error Message +--------|----------------------------------------------------- + -80326 | The annotation has already been deleted. + -80328 | Rectangle-type redaction requires exactly one rect. \ No newline at end of file diff --git a/api/class/annotationmanager.md b/api/class/annotationmanager.md index b4645a2..cb72734 100644 --- a/api/class/annotationmanager.md +++ b/api/class/annotationmanager.md @@ -151,7 +151,7 @@ The instance of annotation. Please refer to [Annotation](/api/class/annotation/i -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. -80103 | *XXX(API)*: The value for *XXX(ParameterName)* is not supported. -80105 | *XXX(API)*: The specified page(s) do not exist. - + -80328 | Rectangle-type redaction requires exactly one rect. ### getAnnotationsByUids() From 559c35f8def9d24ac53dfd0c647ac04bbf4dfa8c Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Thu, 16 Apr 2026 13:33:10 +0800 Subject: [PATCH 37/49] add description for redaction toolmode --- api/class/editviewer.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/api/class/editviewer.md b/api/class/editviewer.md index 321ac4b..7a3b834 100644 --- a/api/class/editviewer.md +++ b/api/class/editviewer.md @@ -531,6 +531,8 @@ type ToolMode = "pan" | "crop" | "annotation" | "textSelection" | "redaction"; `textSelection`: A mode that allows selecting text to be manipulated via the UI. +`redaction`: A mode that allows marking areas or pages for redaction. + **Code Snippet** ```typescript From 550989ea4c36279e68bc0bedaa5858904de2826a Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Thu, 16 Apr 2026 13:34:08 +0800 Subject: [PATCH 38/49] fix link to redaction style in annotationdrawingstyleconfig --- api/interface/styleinterface/annotationdrawingstyleconfig.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/interface/styleinterface/annotationdrawingstyleconfig.md b/api/interface/styleinterface/annotationdrawingstyleconfig.md index 14f712b..ab79dbc 100644 --- a/api/interface/styleinterface/annotationdrawingstyleconfig.md +++ b/api/interface/styleinterface/annotationdrawingstyleconfig.md @@ -78,4 +78,4 @@ The default drawing style of the strikeout annotation - see [`StrikeoutStyle`](/ ### redaction -The default drawing style of redaction annotation - see [`RedactionStyle`](/api/interface/annotationinterface/rectanglestyle.md) for more details. If not set, this uses the default values of `RedactionStyle`. +The default drawing style of redaction annotation - see [`RedactionStyle`](/api/interface/annotationinterface/redactionstyle.md) for more details. If not set, this uses the default values of `RedactionStyle`. From e24dd6dd5901563b025201bcde11824180e8c292 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Thu, 16 Apr 2026 13:36:55 +0800 Subject: [PATCH 39/49] add redaction-related tooltip --- api/interface/tooltip.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/api/interface/tooltip.md b/api/interface/tooltip.md index 9662c13..898794c 100644 --- a/api/interface/tooltip.md +++ b/api/interface/tooltip.md @@ -86,6 +86,10 @@ interface Tooltip { SendToBack?: string; TextSearchPanelSwitch?: string; TextSelectionMode?: string; + RedactPages?: string; + RedactionApply?: string; + RedactionMode?: string; + RedactionSet?: string; } ``` From fea70d215731650fc9b0025dd12643f9f5a8ee10 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Thu, 16 Apr 2026 13:38:10 +0800 Subject: [PATCH 40/49] add redaction-related display text --- api/interface/displaytextconfig.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/api/interface/displaytextconfig.md b/api/interface/displaytextconfig.md index 573b8f7..5c5ec5a 100644 --- a/api/interface/displaytextconfig.md +++ b/api/interface/displaytextconfig.md @@ -103,6 +103,13 @@ interface DisplayTextConfig { SendToBack?: string; TextSearchPanelSwitch?: string; TextSelectionMode?: string; + RedactionSet_RedactionMode?: string; + RedactionSet_RedactionApply?: string; + RedactionSet_RedactPages?: string; + RedactPages_Current?: string; + RedactPages_Specific?: string; + RedactPages_Ok?: string; + RedactPages_Cancel?: string; } ``` From 8bebbd5aedd76f1376747f1a3d69b88a5b556255 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Thu, 16 Apr 2026 13:41:23 +0800 Subject: [PATCH 41/49] add -80326 to exception for annotation's updateOptions --- api/class/annotation/ellipse.md | 7 +++++++ api/class/annotation/highlight.md | 6 ++++++ api/class/annotation/ink.md | 7 +++++++ api/class/annotation/line.md | 7 +++++++ api/class/annotation/polygon.md | 7 +++++++ api/class/annotation/polyline.md | 7 +++++++ api/class/annotation/rectangle.md | 7 +++++++ api/class/annotation/stamp.md | 7 +++++++ api/class/annotation/strikeout.md | 7 +++++++ api/class/annotation/textbox.md | 7 +++++++ api/class/annotation/texttypewriter.md | 7 +++++++ api/class/annotation/underline.md | 7 +++++++ 12 files changed, 83 insertions(+) diff --git a/api/class/annotation/ellipse.md b/api/class/annotation/ellipse.md index 48f402b..5aa3236 100644 --- a/api/class/annotation/ellipse.md +++ b/api/class/annotation/ellipse.md @@ -207,3 +207,10 @@ ellipse.updateOptions(ellipseOptions); // Update the background of the ellipse t --------|-----------------------------------------------------|---------------------- -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | `false` -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. | `false` + + +**Exception** + + Error Code | Error Message +--------|----------------------------------------------------- + -80326 | The annotation has already been deleted. diff --git a/api/class/annotation/highlight.md b/api/class/annotation/highlight.md index a9c6aa1..7f6a480 100644 --- a/api/class/annotation/highlight.md +++ b/api/class/annotation/highlight.md @@ -196,3 +196,9 @@ highlight.updateOptions(newOptions); // Update the annotation. --------|-----------------------------------------------------|---------------------- -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | `false` -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. | `false` + +**Exception** + + Error Code | Error Message +--------|----------------------------------------------------- + -80326 | The annotation has already been deleted. diff --git a/api/class/annotation/ink.md b/api/class/annotation/ink.md index 0df9af2..22640af 100644 --- a/api/class/annotation/ink.md +++ b/api/class/annotation/ink.md @@ -202,3 +202,10 @@ ink.updateOptions(inkOptions); // Update the border color of the ink to red. --------|-----------------------------------------------------|---------------------- -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | `false` -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. | `false` + +**Exception** + + Error Code | Error Message +--------|----------------------------------------------------- + -80326 | The annotation has already been deleted. + \ No newline at end of file diff --git a/api/class/annotation/line.md b/api/class/annotation/line.md index 64420fa..e7df6f0 100644 --- a/api/class/annotation/line.md +++ b/api/class/annotation/line.md @@ -205,3 +205,10 @@ line.updateOptions(lineOptions); // Update the line ending of the line to open. --------|-----------------------------------------------------|---------------------- -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | `false` -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. | `false` + +**Exception** + + Error Code | Error Message +--------|----------------------------------------------------- + -80326 | The annotation has already been deleted. + \ No newline at end of file diff --git a/api/class/annotation/polygon.md b/api/class/annotation/polygon.md index 532e137..c597b02 100644 --- a/api/class/annotation/polygon.md +++ b/api/class/annotation/polygon.md @@ -207,3 +207,10 @@ polygon.updateOptions(polygonOptions); // Update the background of the polygon t --------|-----------------------------------------------------|---------------------- -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | `false` -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. | `false` + +**Exception** + + Error Code | Error Message +--------|----------------------------------------------------- + -80326 | The annotation has already been deleted. + \ No newline at end of file diff --git a/api/class/annotation/polyline.md b/api/class/annotation/polyline.md index 955faa3..8410ee0 100644 --- a/api/class/annotation/polyline.md +++ b/api/class/annotation/polyline.md @@ -205,3 +205,10 @@ polyline.updateOptions(polylineOptions); // Update the line ending of the polyli --------|-----------------------------------------------------|---------------------- -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | `false` -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. | `false` + +**Exception** + + Error Code | Error Message +--------|----------------------------------------------------- + -80326 | The annotation has already been deleted. + \ No newline at end of file diff --git a/api/class/annotation/rectangle.md b/api/class/annotation/rectangle.md index 30e9f86..d672c63 100644 --- a/api/class/annotation/rectangle.md +++ b/api/class/annotation/rectangle.md @@ -207,3 +207,10 @@ rect.updateOptions(rectOptions); // Update the background of the rectangle to re --------|-----------------------------------------------------|---------------------- -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | `false` -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. | `false` + +**Exception** + + Error Code | Error Message +--------|----------------------------------------------------- + -80326 | The annotation has already been deleted. + \ No newline at end of file diff --git a/api/class/annotation/stamp.md b/api/class/annotation/stamp.md index c81fd1f..da7412a 100644 --- a/api/class/annotation/stamp.md +++ b/api/class/annotation/stamp.md @@ -203,3 +203,10 @@ await stamp.updateOptions(stampOptions); // Update the stamp icon to 'APPROVED'. --------|-----------------------------------------------------|---------------------- -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | `false` -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. | `false` + +**Exception** + + Error Code | Error Message +--------|----------------------------------------------------- + -80326 | The annotation has already been deleted. + \ No newline at end of file diff --git a/api/class/annotation/strikeout.md b/api/class/annotation/strikeout.md index de5eec5..e473e1c 100644 --- a/api/class/annotation/strikeout.md +++ b/api/class/annotation/strikeout.md @@ -196,3 +196,10 @@ strikeout.updateOptions(newOptions); // Update the annotation. --------|-----------------------------------------------------|---------------------- -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | `false` -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. | `false` + +**Exception** + + Error Code | Error Message +--------|----------------------------------------------------- + -80326 | The annotation has already been deleted. + \ No newline at end of file diff --git a/api/class/annotation/textbox.md b/api/class/annotation/textbox.md index 5b1f015..0b7574a 100644 --- a/api/class/annotation/textbox.md +++ b/api/class/annotation/textbox.md @@ -204,3 +204,10 @@ textBox.updateOptions(textBoxOptions); // Update the background of the text box --------|-----------------------------------------------------|---------------------- -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | `false` -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. | `false` + +**Exception** + + Error Code | Error Message +--------|----------------------------------------------------- + -80326 | The annotation has already been deleted. + \ No newline at end of file diff --git a/api/class/annotation/texttypewriter.md b/api/class/annotation/texttypewriter.md index 1059b6a..ab325e9 100644 --- a/api/class/annotation/texttypewriter.md +++ b/api/class/annotation/texttypewriter.md @@ -204,3 +204,10 @@ textTypewriter.updateOptions(textTypewriterOptions); // Update the background of --------|-----------------------------------------------------|---------------------- -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | `false` -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. | `false` + +**Exception** + + Error Code | Error Message +--------|----------------------------------------------------- + -80326 | The annotation has already been deleted. + \ No newline at end of file diff --git a/api/class/annotation/underline.md b/api/class/annotation/underline.md index fac4eac..821c1cf 100644 --- a/api/class/annotation/underline.md +++ b/api/class/annotation/underline.md @@ -196,3 +196,10 @@ await underline.updateOptions(newOptions); // Update the annotation. --------|-----------------------------------------------------|---------------------- -80100 | *XXX(API)*: *XXX(ParameterName)* is invalid. | `false` -80102 | *XXX(API)*: *XXX(ParameterName)* is missing. | `false` + +**Exception** + + Error Code | Error Message +--------|----------------------------------------------------- + -80326 | The annotation has already been deleted. + \ No newline at end of file From 66536bb04130673ab3938335333a9c84edb2f0cf Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Thu, 16 Apr 2026 13:43:41 +0800 Subject: [PATCH 42/49] specify text-type for Redaction in noMove flag --- api/interface/annotationinterface/flags.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/interface/annotationinterface/flags.md b/api/interface/annotationinterface/flags.md index c6c6b43..e03ceb9 100644 --- a/api/interface/annotationinterface/flags.md +++ b/api/interface/annotationinterface/flags.md @@ -45,7 +45,7 @@ For the following annotations, it is not effective and the default value is `tru * [`Highlight`](/api/class/annotation/highlight.md) * [`Strikeout`](/api/class/annotation/strikeout.md) * [`Underline`](/api/class/annotation/underline.md) -* [`Redaction`](/api/class/annotation/redaction.md) +* [`Redaction`](/api/class/annotation/redaction.md) (text-type) ### noView From aa4b15689e57276efd60074eed818f409674544e Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Fri, 17 Apr 2026 13:57:14 +0800 Subject: [PATCH 43/49] add missing redaction elements in DisplayTextConfig --- api/interface/displaytextconfig.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/api/interface/displaytextconfig.md b/api/interface/displaytextconfig.md index 5c5ec5a..1050a1b 100644 --- a/api/interface/displaytextconfig.md +++ b/api/interface/displaytextconfig.md @@ -103,6 +103,10 @@ interface DisplayTextConfig { SendToBack?: string; TextSearchPanelSwitch?: string; TextSelectionMode?: string; + RedactPages?: string; + RedactionApply?: string; + RedactionMode?: string; + RedactionSet?: string; RedactionSet_RedactionMode?: string; RedactionSet_RedactionApply?: string; RedactionSet_RedactPages?: string; @@ -138,6 +142,13 @@ interface DisplayTextConfig { CameraResolution_1440P | "1440P" CameraResolution_2160P | "2160P" AnnotationSet | "Annotation" + RedactionSet_RedactionMode | "Mark Areas for Redaction" + RedactionSet_RedactPages | "Mark Pages for Redaction" + RedactionSet_RedactionApply | "Apply Redactions" + RedactPages_Current | "Mark current page for redaction" + RedactPages_Specific | "Mark specific page range for redaction" + RedactPages_Ok | "OK" + RedactPages_Cancel | "Cancel" ## Related From cdc3c1b167c65ef775319a53f3de119b8a8f229a Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Mon, 20 Apr 2026 16:11:23 +0800 Subject: [PATCH 44/49] fix redaction link in index --- api/class/index.md | 1 + api/index.md | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/api/class/index.md b/api/class/index.md index 3ab9b85..9edea44 100644 --- a/api/class/index.md +++ b/api/class/index.md @@ -32,6 +32,7 @@ Annotation has the following main classes: - [Rectangle](/api/class/annotation/rectangle.md) +- [Redaction](/api/class/annotation/redaction.md) - [Ellipse](/api/class/annotation/ellipse.md) - [Polygon](/api/class/annotation/polygon.md) - [Polyline](/api/class/annotation/polyline.md) diff --git a/api/index.md b/api/index.md index 7f3582e..58976b3 100644 --- a/api/index.md +++ b/api/index.md @@ -33,7 +33,7 @@ permalink: /api/index.html - Annotation - [Rectangle]({{ site.api }}class/annotation/rectangle.html) - - [Redaction](/api/class/annotation/rectangle.md) + - [Redaction](/api/class/annotation/redaction.md) - [Ellipse]({{ site.api }}class/annotation/ellipse.html) - [Polygon]({{ site.api }}class/annotation/polygon.html) - [Polyline]({{ site.api }}class/annotation/polyline.html) From 72ac2602e37be92f3be6d212284d59cf7a404ad5 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Mon, 20 Apr 2026 16:16:43 +0800 Subject: [PATCH 45/49] update release date --- releasenotes/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/releasenotes/index.md b/releasenotes/index.md index 4a50459..72a623b 100644 --- a/releasenotes/index.md +++ b/releasenotes/index.md @@ -12,7 +12,7 @@ permalink: /releasenotes/index.html # Release Notes -## 4.0 (04/10/2026) +## 4.0 (04/21/2026) ### New Features From 459207bdd7e37e9ef0dddb50a93c514dd48be2c6 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Mon, 20 Apr 2026 16:45:53 +0800 Subject: [PATCH 46/49] update introduction about redaction --- introduction/index.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/introduction/index.md b/introduction/index.md index de7409e..a3d4f40 100644 --- a/introduction/index.md +++ b/introduction/index.md @@ -21,6 +21,8 @@ Dynamsoft Document Viewer does not rely on any external third-party JavaScript l Dynamsoft Document Viewer is designed to work seamlessly across different browsers and platforms. It is compatible with major browsers like Chrome, Firefox, Safari, and Edge, ensuring a consistent user experience. Additionally, it supports various operating systems, including Windows, macOS, Linux, iOS, and Android, allowing users to access documents from any device. +The SDK's [redaction](/features/datamanagement/annotmanagement.md#redaction) feature goes beyond visual masking - it permanently removes the underlying data from the document. This ensures that sensitive information (PII, classified text, financial data) cannot be recovered or leaked, making it ideal for industries with strict compliance requirements like legal, healthcare, and government. + ## Supported File Types Users can open, edit, and save PDFs, as well as images in various formats, such as JPEG, PNG, and TIFF. @@ -36,6 +38,7 @@ Dynamsoft Document Viewer supports a variety of annotation types to enhance docu - shape - stamp - freehand drawing +- redaction ## Data Management Concepts From 442d173d9411e8ff71a440536acc133d3c5ea907 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Mon, 20 Apr 2026 17:15:13 +0800 Subject: [PATCH 47/49] fix wrong position of redaction in introduction --- introduction/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/introduction/index.md b/introduction/index.md index a3d4f40..f4465b7 100644 --- a/introduction/index.md +++ b/introduction/index.md @@ -17,12 +17,12 @@ Dynamsoft Document Viewer is a browser-based JavaScript SDK designed for viewing Dynamsoft Document Viewer does not rely on any external third-party JavaScript library. All processing, such as rendering and editing, is securely performed within the browser. This architecture eliminates the need for a server-side backend, ensuring security compliance and scalability. +The SDK's [redaction](/features/datamanagement/annotmanagement.md#redaction) feature goes beyond visual masking - it permanently removes the underlying data from the document. This ensures that sensitive information (PII, classified text, financial data) cannot be recovered or leaked, making it ideal for industries with strict compliance requirements like legal, healthcare, and government. + ## Browser and Platform Compatibility Dynamsoft Document Viewer is designed to work seamlessly across different browsers and platforms. It is compatible with major browsers like Chrome, Firefox, Safari, and Edge, ensuring a consistent user experience. Additionally, it supports various operating systems, including Windows, macOS, Linux, iOS, and Android, allowing users to access documents from any device. -The SDK's [redaction](/features/datamanagement/annotmanagement.md#redaction) feature goes beyond visual masking - it permanently removes the underlying data from the document. This ensures that sensitive information (PII, classified text, financial data) cannot be recovered or leaked, making it ideal for industries with strict compliance requirements like legal, healthcare, and government. - ## Supported File Types Users can open, edit, and save PDFs, as well as images in various formats, such as JPEG, PNG, and TIFF. From 21b359557f059c077103df6cfc826fb8ce85c2b4 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Tue, 21 Apr 2026 09:38:50 +0800 Subject: [PATCH 48/49] add newly updated v3.2.1 files --- _v3.2.1/api/class/index.md | 47 +++++++ _v3.2.1/api/interface/displaytextconfig.md | 138 +++++++++++++++++++++ _v3.2.1/api/interface/tooltip.md | 99 +++++++++++++++ _v3.2.1/introduction/index.md | 66 ++++++++++ 4 files changed, 350 insertions(+) create mode 100644 _v3.2.1/api/class/index.md create mode 100644 _v3.2.1/api/interface/displaytextconfig.md create mode 100644 _v3.2.1/api/interface/tooltip.md create mode 100644 _v3.2.1/introduction/index.md diff --git a/_v3.2.1/api/class/index.md b/_v3.2.1/api/class/index.md new file mode 100644 index 0000000..3ab9b85 --- /dev/null +++ b/_v3.2.1/api/class/index.md @@ -0,0 +1,47 @@ +--- +layout: default-layout +needAutoGenerateSidebar: true +needGenerateH3Content: true +noTitleIndex: true +title: Dynamsoft Document Viewer API Reference - Class +keywords: Documentation, Dynamsoft Document Viewer, API Reference, Class +breadcrumbText: EditViewer Class +description: Dynamsoft Document Viewer Documentation API Reference Class Index Page +--- + + +# Class + +Dynamsoft Document Viewer JavaScript library has two main categories of classes: one is under the namespace Dynamsoft.DDV, and the other is related to annotations. + +## Dynamsoft.DDV Classes + +Under the namespace Dynamsoft.DDV, Dynamsoft Document Viewer JavaScript library contains seven primary classes: + +- [DocumentManager](/api/class/documentmanager.md) +- [AnnotationManager](/api/class/annotationmanager.md) +- [EditViewer](/api/class/editviewer.md) +- [CaptureViewer](/api/class/captureviewer.md) +- [PerspectiveViewer](/api/class/perspectiveviewer.md) +- [BrowseViewer](/api/class/browseviewer.md) +- [CustomViewer](/api/class/customviewer.md) + +## Annotation + +Annotation has the following main classes: + + +- [Rectangle](/api/class/annotation/rectangle.md) +- [Ellipse](/api/class/annotation/ellipse.md) +- [Polygon](/api/class/annotation/polygon.md) +- [Polyline](/api/class/annotation/polyline.md) +- [Line](/api/class/annotation/line.md) +- [Ink](/api/class/annotation/ink.md) +- [TextBox](/api/class/annotation/textbox.md) +- [TextTypewriter](/api/class/annotation/texttypewriter.md) +- [Highlight](/api/class/annotation/highlight.md) +- [Underline](/api/class/annotation/underline.md) +- [Strikeout](/api/class/annotation/strikeout.md) +- [Stamp](/api/class/annotation/stamp.md) +- [Incomplete](/api/class/annotation/incomplete.md) +- [Unknown](/api/class/annotation/unknown.md) diff --git a/_v3.2.1/api/interface/displaytextconfig.md b/_v3.2.1/api/interface/displaytextconfig.md new file mode 100644 index 0000000..ccbbcb0 --- /dev/null +++ b/_v3.2.1/api/interface/displaytextconfig.md @@ -0,0 +1,138 @@ +--- +layout: default-layout +needAutoGenerateSidebar: true +needGenerateH3Content: true +noTitleIndex: true +title: Dynamsoft Document Viewer API Reference - Interface DisplayTextConfig +keywords: Documentation, Dynamsoft Document Viewer, API Reference, Interface DisplayTextConfig +breadcrumbText: Interface DisplayTextConfig +description: Dynamsoft Document Viewer Documentation API Reference Interface DisplayTextConfig Page + +--- + +# DisplayTextConfig + +## Syntax + +```typescript +interface DisplayTextConfig { + FitMode_FitWidth?: string; + FitMode_FitHeight?: string; + FitMode_FitWindow?: string; + FitMode_ActualSize?: string; + DisplayMode_SinglePage?: string; + DisplayMode_ContinuousPage?: string; + Crop_CropAll?: string; + Crop_CropCurrent?: string; + Crop_CropCancel?: string; + Crop_CropApply?: string; + Filter_FilterAll?: string; + Delete_DeleteCurrent?: string; + Delete_DeleteAll?: string; + CameraResolution_720P?: string; + CameraResolution_1080P?: string; + CameraResolution_1440P?: string; + CameraResolution_2160P?: string; + CameraResolution?: string; + Capture?: string; + Flashlight?: string; + CameraConvert?: string; + AutoDetect?: string; + AutoCapture?: string; + Rotate?: string; + RotateLeft?: string; + RotateRight?: string; + Load?: string; + Download?: string; + Delete?: string; + DeleteCurrent?: string; + DeleteAll?: string; + Zoom?: string; + ZoomIn?: string; + ZoomOut?: string; + ZoomByPercentage?: string; + Crop?: string; + CropAll?: string; + CropCurrent?: string; + CropMode?: string; + PerspectiveAll?: string; + FullQuad?: string; + Undo?: string; + Redo?: string; + Restore?: string; + Pan?: string; + Filter?: string; + Print?: string; + ThumbnailSwitch?: string; + DisplayMode?: string; + ContinuousPage?: string; + MultiPage?: string; + SinglePage?: string; + FitMode?: string; + FitWidth?: string; + FitHeight?: string; + FitWindow?: string; + ActualSize?: string; + Back?: string; + Close?: string; + Done?: string; + FirstPage?: string; + LastPage?: string; + NextPage?: string; + PrevPage?: string; + ImagePreview?: string; + AnnotationSet?: string; + EllipseAnnotation?: string; + InkAnnotation?: string; + LineAnnotation?: string; + PolygonAnnotation?: string; + PolylineAnnotation?: string; + RectAnnotation?: string; + StampIconAnnotation?: string; + StampImageAnnotation?: string; + TextBoxAnnotation?: string; + TextTypewriterAnnotation?: string; + SelectAnnotation?: string; + EraseAnnotation?: string; + HighlightAnnotation?: string; + UnderlineAnnotation?: string; + StrikeoutAnnotation?: string; + BringForward?: string; + BringToFront?: string; + SendBackward?: string; + SendToBack?: string; + TextSearchPanelSwitch?: string; + TextSelectionMode?: string; +} +``` + +## Remark + +- Some of built-in elements have default display texts. + + Elements | Default Text + ----------------------------|---------------------- + FitMode_FitWidth | "Fit Width" + FitMode_FitHeight | "Fit Height" + FitMode_FitWindow | "Fit Window" + FitMode_ActualSize | "Actual Size" + DisplayMode_SinglePage | "Single Page" + DisplayMode_ContinuousPage | "Enable Scrolling" + Crop_CropAll | "Crop all pages" + Crop_CropCurrent | "Crop current page" + Crop_CropCancel | "Cancel" + Crop_CropApply | "Apply" + Filter_FilterAll | "Apply to all" + Delete_DeleteCurrent | "Delete current" + Delete_DeleteAll | "Delete all" + Capture | "Capture" + CameraResolution_720P | "720P" + CameraResolution_1080P | "1080P" + CameraResolution_1440P | "1440P" + CameraResolution_2160P | "2160P" + AnnotationSet | "Annotation" + +## Related + +- [`getDisplayTextConfig()`]({{ site.api }}namespace/ddv_elements.html#static-getdisplaytextconfig) +- [`setDisplayTextConfig()`]({{ site.api }}namespace/ddv_elements.html#static-setdisplaytextconfig) diff --git a/_v3.2.1/api/interface/tooltip.md b/_v3.2.1/api/interface/tooltip.md new file mode 100644 index 0000000..463260f --- /dev/null +++ b/_v3.2.1/api/interface/tooltip.md @@ -0,0 +1,99 @@ +--- +layout: default-layout +needAutoGenerateSidebar: true +needGenerateH3Content: true +noTitleIndex: true +title: Dynamsoft Document Viewer API Reference - Interface Tooltip +keywords: Documentation, Dynamsoft Document Viewer, API Reference, Interface Tooltip +breadcrumbText: Interface Tooltip +description: Dynamsoft Document Viewer Documentation API Reference Interface Tooltip Page + +--- + +# Tooltip + +## Syntax + +```typescript +interface Tooltip { + CameraResolution?: string; + Capture?: string; + Flashlight?: string; + CameraConvert?: string; + AutoDetect?: string; + AutoCapture?: string; + Rotate?: string; + RotateLeft?: string; + RotateRight?: string; + Load?: string; + Download?: string; + Delete?: string; + DeleteCurrent?: string; + DeleteAll?: string; + Zoom?: string; + ZoomIn?: string; + ZoomOut?: string; + ZoomByPercentage?: string; + Crop?: string; + CropAll?: string; + CropCurrent?: string; + CropMode?: string; + PerspectiveAll?: string; + FullQuad?: string; + Undo?: string; + Redo?: string; + Restore?: string; + Pan?: string; + Filter?: string; + Print?: string; + ThumbnailSwitch?: string; + DisplayMode?: string; + ContinuousPage?: string; + MultiPage?: string; + SinglePage?: string; + FitMode?: string; + FitWidth?: string; + FitHeight?: string; + FitWindow?: string; + ActualSize?: string; + Back?: string; + Close?: string; + Done?: string; + FirstPage?: string; + LastPage?: string; + NextPage?: string; + PrevPage?: string; + ImagePreview?: string; + AnnotationSet?: string; + EllipseAnnotation?: string; + InkAnnotation?: string; + LineAnnotation?: string; + PolygonAnnotation?: string; + PolylineAnnotation?: string; + RectAnnotation?: string; + StampIconAnnotation?: string; + StampImageAnnotation?: string; + TextBoxAnnotation?: string; + TextTypewriterAnnotation?: string; + SelectAnnotation?: string; + EraseAnnotation?: string; + HighlightAnnotation?: string; + UnderlineAnnotation?: string; + StrikeoutAnnotation?: string; + BringForward?: string; + BringToFront?: string; + SendBackward?: string; + SendToBack?: string; + TextSearchPanelSwitch?: string; + TextSelectionMode?: string; +} +``` + +## Remark + +- The default tooltip is empty. + +## Related + +- [`getTooltip()`]({{ site.api }}namespace/ddv_elements.html#static-gettooltip) +- [`setTooltip()`]({{ site.api }}namespace/ddv_elements.html#static-settooltip) \ No newline at end of file diff --git a/_v3.2.1/introduction/index.md b/_v3.2.1/introduction/index.md new file mode 100644 index 0000000..de7409e --- /dev/null +++ b/_v3.2.1/introduction/index.md @@ -0,0 +1,66 @@ +--- +layout: default-layout +needAutoGenerateSidebar: true +needGenerateH3Content: true +noTitleIndex: true +title: JavaScript PDF Viewer SDK | Dynamsoft Document Viewer +keywords: Documentation, Dynamsoft Document Viewer, Introduction +breadcrumbText: Introduction +description: Powerful JavaScript PDF viewer & document viewer SDK. Integrate seamless document viewing into your web apps with Dynamsoft Document Viewer. +--- + +# Introduction to Dynamsoft Document Viewer + +Dynamsoft Document Viewer is a browser-based JavaScript SDK designed for viewing and editing images and PDFs. It provides a wide range of functionalities, including PDF annotation, page manipulation, image quality enhancement, and document saving. To see it in action, please visit this [online demo](https://demo.dynamsoft.com/document-viewer/). + +## Security + +Dynamsoft Document Viewer does not rely on any external third-party JavaScript library. All processing, such as rendering and editing, is securely performed within the browser. This architecture eliminates the need for a server-side backend, ensuring security compliance and scalability. + +## Browser and Platform Compatibility + +Dynamsoft Document Viewer is designed to work seamlessly across different browsers and platforms. It is compatible with major browsers like Chrome, Firefox, Safari, and Edge, ensuring a consistent user experience. Additionally, it supports various operating systems, including Windows, macOS, Linux, iOS, and Android, allowing users to access documents from any device. + +## Supported File Types + +Users can open, edit, and save PDFs, as well as images in various formats, such as JPEG, PNG, and TIFF. + +## Annotation Types + +Dynamsoft Document Viewer supports a variety of annotation types to enhance document interaction and collaboration. Users can add, edit, and delete annotations such as: + +- text +- highlight +- underline +- strikeout +- shape +- stamp +- freehand drawing + +## Data Management Concepts + +Dynamsoft Document Viewer organizes data using two main concepts: "document" and "page." A document can contain one or multiple pages, and each page must belong to a single document. + +- Page: The smallest unit of data management. Each page has a unique page ID. +- Document: A collection of pages, each with a unique doc ID. Documents collectively make up the entire data set. + +Managing data, therefore, involves managing documents and pages. + +- [Document Management]({{ site.features }}datamanagement/docmanagement.html) +- [Page Management]({{ site.features }}datamanagement/pagemanagement.html) + +If you are using the default UI of DDV, data processing and management are handled internally. + +## UI Customization + +The SDK offers extensive customization options, enabling developers to tailor the UI to meet specific application needs and branding requirements. + +## Designed to Support Diverse Document Workflows + +Dynamsoft Document Viewer is built to support a wide range of document-centric workflows with its document viewing, editing, and scanning features. It has four built-in viewer types to suit different use cases: + +* **Edit Viewer**: Enables viewing and editing of documents with annotation support. +* **Capture Viewer**: Integrates camera controls for streamlined, continuous capture workflows. +* **Perspective Viewer**: Allows document cropping with perspective transformation. +* **Browse Viewer**: Suitable for previewing multi-page documents or navigating document collections. + From 646a4b40a64a06e48dce75d324e11e64e644fd36 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Tue, 21 Apr 2026 09:40:37 +0800 Subject: [PATCH 49/49] use reordered version of sidelist-apis-v3.2.1.html --- _includes/sidelist-apis-v3.2.1.html | 77 +++++++++++++++-------------- 1 file changed, 39 insertions(+), 38 deletions(-) diff --git a/_includes/sidelist-apis-v3.2.1.html b/_includes/sidelist-apis-v3.2.1.html index 098e459..163abc4 100644 --- a/_includes/sidelist-apis-v3.2.1.html +++ b/_includes/sidelist-apis-v3.2.1.html @@ -106,55 +106,56 @@
      • AnnotationToolbarButton
    • -
    • ConfigResult
    • -
    • KeyboardInteractionConfig
    • -
    • CreateDocumentOptions
    • -
    • MergeDocumentOptions
    • -
    • TransferOptions
    • -
    • EditViewerConstructorOptions
    • -
    • EditViewerConfig
    • -
    • ThumbnailConfig
    • AnnotationConfig
    • -
    • IBrowseViewer
    • -
    • Rect
    • -
    • RectXY
    • -
    • ZoomOrigin
    • -
    • CaptureViewerConstructorOptions
    • -
    • CaptureViewerConfig
    • -
    • VideoDeviceInfo
    • -
    • PlayCallbackInfo
    • -
    • VideoConfig
    • -
    • PerspectiveViewerConstructorOptions
    • -
    • PerspectiveViewerConfig
    • -
    • BrowseViewerConstructorOptions
    • BrowseViewerConfig
    • +
    • BrowseViewerConstructorOptions
    • +
    • CaptureViewerConfig
    • +
    • CaptureViewerConstructorOptions
    • +
    • ConfigResult
    • +
    • CreateDocumentOptions
    • CustomViewerConstructorOptions
    • -
    • Tooltip
    • -
    • DisplayTextConfig
    • -
    • UiConfig
    • DDVError
    • -
    • VError
    • -
    • VImageData
    • -
    • IImageFilter
    • -
    • ImageFilterItem
    • -
    • InfoObject
    • -
    • IDocumentDetect
    • DetectResult
    • +
    • DisplayTextConfig
    • DocumentDetectConfig
    • DocumentDetectResult
    • -
    • ITextSelectedInfo
    • -
    • ITextSearchedInfo
    • -
    • TextSearchResult
    • -
    • PageVisualInfo
    • -
    • PageImageInfo
    • -
    • SearchTextOptions
    • -
    • UpdatedSource
    • -
    • UpdatedPdfSource
    • +
    • EditViewerConfig
    • +
    • EditViewerConstructorOptions
    • +
    • IImageFilter
    • +
    • IBrowseViewer
    • +
    • IDocumentDetect
    • +
    • ImageFilterItem
    • +
    • InfoObject
    • IPageData
    • +
    • IPaginationChangedEvent
    • IPointerEvent
    • +
    • ITextSearchedInfo
    • +
    • ITextSelectedInfo
    • IQuadmodifiedEvent
    • IUndoRedoStateChangedEvent
    • -
    • IPaginationChangedEvent
    • +
    • KeyboardInteractionConfig
    • +
    • MergeDocumentOptions
    • +
    • PageImageInfo
    • +
    • PageVisualInfo
    • +
    • PaletteConfig
    • +
    • PerspectiveViewerConfig
    • +
    • PerspectiveViewerConstructorOptions
    • +
    • PlayCallbackInfo
    • +
    • Rect
    • +
    • RectXY
    • +
    • SearchTextOptions
    • +
    • TextSearchResult
    • +
    • ThumbnailConfig
    • +
    • Tooltip
    • +
    • TransferOptions
    • +
    • UiConfig
    • +
    • UpdatedPdfSource
    • +
    • UpdatedSource
    • +
    • VideoConfig
    • +
    • VideoDeviceInfo
    • +
    • VError
    • +
    • VImageData
    • +
    • ZoomOrigin
  • Enumerations & Types