@shznet/pdf-sign-angular 0.2.1 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -39,16 +39,116 @@ Use the component in your template:
39
39
  @ViewChild(PdfSignAngularComponent) pdfSign!: PdfSignAngularComponent;
40
40
 
41
41
  print() {
42
- this.pdfSign.print({ withSignatures: true });
42
+ this.pdfSign.print();
43
43
  }
44
44
  ```
45
45
 
46
46
  ## Inputs & Outputs
47
47
 
48
+ ### Inputs
49
+
48
50
  - **[src]**: `string | Uint8Array | ArrayBuffer` - Source of the PDF file.
51
+ - **[page]**: `number` - Current page number (1-based). Supports two-way binding with `[(page)]`.
49
52
  - **[viewMode]**: `'single' | 'scroll'` - View mode configuration.
50
- - **[fields]**: `SignatureField[]` - Initial fields.
53
+ - **[fields]**: `SignatureField[]` - Signature fields to display.
54
+ - **[pdfLoaderOptions]**: `PdfLoaderOptions` - PDF.js configuration.
55
+
56
+ ### Outputs
57
+
58
+ - **(ready)**: `EventEmitter<PdfSignControl>` - Emitted when control is initialized.
51
59
  - **(loaded)**: `EventEmitter<void>` - Emitted when PDF renders successfully.
52
- - **(pageChange)**: `EventEmitter<{ page: number, total: number }>` - Emitted on navigation.
53
- - **(scaleChange)**: `EventEmitter<{ scale: number }>` - Emitted on zoom.
54
- - **(fieldsChange)**: `EventEmitter<SignatureField[]>` - Emitted when fields change.
60
+ - **(pageChange)**: `EventEmitter<number>` - Emits current page number (for two-way binding with `[(page)]`).
61
+ - **(pageInfo)**: `EventEmitter<{ page: number, total: number }>` - Emits detailed page info.
62
+ - **(scaleChange)**: `EventEmitter<{ scale: number }>` - Emitted on zoom changes.
63
+ - **(fieldsChange)**: `EventEmitter<SignatureField[]>` - Emitted when fields are modified.
64
+ - **(error)**: `EventEmitter<Error>` - Emitted on errors.
65
+
66
+ ## Two-Way Binding Example
67
+
68
+ Angular's two-way binding syntax allows automatic synchronization:
69
+
70
+ ```html
71
+ <lib-pdf-sign-angular
72
+ [src]="pdfUrl"
73
+ [(page)]="currentPage"
74
+ [viewMode]="viewMode"
75
+ (pageInfo)="onPageInfo($event)"
76
+ (scaleChange)="onScaleChange($event)"
77
+ (fieldsChange)="onFieldsChange($event)"
78
+ style="width: 100%; height: 600px; display: block;"
79
+ ></lib-pdf-sign-angular>
80
+
81
+ <div>
82
+ <button (click)="currentPage = currentPage - 1">Previous</button>
83
+ <span>Page {{ currentPage }} / {{ totalPages }}</span>
84
+ <button (click)="currentPage = currentPage + 1">Next</button>
85
+ </div>
86
+ ```
87
+
88
+ ```typescript
89
+ export class AppComponent {
90
+ pdfUrl = 'https://example.com/doc.pdf';
91
+ currentPage = 1; // Automatically synced with PDF viewer
92
+ totalPages = 0;
93
+ viewMode: ViewMode = 'scroll';
94
+
95
+ onPageInfo(data: { page: number; total: number }) {
96
+ this.totalPages = data.total;
97
+ // currentPage is automatically updated via two-way binding
98
+ }
99
+
100
+ onScaleChange(data: { scale: number }) {
101
+ console.log('Zoom:', data.scale);
102
+ }
103
+ }
104
+ ```
105
+
106
+ ## Component Methods
107
+
108
+ Access methods via `@ViewChild`:
109
+
110
+ ```typescript
111
+ @ViewChild(PdfSignAngularComponent) pdfComponent!: PdfSignAngularComponent;
112
+
113
+ // Navigation
114
+ this.pdfComponent.goToPage(5);
115
+ this.pdfComponent.nextPage();
116
+ this.pdfComponent.previousPage();
117
+ const currentPage = this.pdfComponent.getCurrentPage();
118
+ const totalPages = this.pdfComponent.getTotalPages();
119
+
120
+ // Zoom
121
+ this.pdfComponent.setScale(1.5);
122
+ const scale = this.pdfComponent.getScale();
123
+
124
+ // View Mode
125
+ await this.pdfComponent.setViewMode('single');
126
+ const mode = this.pdfComponent.getViewMode();
127
+
128
+ // Page Dimensions
129
+ const dims = await this.pdfComponent.getPageDimensions(0); // Page 1 (0-based)
130
+ console.log(`Page size: ${dims?.width} x ${dims?.height} points`);
131
+
132
+ // Field Management
133
+ this.pdfComponent.addField({
134
+ id: 'sig1',
135
+ pageIndex: 0,
136
+ rect: { x: 100, y: 100, width: 200, height: 80 },
137
+ type: 'signature',
138
+ content: '<svg>...</svg>',
139
+ draggable: true,
140
+ resizable: true
141
+ });
142
+
143
+ this.pdfComponent.removeField('sig1');
144
+ this.pdfComponent.updateField('sig1', {
145
+ rect: { x: 150, y: 150, width: 200, height: 80 }
146
+ });
147
+ this.pdfComponent.setFields([...newFields]);
148
+
149
+ // Printing
150
+ await this.pdfComponent.print({ withSignatures: false });
151
+
152
+ // Direct Control Access
153
+ const control = this.pdfComponent.getControl();
154
+ ```
@@ -7,6 +7,8 @@ class PdfSignAngularComponent {
7
7
  container;
8
8
  /** PDF source URL or ArrayBuffer - auto-loads when provided */
9
9
  src;
10
+ /** Current page number (1-based) - supports two-way binding with [(page)] */
11
+ page;
10
12
  /** Initial view mode: 'scroll' or 'single' */
11
13
  viewMode;
12
14
  /** Initial fields */
@@ -17,8 +19,10 @@ class PdfSignAngularComponent {
17
19
  ready = new EventEmitter();
18
20
  /** Emitted when PDF is loaded */
19
21
  loaded = new EventEmitter();
20
- /** Emitted when page changes */
22
+ /** Emitted when page changes - emits page number for two-way binding */
21
23
  pageChange = new EventEmitter();
24
+ /** Emitted when page changes with full info */
25
+ pageInfo = new EventEmitter();
22
26
  /** Emitted when scale changes */
23
27
  scaleChange = new EventEmitter();
24
28
  /** Emitted on error */
@@ -42,7 +46,13 @@ class PdfSignAngularComponent {
42
46
  });
43
47
  // Setup event listeners
44
48
  this.control.on('page:change', (data) => {
45
- this.pageChange.emit(data);
49
+ // Emit full info
50
+ this.pageInfo.emit(data);
51
+ // Emit page number for two-way binding
52
+ if (this.page !== data.page) {
53
+ this.page = data.page;
54
+ this.pageChange.emit(data.page);
55
+ }
46
56
  });
47
57
  this.control.on('scale:change', (data) => {
48
58
  this.scaleChange.emit(data);
@@ -71,6 +81,12 @@ class PdfSignAngularComponent {
71
81
  if (changes['src'] && !changes['src'].firstChange && this.src) {
72
82
  this.loadPdf(this.src);
73
83
  }
84
+ if (changes['page'] && !changes['page'].firstChange && this.page !== undefined) {
85
+ const currentPage = this.control?.getCurrentPage();
86
+ if (currentPage !== this.page) {
87
+ this.control?.goToPage(this.page);
88
+ }
89
+ }
74
90
  if (changes['viewMode'] && !changes['viewMode'].firstChange && this.viewMode) {
75
91
  this.control?.setViewMode(this.viewMode);
76
92
  }
@@ -142,6 +158,10 @@ class PdfSignAngularComponent {
142
158
  print(options) {
143
159
  return this.control?.print(options) ?? Promise.resolve();
144
160
  }
161
+ /** Get dimensions of a specific page in PDF points */
162
+ async getPageDimensions(pageIndex) {
163
+ return this.control?.getPageDimensions(pageIndex) ?? null;
164
+ }
145
165
  // Field Management Wrappers
146
166
  addField(field) {
147
167
  this.control?.addField(field);
@@ -156,7 +176,7 @@ class PdfSignAngularComponent {
156
176
  this.control?.setFields(fields);
157
177
  }
158
178
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: PdfSignAngularComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
159
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.6", type: PdfSignAngularComponent, isStandalone: true, selector: "lib-pdf-sign-angular", inputs: { src: "src", viewMode: "viewMode", fields: "fields", pdfLoaderOptions: "pdfLoaderOptions" }, outputs: { ready: "ready", loaded: "loaded", pageChange: "pageChange", scaleChange: "scaleChange", error: "error", fieldAdd: "fieldAdd", fieldRemove: "fieldRemove", fieldUpdate: "fieldUpdate", fieldsChange: "fieldsChange" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div #container class=\"pdf-sign-angular-container\"></div>\n", styles: [":host{display:block;width:100%;height:100%}.pdf-sign-angular-container{width:100%;height:100%;position:relative}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
179
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.6", type: PdfSignAngularComponent, isStandalone: true, selector: "lib-pdf-sign-angular", inputs: { src: "src", page: "page", viewMode: "viewMode", fields: "fields", pdfLoaderOptions: "pdfLoaderOptions" }, outputs: { ready: "ready", loaded: "loaded", pageChange: "pageChange", pageInfo: "pageInfo", scaleChange: "scaleChange", error: "error", fieldAdd: "fieldAdd", fieldRemove: "fieldRemove", fieldUpdate: "fieldUpdate", fieldsChange: "fieldsChange" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div #container class=\"pdf-sign-angular-container\"></div>\n", styles: [":host{display:block;width:100%;height:100%}.pdf-sign-angular-container{width:100%;height:100%;position:relative}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
160
180
  }
161
181
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: PdfSignAngularComponent, decorators: [{
162
182
  type: Component,
@@ -166,6 +186,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
166
186
  args: ['container', { static: true }]
167
187
  }], src: [{
168
188
  type: Input
189
+ }], page: [{
190
+ type: Input
169
191
  }], viewMode: [{
170
192
  type: Input
171
193
  }], fields: [{
@@ -178,6 +200,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
178
200
  type: Output
179
201
  }], pageChange: [{
180
202
  type: Output
203
+ }], pageInfo: [{
204
+ type: Output
181
205
  }], scaleChange: [{
182
206
  type: Output
183
207
  }], error: [{
@@ -1 +1 @@
1
- {"version":3,"file":"shznet-pdf-sign-angular.mjs","sources":["../../../../packages/pdf-sign-angular/src/lib/pdf-sign-angular/pdf-sign-angular.ts","../../../../packages/pdf-sign-angular/src/lib/pdf-sign-angular/pdf-sign-angular.html","../../../../packages/pdf-sign-angular/src/shznet-pdf-sign-angular.ts"],"sourcesContent":["\nimport { Component, ElementRef, ViewChild, OnInit, OnDestroy, Input, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PdfSignControl, PdfSignControlOptions, ViewMode, SignatureField } from '@shznet/pdf-sign-control';\n\n@Component({\n selector: 'lib-pdf-sign-angular',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './pdf-sign-angular.html',\n styleUrl: './pdf-sign-angular.css',\n})\nexport class PdfSignAngularComponent implements OnInit, OnDestroy, OnChanges {\n @ViewChild('container', { static: true }) container!: ElementRef<HTMLDivElement>;\n\n /** PDF source URL or ArrayBuffer - auto-loads when provided */\n @Input() src?: string | Uint8Array | ArrayBuffer;\n\n /** Initial view mode: 'scroll' or 'single' */\n @Input() viewMode?: ViewMode;\n\n /** Initial fields */\n @Input() fields?: SignatureField[];\n\n /** PDF.js loader options */\n @Input() pdfLoaderOptions?: PdfSignControlOptions['pdfLoaderOptions'];\n\n /** Emitted when control is ready */\n @Output() ready = new EventEmitter<PdfSignControl>();\n\n /** Emitted when PDF is loaded */\n @Output() loaded = new EventEmitter<void>();\n\n /** Emitted when page changes */\n @Output() pageChange = new EventEmitter<{ page: number; total: number }>();\n\n /** Emitted when scale changes */\n @Output() scaleChange = new EventEmitter<{ scale: number }>();\n\n /** Emitted on error */\n @Output() error = new EventEmitter<Error>();\n\n /** Emitted when a field is added */\n @Output() fieldAdd = new EventEmitter<SignatureField>();\n\n /** Emitted when a field is removed */\n @Output() fieldRemove = new EventEmitter<{ fieldId: string }>();\n\n /** Emitted when a field is updated */\n @Output() fieldUpdate = new EventEmitter<{ fieldId: string, updates: Partial<SignatureField> }>();\n\n /** Emitted when any field changes (add/remove/update) */\n @Output() fieldsChange = new EventEmitter<SignatureField[]>();\n\n private control: PdfSignControl | null = null;\n\n ngOnInit() {\n if (this.container) {\n this.control = new PdfSignControl({\n container: this.container.nativeElement,\n viewMode: this.viewMode,\n pdfLoaderOptions: this.pdfLoaderOptions,\n fields: this.fields\n });\n\n // Setup event listeners\n this.control.on('page:change', (data: { page: number; total: number }) => {\n this.pageChange.emit(data);\n });\n\n this.control.on('scale:change', (data: { scale: number }) => {\n this.scaleChange.emit(data);\n });\n\n // Field Events\n this.control.on('field:add', (field: SignatureField) => {\n this.fieldAdd.emit(field);\n });\n this.control.on('field:remove', (data: { fieldId: string }) => {\n this.fieldRemove.emit(data);\n });\n this.control.on('field:update', (data: { fieldId: string, updates: Partial<SignatureField> }) => {\n this.fieldUpdate.emit(data);\n });\n this.control.on('fields:change', (fields: SignatureField[]) => {\n this.fieldsChange.emit(fields);\n });\n\n this.ready.emit(this.control);\n\n // Auto-load if src provided\n if (this.src) {\n this.loadPdf(this.src);\n }\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['src'] && !changes['src'].firstChange && this.src) {\n this.loadPdf(this.src);\n }\n if (changes['viewMode'] && !changes['viewMode'].firstChange && this.viewMode) {\n this.control?.setViewMode(this.viewMode);\n }\n if (changes['fields'] && !changes['fields'].firstChange && this.fields) {\n const currentFields = this.control?.getFields();\n if (JSON.stringify(currentFields) === JSON.stringify(this.fields)) {\n return;\n }\n this.control?.setFields(this.fields);\n }\n }\n\n ngOnDestroy() {\n if (this.control) {\n this.control.destroy();\n this.control = null;\n }\n }\n\n private loadPdf(source: string | Uint8Array | ArrayBuffer) {\n this.control?.load(source)\n .then(() => this.loaded.emit())\n .catch((err) => this.error.emit(err));\n }\n\n // Public API methods\n\n /** Get the underlying PdfSignControl instance */\n getControl(): PdfSignControl | null {\n return this.control;\n }\n\n /** Load a PDF from URL or ArrayBuffer */\n load(source: string | Uint8Array | ArrayBuffer): Promise<void> {\n return this.control?.load(source) ?? Promise.reject('Control not initialized');\n }\n\n /** Navigate to specific page */\n goToPage(page: number): void {\n this.control?.goToPage(page);\n }\n\n /** Go to next page */\n nextPage(): void {\n this.control?.nextPage();\n }\n\n /** Go to previous page */\n previousPage(): void {\n this.control?.previousPage();\n }\n\n /** Get current page number */\n getCurrentPage(): number {\n return this.control?.getCurrentPage() ?? 1;\n }\n\n /** Get total pages */\n getTotalPages(): number {\n return this.control?.getTotalPages() ?? 0;\n }\n\n /** Set zoom scale */\n setScale(scale: number): void {\n this.control?.setScale(scale);\n }\n\n /** Get current zoom scale */\n getScale(): number {\n return this.control?.getScale() ?? 1.0;\n }\n\n /** Set view mode */\n setViewMode(mode: ViewMode): Promise<void> {\n return this.control?.setViewMode(mode) ?? Promise.resolve();\n }\n\n /** Get current view mode */\n getViewMode(): ViewMode {\n return this.control?.getViewMode() ?? 'scroll';\n }\n\n /** Print the PDF */\n print(options?: { withSignatures?: boolean }): Promise<void> {\n return this.control?.print(options) ?? Promise.resolve();\n }\n\n // Field Management Wrappers\n\n addField(field: any): void {\n this.control?.addField(field);\n }\n\n removeField(fieldId: string): void {\n this.control?.removeField(fieldId);\n }\n\n updateField(fieldId: string, updates: any): void {\n this.control?.updateField(fieldId, updates);\n }\n\n setFields(fields: any[]): void {\n this.control?.setFields(fields);\n }\n}\n","<div #container class=\"pdf-sign-angular-container\"></div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shznet-pdf-sign-angular.mjs","sources":["../../../../packages/pdf-sign-angular/src/lib/pdf-sign-angular/pdf-sign-angular.ts","../../../../packages/pdf-sign-angular/src/lib/pdf-sign-angular/pdf-sign-angular.html","../../../../packages/pdf-sign-angular/src/shznet-pdf-sign-angular.ts"],"sourcesContent":["\nimport { Component, ElementRef, ViewChild, OnInit, OnDestroy, Input, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PdfSignControl, PdfSignControlOptions, ViewMode, SignatureField } from '@shznet/pdf-sign-control';\n\n@Component({\n selector: 'lib-pdf-sign-angular',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './pdf-sign-angular.html',\n styleUrl: './pdf-sign-angular.css',\n})\nexport class PdfSignAngularComponent implements OnInit, OnDestroy, OnChanges {\n @ViewChild('container', { static: true }) container!: ElementRef<HTMLDivElement>;\n\n /** PDF source URL or ArrayBuffer - auto-loads when provided */\n @Input() src?: string | Uint8Array | ArrayBuffer;\n\n /** Current page number (1-based) - supports two-way binding with [(page)] */\n @Input() page?: number;\n\n /** Initial view mode: 'scroll' or 'single' */\n @Input() viewMode?: ViewMode;\n\n /** Initial fields */\n @Input() fields?: SignatureField[];\n\n /** PDF.js loader options */\n @Input() pdfLoaderOptions?: PdfSignControlOptions['pdfLoaderOptions'];\n\n /** Emitted when control is ready */\n @Output() ready = new EventEmitter<PdfSignControl>();\n\n /** Emitted when PDF is loaded */\n @Output() loaded = new EventEmitter<void>();\n\n /** Emitted when page changes - emits page number for two-way binding */\n @Output() pageChange = new EventEmitter<number>();\n\n /** Emitted when page changes with full info */\n @Output() pageInfo = new EventEmitter<{ page: number; total: number }>();\n\n /** Emitted when scale changes */\n @Output() scaleChange = new EventEmitter<{ scale: number }>();\n\n /** Emitted on error */\n @Output() error = new EventEmitter<Error>();\n\n /** Emitted when a field is added */\n @Output() fieldAdd = new EventEmitter<SignatureField>();\n\n /** Emitted when a field is removed */\n @Output() fieldRemove = new EventEmitter<{ fieldId: string }>();\n\n /** Emitted when a field is updated */\n @Output() fieldUpdate = new EventEmitter<{ fieldId: string, updates: Partial<SignatureField> }>();\n\n /** Emitted when any field changes (add/remove/update) */\n @Output() fieldsChange = new EventEmitter<SignatureField[]>();\n\n private control: PdfSignControl | null = null;\n\n ngOnInit() {\n if (this.container) {\n this.control = new PdfSignControl({\n container: this.container.nativeElement,\n viewMode: this.viewMode,\n pdfLoaderOptions: this.pdfLoaderOptions,\n fields: this.fields\n });\n\n // Setup event listeners\n this.control.on('page:change', (data: { page: number; total: number }) => {\n // Emit full info\n this.pageInfo.emit(data);\n // Emit page number for two-way binding\n if (this.page !== data.page) {\n this.page = data.page;\n this.pageChange.emit(data.page);\n }\n });\n\n this.control.on('scale:change', (data: { scale: number }) => {\n this.scaleChange.emit(data);\n });\n\n // Field Events\n this.control.on('field:add', (field: SignatureField) => {\n this.fieldAdd.emit(field);\n });\n this.control.on('field:remove', (data: { fieldId: string }) => {\n this.fieldRemove.emit(data);\n });\n this.control.on('field:update', (data: { fieldId: string, updates: Partial<SignatureField> }) => {\n this.fieldUpdate.emit(data);\n });\n this.control.on('fields:change', (fields: SignatureField[]) => {\n this.fieldsChange.emit(fields);\n });\n\n this.ready.emit(this.control);\n\n // Auto-load if src provided\n if (this.src) {\n this.loadPdf(this.src);\n }\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['src'] && !changes['src'].firstChange && this.src) {\n this.loadPdf(this.src);\n }\n if (changes['page'] && !changes['page'].firstChange && this.page !== undefined) {\n const currentPage = this.control?.getCurrentPage();\n if (currentPage !== this.page) {\n this.control?.goToPage(this.page);\n }\n }\n if (changes['viewMode'] && !changes['viewMode'].firstChange && this.viewMode) {\n this.control?.setViewMode(this.viewMode);\n }\n if (changes['fields'] && !changes['fields'].firstChange && this.fields) {\n const currentFields = this.control?.getFields();\n if (JSON.stringify(currentFields) === JSON.stringify(this.fields)) {\n return;\n }\n this.control?.setFields(this.fields);\n }\n }\n\n ngOnDestroy() {\n if (this.control) {\n this.control.destroy();\n this.control = null;\n }\n }\n\n private loadPdf(source: string | Uint8Array | ArrayBuffer) {\n this.control?.load(source)\n .then(() => this.loaded.emit())\n .catch((err) => this.error.emit(err));\n }\n\n // Public API methods\n\n /** Get the underlying PdfSignControl instance */\n getControl(): PdfSignControl | null {\n return this.control;\n }\n\n /** Load a PDF from URL or ArrayBuffer */\n load(source: string | Uint8Array | ArrayBuffer): Promise<void> {\n return this.control?.load(source) ?? Promise.reject('Control not initialized');\n }\n\n /** Navigate to specific page */\n goToPage(page: number): void {\n this.control?.goToPage(page);\n }\n\n /** Go to next page */\n nextPage(): void {\n this.control?.nextPage();\n }\n\n /** Go to previous page */\n previousPage(): void {\n this.control?.previousPage();\n }\n\n /** Get current page number */\n getCurrentPage(): number {\n return this.control?.getCurrentPage() ?? 1;\n }\n\n /** Get total pages */\n getTotalPages(): number {\n return this.control?.getTotalPages() ?? 0;\n }\n\n /** Set zoom scale */\n setScale(scale: number): void {\n this.control?.setScale(scale);\n }\n\n /** Get current zoom scale */\n getScale(): number {\n return this.control?.getScale() ?? 1.0;\n }\n\n /** Set view mode */\n setViewMode(mode: ViewMode): Promise<void> {\n return this.control?.setViewMode(mode) ?? Promise.resolve();\n }\n\n /** Get current view mode */\n getViewMode(): ViewMode {\n return this.control?.getViewMode() ?? 'scroll';\n }\n\n /** Print the PDF */\n print(options?: { withSignatures?: boolean }): Promise<void> {\n return this.control?.print(options) ?? Promise.resolve();\n }\n\n /** Get dimensions of a specific page in PDF points */\n async getPageDimensions(pageIndex: number): Promise<{ width: number; height: number } | null> {\n return this.control?.getPageDimensions(pageIndex) ?? null;\n }\n\n // Field Management Wrappers\n\n addField(field: any): void {\n this.control?.addField(field);\n }\n\n removeField(fieldId: string): void {\n this.control?.removeField(fieldId);\n }\n\n updateField(fieldId: string, updates: any): void {\n this.control?.updateField(fieldId, updates);\n }\n\n setFields(fields: any[]): void {\n this.control?.setFields(fields);\n }\n}\n","<div #container class=\"pdf-sign-angular-container\"></div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shznet/pdf-sign-angular",
3
- "version": "0.2.1",
3
+ "version": "0.2.2",
4
4
  "description": "Angular wrapper for @shznet/pdf-sign-control",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -6,6 +6,8 @@ declare class PdfSignAngularComponent implements OnInit, OnDestroy, OnChanges {
6
6
  container: ElementRef<HTMLDivElement>;
7
7
  /** PDF source URL or ArrayBuffer - auto-loads when provided */
8
8
  src?: string | Uint8Array | ArrayBuffer;
9
+ /** Current page number (1-based) - supports two-way binding with [(page)] */
10
+ page?: number;
9
11
  /** Initial view mode: 'scroll' or 'single' */
10
12
  viewMode?: ViewMode;
11
13
  /** Initial fields */
@@ -16,8 +18,10 @@ declare class PdfSignAngularComponent implements OnInit, OnDestroy, OnChanges {
16
18
  ready: EventEmitter<PdfSignControl>;
17
19
  /** Emitted when PDF is loaded */
18
20
  loaded: EventEmitter<void>;
19
- /** Emitted when page changes */
20
- pageChange: EventEmitter<{
21
+ /** Emitted when page changes - emits page number for two-way binding */
22
+ pageChange: EventEmitter<number>;
23
+ /** Emitted when page changes with full info */
24
+ pageInfo: EventEmitter<{
21
25
  page: number;
22
26
  total: number;
23
27
  }>;
@@ -71,12 +75,17 @@ declare class PdfSignAngularComponent implements OnInit, OnDestroy, OnChanges {
71
75
  print(options?: {
72
76
  withSignatures?: boolean;
73
77
  }): Promise<void>;
78
+ /** Get dimensions of a specific page in PDF points */
79
+ getPageDimensions(pageIndex: number): Promise<{
80
+ width: number;
81
+ height: number;
82
+ } | null>;
74
83
  addField(field: any): void;
75
84
  removeField(fieldId: string): void;
76
85
  updateField(fieldId: string, updates: any): void;
77
86
  setFields(fields: any[]): void;
78
87
  static ɵfac: i0.ɵɵFactoryDeclaration<PdfSignAngularComponent, never>;
79
- static ɵcmp: i0.ɵɵComponentDeclaration<PdfSignAngularComponent, "lib-pdf-sign-angular", never, { "src": { "alias": "src"; "required": false; }; "viewMode": { "alias": "viewMode"; "required": false; }; "fields": { "alias": "fields"; "required": false; }; "pdfLoaderOptions": { "alias": "pdfLoaderOptions"; "required": false; }; }, { "ready": "ready"; "loaded": "loaded"; "pageChange": "pageChange"; "scaleChange": "scaleChange"; "error": "error"; "fieldAdd": "fieldAdd"; "fieldRemove": "fieldRemove"; "fieldUpdate": "fieldUpdate"; "fieldsChange": "fieldsChange"; }, never, never, true, never>;
88
+ static ɵcmp: i0.ɵɵComponentDeclaration<PdfSignAngularComponent, "lib-pdf-sign-angular", never, { "src": { "alias": "src"; "required": false; }; "page": { "alias": "page"; "required": false; }; "viewMode": { "alias": "viewMode"; "required": false; }; "fields": { "alias": "fields"; "required": false; }; "pdfLoaderOptions": { "alias": "pdfLoaderOptions"; "required": false; }; }, { "ready": "ready"; "loaded": "loaded"; "pageChange": "pageChange"; "pageInfo": "pageInfo"; "scaleChange": "scaleChange"; "error": "error"; "fieldAdd": "fieldAdd"; "fieldRemove": "fieldRemove"; "fieldUpdate": "fieldUpdate"; "fieldsChange": "fieldsChange"; }, never, never, true, never>;
80
89
  }
81
90
 
82
91
  export { PdfSignAngularComponent };