@cj-tech-master/excelts 9.1.0 → 9.2.0

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.
Files changed (147) hide show
  1. package/README.md +16 -1
  2. package/dist/browser/modules/archive/compression/crc32.js +1 -1
  3. package/dist/browser/modules/archive/crypto/aes.d.ts +0 -8
  4. package/dist/browser/modules/archive/crypto/aes.js +1 -20
  5. package/dist/browser/modules/archive/crypto/index.d.ts +2 -1
  6. package/dist/browser/modules/archive/crypto/index.js +3 -1
  7. package/dist/browser/modules/csv/parse/row-processor.d.ts +1 -1
  8. package/dist/browser/modules/csv/worker/worker-script.generated.js +1 -1
  9. package/dist/browser/modules/excel/utils/cell-matrix.js +1 -0
  10. package/dist/browser/modules/excel/utils/encryptor.browser.d.ts +4 -5
  11. package/dist/browser/modules/excel/utils/encryptor.browser.js +7 -12
  12. package/dist/browser/modules/excel/utils/encryptor.d.ts +1 -1
  13. package/dist/browser/modules/excel/utils/encryptor.js +4 -7
  14. package/dist/browser/modules/pdf/builder/document-builder.d.ts +517 -0
  15. package/dist/browser/modules/pdf/builder/document-builder.js +1493 -0
  16. package/dist/browser/modules/pdf/builder/form-appearance.d.ts +56 -0
  17. package/dist/browser/modules/pdf/builder/form-appearance.js +140 -0
  18. package/dist/browser/modules/pdf/builder/image-utils.d.ts +39 -0
  19. package/dist/browser/modules/pdf/builder/image-utils.js +129 -0
  20. package/dist/browser/modules/pdf/builder/pdf-editor.d.ts +230 -0
  21. package/dist/browser/modules/pdf/builder/pdf-editor.js +1574 -0
  22. package/dist/browser/modules/pdf/builder/resource-merger.d.ts +41 -0
  23. package/dist/browser/modules/pdf/builder/resource-merger.js +258 -0
  24. package/dist/browser/modules/pdf/core/digital-signature.d.ts +109 -0
  25. package/dist/browser/modules/pdf/core/digital-signature.js +659 -0
  26. package/dist/browser/modules/pdf/core/encryption.js +8 -7
  27. package/dist/browser/modules/pdf/core/pdf-object.d.ts +11 -0
  28. package/dist/browser/modules/pdf/core/pdf-object.js +38 -0
  29. package/dist/browser/modules/pdf/core/pdf-stream.d.ts +32 -0
  30. package/dist/browser/modules/pdf/core/pdf-stream.js +66 -0
  31. package/dist/browser/modules/pdf/core/pdf-writer.d.ts +55 -1
  32. package/dist/browser/modules/pdf/core/pdf-writer.js +271 -6
  33. package/dist/browser/modules/pdf/core/pdfa.d.ts +62 -0
  34. package/dist/browser/modules/pdf/core/pdfa.js +261 -0
  35. package/dist/browser/modules/pdf/index.d.ts +11 -0
  36. package/dist/browser/modules/pdf/index.js +9 -0
  37. package/dist/browser/modules/pdf/reader/bookmark-extractor.d.ts +35 -0
  38. package/dist/browser/modules/pdf/reader/bookmark-extractor.js +324 -0
  39. package/dist/browser/modules/pdf/reader/pdf-decrypt.js +6 -5
  40. package/dist/browser/modules/pdf/reader/pdf-reader.d.ts +17 -0
  41. package/dist/browser/modules/pdf/reader/pdf-reader.js +26 -2
  42. package/dist/browser/modules/pdf/reader/table-extractor.d.ts +69 -0
  43. package/dist/browser/modules/pdf/reader/table-extractor.js +365 -0
  44. package/dist/browser/modules/pdf/render/layout-engine.d.ts +21 -1
  45. package/dist/browser/modules/pdf/render/layout-engine.js +112 -5
  46. package/dist/browser/modules/pdf/render/page-renderer.d.ts +2 -9
  47. package/dist/browser/modules/pdf/render/page-renderer.js +62 -103
  48. package/dist/browser/modules/pdf/render/pdf-exporter.js +2 -61
  49. package/dist/browser/modules/pdf/render/style-converter.d.ts +4 -0
  50. package/dist/browser/modules/pdf/render/style-converter.js +1 -1
  51. package/dist/browser/modules/pdf/types.d.ts +14 -1
  52. package/dist/browser/modules/stream/browser/readable.js +8 -2
  53. package/dist/browser/utils/crypto.browser.d.ts +64 -0
  54. package/dist/browser/{modules/pdf/core/crypto.js → utils/crypto.browser.js} +91 -101
  55. package/dist/browser/utils/crypto.d.ts +97 -0
  56. package/dist/browser/utils/crypto.js +209 -0
  57. package/dist/cjs/modules/archive/compression/crc32.js +1 -1
  58. package/dist/cjs/modules/archive/crypto/aes.js +2 -23
  59. package/dist/cjs/modules/archive/crypto/index.js +3 -1
  60. package/dist/cjs/modules/csv/worker/worker-script.generated.js +1 -1
  61. package/dist/cjs/modules/excel/utils/cell-matrix.js +1 -0
  62. package/dist/cjs/modules/excel/utils/encryptor.browser.js +7 -12
  63. package/dist/cjs/modules/excel/utils/encryptor.js +4 -10
  64. package/dist/cjs/modules/pdf/builder/document-builder.js +1532 -0
  65. package/dist/cjs/modules/pdf/builder/form-appearance.js +145 -0
  66. package/dist/cjs/modules/pdf/builder/image-utils.js +135 -0
  67. package/dist/cjs/modules/pdf/builder/pdf-editor.js +1612 -0
  68. package/dist/cjs/modules/pdf/builder/resource-merger.js +263 -0
  69. package/dist/cjs/modules/pdf/core/digital-signature.js +667 -0
  70. package/dist/cjs/modules/pdf/core/encryption.js +8 -7
  71. package/dist/cjs/modules/pdf/core/pdf-object.js +38 -0
  72. package/dist/cjs/modules/pdf/core/pdf-stream.js +66 -0
  73. package/dist/cjs/modules/pdf/core/pdf-writer.js +272 -6
  74. package/dist/cjs/modules/pdf/core/pdfa.js +266 -0
  75. package/dist/cjs/modules/pdf/index.js +19 -1
  76. package/dist/cjs/modules/pdf/reader/bookmark-extractor.js +327 -0
  77. package/dist/cjs/modules/pdf/reader/pdf-decrypt.js +6 -5
  78. package/dist/cjs/modules/pdf/reader/pdf-reader.js +26 -2
  79. package/dist/cjs/modules/pdf/reader/table-extractor.js +368 -0
  80. package/dist/cjs/modules/pdf/render/layout-engine.js +113 -4
  81. package/dist/cjs/modules/pdf/render/page-renderer.js +63 -105
  82. package/dist/cjs/modules/pdf/render/pdf-exporter.js +3 -62
  83. package/dist/cjs/modules/pdf/render/style-converter.js +1 -0
  84. package/dist/cjs/modules/stream/browser/readable.js +8 -2
  85. package/dist/cjs/{modules/pdf/core/crypto.js → utils/crypto.browser.js} +95 -102
  86. package/dist/cjs/utils/crypto.js +228 -0
  87. package/dist/esm/modules/archive/compression/crc32.js +1 -1
  88. package/dist/esm/modules/archive/crypto/aes.js +1 -20
  89. package/dist/esm/modules/archive/crypto/index.js +3 -1
  90. package/dist/esm/modules/csv/worker/worker-script.generated.js +1 -1
  91. package/dist/esm/modules/excel/utils/cell-matrix.js +1 -0
  92. package/dist/esm/modules/excel/utils/encryptor.browser.js +7 -12
  93. package/dist/esm/modules/excel/utils/encryptor.js +4 -7
  94. package/dist/esm/modules/pdf/builder/document-builder.js +1493 -0
  95. package/dist/esm/modules/pdf/builder/form-appearance.js +140 -0
  96. package/dist/esm/modules/pdf/builder/image-utils.js +129 -0
  97. package/dist/esm/modules/pdf/builder/pdf-editor.js +1574 -0
  98. package/dist/esm/modules/pdf/builder/resource-merger.js +258 -0
  99. package/dist/esm/modules/pdf/core/digital-signature.js +659 -0
  100. package/dist/esm/modules/pdf/core/encryption.js +8 -7
  101. package/dist/esm/modules/pdf/core/pdf-object.js +38 -0
  102. package/dist/esm/modules/pdf/core/pdf-stream.js +66 -0
  103. package/dist/esm/modules/pdf/core/pdf-writer.js +271 -6
  104. package/dist/esm/modules/pdf/core/pdfa.js +261 -0
  105. package/dist/esm/modules/pdf/index.js +9 -0
  106. package/dist/esm/modules/pdf/reader/bookmark-extractor.js +324 -0
  107. package/dist/esm/modules/pdf/reader/pdf-decrypt.js +6 -5
  108. package/dist/esm/modules/pdf/reader/pdf-reader.js +26 -2
  109. package/dist/esm/modules/pdf/reader/table-extractor.js +365 -0
  110. package/dist/esm/modules/pdf/render/layout-engine.js +112 -5
  111. package/dist/esm/modules/pdf/render/page-renderer.js +62 -103
  112. package/dist/esm/modules/pdf/render/pdf-exporter.js +2 -61
  113. package/dist/esm/modules/pdf/render/style-converter.js +1 -1
  114. package/dist/esm/modules/stream/browser/readable.js +8 -2
  115. package/dist/esm/{modules/pdf/core/crypto.js → utils/crypto.browser.js} +91 -101
  116. package/dist/esm/utils/crypto.js +209 -0
  117. package/dist/iife/excelts.iife.js +1248 -1074
  118. package/dist/iife/excelts.iife.js.map +1 -1
  119. package/dist/iife/excelts.iife.min.js +53 -54
  120. package/dist/types/modules/archive/crypto/aes.d.ts +0 -8
  121. package/dist/types/modules/archive/crypto/index.d.ts +2 -1
  122. package/dist/types/modules/csv/parse/row-processor.d.ts +1 -1
  123. package/dist/types/modules/excel/utils/encryptor.browser.d.ts +4 -5
  124. package/dist/types/modules/excel/utils/encryptor.d.ts +1 -1
  125. package/dist/types/modules/pdf/builder/document-builder.d.ts +517 -0
  126. package/dist/types/modules/pdf/builder/form-appearance.d.ts +56 -0
  127. package/dist/types/modules/pdf/builder/image-utils.d.ts +39 -0
  128. package/dist/types/modules/pdf/builder/pdf-editor.d.ts +230 -0
  129. package/dist/types/modules/pdf/builder/resource-merger.d.ts +41 -0
  130. package/dist/types/modules/pdf/core/digital-signature.d.ts +109 -0
  131. package/dist/types/modules/pdf/core/pdf-object.d.ts +11 -0
  132. package/dist/types/modules/pdf/core/pdf-stream.d.ts +32 -0
  133. package/dist/types/modules/pdf/core/pdf-writer.d.ts +55 -1
  134. package/dist/types/modules/pdf/core/pdfa.d.ts +62 -0
  135. package/dist/types/modules/pdf/index.d.ts +11 -0
  136. package/dist/types/modules/pdf/reader/bookmark-extractor.d.ts +35 -0
  137. package/dist/types/modules/pdf/reader/pdf-reader.d.ts +17 -0
  138. package/dist/types/modules/pdf/reader/table-extractor.d.ts +69 -0
  139. package/dist/types/modules/pdf/render/layout-engine.d.ts +21 -1
  140. package/dist/types/modules/pdf/render/page-renderer.d.ts +2 -9
  141. package/dist/types/modules/pdf/render/style-converter.d.ts +4 -0
  142. package/dist/types/modules/pdf/types.d.ts +14 -1
  143. package/dist/types/utils/crypto.browser.d.ts +64 -0
  144. package/dist/types/utils/crypto.d.ts +97 -0
  145. package/package.json +110 -111
  146. package/dist/browser/modules/pdf/core/crypto.d.ts +0 -65
  147. package/dist/types/modules/pdf/core/crypto.d.ts +0 -65
package/README.md CHANGED
@@ -29,7 +29,7 @@ Create, read, and modify Excel spreadsheets with full styling, formulas, images,
29
29
 
30
30
  ### PDF — Zero-Dependency PDF Engine
31
31
 
32
- Full-featured PDF generation and reading. Write PDFs with font embedding, AES-256 encryption, images, and Excel-to-PDF conversion. Read any PDF with text, image, annotation, form field, and metadata extraction.
32
+ Full-featured PDF generation, reading, building, editing, and signing. Write PDFs with font embedding, AES-256 encryption, images, and Excel-to-PDF conversion. Build free-form PDFs with text, vector graphics, SVG paths, annotations, and form fields. Edit existing PDFs with overlays, form filling, page manipulation, and merging. Read any PDF with text, image, annotation, form field, bookmark, and metadata extraction. Verify and create digital signatures with PKCS#7/CMS.
33
33
 
34
34
  - [Documentation](src/modules/pdf/README.md) | [中文](src/modules/pdf/README_zh.md)
35
35
  - [Examples](src/modules/pdf/examples/)
@@ -111,6 +111,21 @@ const result = await readPdf(pdfBytes);
111
111
  console.log(result.text); // extracted text
112
112
  console.log(result.metadata); // title, author, etc.
113
113
 
114
+ // PDF — build free-form PDFs with text, shapes, SVG paths
115
+ import { PdfDocumentBuilder } from "@cj-tech-master/excelts/pdf";
116
+ const doc = new PdfDocumentBuilder();
117
+ const page = doc.addPage();
118
+ page.drawText("Hello!", { x: 72, y: 770, fontSize: 24 });
119
+ page.drawSvgPath("M10 10 L90 10 L50 80 Z", { fill: { r: 1, g: 0, b: 0 } });
120
+ page.addAnnotation({ type: "Highlight", rect: [72, 765, 150, 785] });
121
+
122
+ // PDF — edit existing PDFs (overlay, merge, fill forms)
123
+ import { PdfEditor } from "@cj-tech-master/excelts/pdf";
124
+ const editor = PdfEditor.load(existingPdf);
125
+ editor.getPage(0).drawText("Stamp", { x: 200, y: 400, fontSize: 36 });
126
+ editor.setFormField("name", "Jane");
127
+ editor.copyPagesFrom(otherPdf);
128
+
114
129
  // CSV — parse and format
115
130
  import { parseCsv, formatCsv } from "@cj-tech-master/excelts/csv";
116
131
  const rows = parseCsv("name,age\nAlice,30", { headers: true });
@@ -45,7 +45,7 @@ export function ensureZlibSync() {
45
45
  return;
46
46
  }
47
47
  try {
48
- // eslint-disable-next-line @typescript-eslint/no-require-imports
48
+ // oxlint-disable-next-line typescript/no-require-imports
49
49
  _zlib = require("zlib");
50
50
  _zlibInitStarted = true;
51
51
  }
@@ -98,14 +98,6 @@ export interface AesEncryptedComponents {
98
98
  /** HMAC-SHA1 authentication code (10 bytes) */
99
99
  storedHmac: Uint8Array;
100
100
  }
101
- /**
102
- * Get crypto.getRandomValues (works in both Node.js and browsers).
103
- */
104
- export declare function getRandomValues(array: Uint8Array): Uint8Array;
105
- /**
106
- * Generate random bytes.
107
- */
108
- export declare function randomBytes(length: number): Uint8Array;
109
101
  /**
110
102
  * Derive AES keys from password using PBKDF2.
111
103
  *
@@ -14,6 +14,7 @@
14
14
  * Works in both Node.js and browsers using the Web Crypto API.
15
15
  */
16
16
  import { stringToUint8Array as encodeUtf8 } from "../../../utils/binary.js";
17
+ import { randomBytes } from "../../../utils/crypto.browser.js";
17
18
  import { toArrayBuffer } from "../shared/text.js";
18
19
  /**
19
20
  * AES vendor ID for WinZip format.
@@ -84,26 +85,6 @@ function getWebCrypto() {
84
85
  }
85
86
  throw new Error("Web Crypto API not available");
86
87
  }
87
- /**
88
- * Get crypto.getRandomValues (works in both Node.js and browsers).
89
- */
90
- export function getRandomValues(array) {
91
- if (typeof globalThis.crypto?.getRandomValues !== "undefined") {
92
- // Uint8Array's buffer type (ArrayBufferLike) is wider than what the TS lib
93
- // definition of getRandomValues expects (ArrayBuffer). The cast is safe
94
- // because getRandomValues fills the view in-place regardless of buffer type.
95
- globalThis.crypto.getRandomValues(array);
96
- return array;
97
- }
98
- throw new Error("crypto.getRandomValues not available");
99
- }
100
- /**
101
- * Generate random bytes.
102
- */
103
- export function randomBytes(length) {
104
- const bytes = new Uint8Array(length);
105
- return getRandomValues(bytes);
106
- }
107
88
  /**
108
89
  * Derive AES keys from password using PBKDF2.
109
90
  *
@@ -13,5 +13,6 @@
13
13
  * - aesEncryptedSize, buildAesExtraField, randomBytes
14
14
  */
15
15
  export { ZIP_CRYPTO_HEADER_SIZE, zipCryptoInitKeys, zipCryptoDecrypt, zipCryptoEncrypt, zipCryptoCreateHeader, zipCryptoEncryptByte, zipCryptoDecryptByte, zipCryptoCheckPassword as zipCryptoVerifyPassword, type ZipCryptoState } from "./zip-crypto.js";
16
- export { AES_VENDOR_ID, AES_VERSION_AE1, AES_VERSION_AE2, AES_EXTRA_FIELD_ID, AES_SALT_LENGTH, AES_KEY_LENGTH, AES_AUTH_CODE_LENGTH, AES_PASSWORD_VERIFY_LENGTH, COMPRESSION_METHOD_AES, AES_STRENGTH_FROM_BYTE, aesDecrypt, aesEncrypt, aesEncryptedSize, aesVerifyPassword, buildAesExtraField, randomBytes, type AesKeyStrength, type AesExtraFieldInfo } from "./aes.js";
16
+ export { AES_VENDOR_ID, AES_VERSION_AE1, AES_VERSION_AE2, AES_EXTRA_FIELD_ID, AES_SALT_LENGTH, AES_KEY_LENGTH, AES_AUTH_CODE_LENGTH, AES_PASSWORD_VERIFY_LENGTH, COMPRESSION_METHOD_AES, AES_STRENGTH_FROM_BYTE, aesDecrypt, aesEncrypt, aesEncryptedSize, aesVerifyPassword, buildAesExtraField, type AesKeyStrength, type AesExtraFieldInfo } from "./aes.js";
17
+ export { randomBytes } from "../../../utils/crypto.js";
17
18
  export { type ZipEncryptionMethod, type ZipEncryptionInfo, type ZipPasswordOptions, type ZipEncryptionOptions, getEncryptionMethodName, isAesEncryption, getAesKeyStrength, encryptionMethodFromAesKeyStrength } from "./types.js";
@@ -15,6 +15,8 @@
15
15
  // ZipCrypto (Traditional PKWARE Encryption)
16
16
  export { ZIP_CRYPTO_HEADER_SIZE, zipCryptoInitKeys, zipCryptoDecrypt, zipCryptoEncrypt, zipCryptoCreateHeader, zipCryptoEncryptByte, zipCryptoDecryptByte, zipCryptoCheckPassword as zipCryptoVerifyPassword } from "./zip-crypto.js";
17
17
  // AES (WinZip AE-1 / AE-2)
18
- export { AES_VENDOR_ID, AES_VERSION_AE1, AES_VERSION_AE2, AES_EXTRA_FIELD_ID, AES_SALT_LENGTH, AES_KEY_LENGTH, AES_AUTH_CODE_LENGTH, AES_PASSWORD_VERIFY_LENGTH, COMPRESSION_METHOD_AES, AES_STRENGTH_FROM_BYTE, aesDecrypt, aesEncrypt, aesEncryptedSize, aesVerifyPassword, buildAesExtraField, randomBytes } from "./aes.js";
18
+ export { AES_VENDOR_ID, AES_VERSION_AE1, AES_VERSION_AE2, AES_EXTRA_FIELD_ID, AES_SALT_LENGTH, AES_KEY_LENGTH, AES_AUTH_CODE_LENGTH, AES_PASSWORD_VERIFY_LENGTH, COMPRESSION_METHOD_AES, AES_STRENGTH_FROM_BYTE, aesDecrypt, aesEncrypt, aesEncryptedSize, aesVerifyPassword, buildAesExtraField } from "./aes.js";
19
+ // Random bytes — from shared @utils/crypto
20
+ export { randomBytes } from "../../../utils/crypto.browser.js";
19
21
  // Types
20
22
  export { getEncryptionMethodName, isAesEncryption, getAesKeyStrength, encryptionMethodFromAesKeyStrength } from "./types.js";
@@ -49,7 +49,7 @@ export declare function buildRecordInfo(state: ParseState, dataRowIndex: number,
49
49
  /**
50
50
  * Convert a raw row to an object record with optional dynamic typing
51
51
  */
52
- export declare function rowToRecord(row: string[], state: ParseState, config: Pick<ParseConfig, "groupColumnsByName" | "dynamicTyping" | "castDate">): Record<string, string | string[] | unknown>;
52
+ export declare function rowToRecord(row: string[], state: ParseState, config: Pick<ParseConfig, "groupColumnsByName" | "dynamicTyping" | "castDate">): Record<string, unknown>;
53
53
  /**
54
54
  * Check if a row should be skipped (comment or empty)
55
55
  */