pdf-lite 1.0.1-alpha.2 → 1.0.1-alpha.3

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 (721) hide show
  1. package/dist/core/decoder.d.ts +39 -0
  2. package/dist/core/decoder.js +367 -0
  3. package/dist/core/generators.d.ts +37 -0
  4. package/{packages/pdf-lite/src/core/generators.ts → dist/core/generators.js} +36 -67
  5. package/dist/core/incremental-parser.d.ts +103 -0
  6. package/{packages/pdf-lite/src/core/incremental-parser.ts → dist/core/incremental-parser.js} +63 -100
  7. package/dist/core/index.d.ts +2 -0
  8. package/dist/core/index.js +2 -0
  9. package/dist/core/objects/pdf-array.d.ts +12 -0
  10. package/dist/core/objects/pdf-array.js +42 -0
  11. package/dist/core/objects/pdf-boolean.d.ts +8 -0
  12. package/dist/core/objects/pdf-boolean.js +15 -0
  13. package/dist/core/objects/pdf-comment.d.ts +18 -0
  14. package/dist/core/objects/pdf-comment.js +39 -0
  15. package/dist/core/objects/pdf-date.d.ts +5 -0
  16. package/dist/core/objects/pdf-date.js +40 -0
  17. package/dist/core/objects/pdf-dictionary.d.ts +22 -0
  18. package/dist/core/objects/pdf-dictionary.js +136 -0
  19. package/dist/core/objects/pdf-hexadecimal.d.ts +17 -0
  20. package/dist/core/objects/pdf-hexadecimal.js +42 -0
  21. package/dist/core/objects/pdf-indirect-object.d.ts +27 -0
  22. package/dist/core/objects/pdf-indirect-object.js +100 -0
  23. package/dist/core/objects/pdf-name.d.ts +8 -0
  24. package/dist/core/objects/pdf-name.js +15 -0
  25. package/dist/core/objects/pdf-null.d.ts +7 -0
  26. package/dist/core/objects/pdf-null.js +11 -0
  27. package/dist/core/objects/pdf-number.d.ts +25 -0
  28. package/dist/core/objects/pdf-number.js +77 -0
  29. package/dist/core/objects/pdf-object-reference.d.ts +9 -0
  30. package/dist/core/objects/pdf-object-reference.js +19 -0
  31. package/dist/core/objects/pdf-object.d.ts +30 -0
  32. package/dist/core/objects/pdf-object.js +77 -0
  33. package/dist/core/objects/pdf-start-xref.d.ts +10 -0
  34. package/dist/core/objects/pdf-start-xref.js +32 -0
  35. package/dist/core/objects/pdf-stream.d.ts +100 -0
  36. package/dist/core/objects/pdf-stream.js +521 -0
  37. package/dist/core/objects/pdf-string.d.ts +15 -0
  38. package/dist/core/objects/pdf-string.js +30 -0
  39. package/dist/core/objects/pdf-trailer.d.ts +26 -0
  40. package/dist/core/objects/pdf-trailer.js +33 -0
  41. package/dist/core/objects/pdf-xref-table.d.ts +48 -0
  42. package/dist/core/objects/pdf-xref-table.js +183 -0
  43. package/{packages/pdf-lite/src/core/parser.ts → dist/core/parser.d.ts} +3 -4
  44. package/dist/core/parser.js +9 -0
  45. package/dist/core/ref.d.ts +59 -0
  46. package/{packages/pdf-lite/src/core/ref.ts → dist/core/ref.js} +23 -41
  47. package/dist/core/serializer.d.ts +36 -0
  48. package/{packages/pdf-lite/src/core/serializer.ts → dist/core/serializer.js} +20 -30
  49. package/dist/core/streams/object-stream.d.ts +6 -0
  50. package/dist/core/streams/object-stream.js +15 -0
  51. package/dist/core/tokeniser.d.ts +98 -0
  52. package/dist/core/tokeniser.js +552 -0
  53. package/dist/core/tokens/boolean-token.d.ts +8 -0
  54. package/dist/core/tokens/boolean-token.js +15 -0
  55. package/dist/core/tokens/byte-offset-token.d.ts +8 -0
  56. package/dist/core/tokens/byte-offset-token.js +15 -0
  57. package/dist/core/tokens/comment-token.d.ts +10 -0
  58. package/dist/core/tokens/comment-token.js +26 -0
  59. package/dist/core/tokens/end-array-token.d.ts +4 -0
  60. package/dist/core/tokens/end-array-token.js +8 -0
  61. package/dist/core/tokens/end-dictionary-token.d.ts +4 -0
  62. package/dist/core/tokens/end-dictionary-token.js +8 -0
  63. package/dist/core/tokens/end-object-token.d.ts +4 -0
  64. package/dist/core/tokens/end-object-token.js +8 -0
  65. package/dist/core/tokens/end-stream-token.d.ts +5 -0
  66. package/dist/core/tokens/end-stream-token.js +8 -0
  67. package/dist/core/tokens/hexadecimal-token.d.ts +7 -0
  68. package/dist/core/tokens/hexadecimal-token.js +16 -0
  69. package/dist/core/tokens/name-token.d.ts +6 -0
  70. package/dist/core/tokens/name-token.js +15 -0
  71. package/dist/core/tokens/null-token.d.ts +4 -0
  72. package/dist/core/tokens/null-token.js +8 -0
  73. package/dist/core/tokens/number-token.d.ts +24 -0
  74. package/dist/core/tokens/number-token.js +104 -0
  75. package/dist/core/tokens/object-reference-token.d.ts +7 -0
  76. package/dist/core/tokens/object-reference-token.js +17 -0
  77. package/dist/core/tokens/start-array-token.d.ts +4 -0
  78. package/dist/core/tokens/start-array-token.js +8 -0
  79. package/dist/core/tokens/start-dictionary-token.d.ts +4 -0
  80. package/dist/core/tokens/start-dictionary-token.js +8 -0
  81. package/dist/core/tokens/start-object-token.d.ts +8 -0
  82. package/dist/core/tokens/start-object-token.js +17 -0
  83. package/dist/core/tokens/start-stream-token.d.ts +8 -0
  84. package/dist/core/tokens/start-stream-token.js +38 -0
  85. package/dist/core/tokens/start-xref-token.d.ts +4 -0
  86. package/dist/core/tokens/start-xref-token.js +8 -0
  87. package/dist/core/tokens/stream-chunk-token.d.ts +5 -0
  88. package/dist/core/tokens/stream-chunk-token.js +6 -0
  89. package/dist/core/tokens/string-token.d.ts +7 -0
  90. package/dist/core/tokens/string-token.js +13 -0
  91. package/dist/core/tokens/token.d.ts +10 -0
  92. package/dist/core/tokens/token.js +32 -0
  93. package/dist/core/tokens/trailer-token.d.ts +5 -0
  94. package/dist/core/tokens/trailer-token.js +10 -0
  95. package/dist/core/tokens/whitespace-token.d.ts +11 -0
  96. package/dist/core/tokens/whitespace-token.js +36 -0
  97. package/dist/core/tokens/xref-table-entry-token.d.ts +13 -0
  98. package/dist/core/tokens/xref-table-entry-token.js +40 -0
  99. package/dist/core/tokens/xref-table-section-start-token.d.ts +8 -0
  100. package/dist/core/tokens/xref-table-section-start-token.js +21 -0
  101. package/dist/core/tokens/xref-table-start-token.d.ts +5 -0
  102. package/dist/core/tokens/xref-table-start-token.js +10 -0
  103. package/dist/crypto/ciphers/aes128.d.ts +19 -0
  104. package/{packages/pdf-lite/src/crypto/ciphers/aes128.ts → dist/crypto/ciphers/aes128.js} +17 -27
  105. package/dist/crypto/ciphers/aes256.d.ts +18 -0
  106. package/{packages/pdf-lite/src/crypto/ciphers/aes256.ts → dist/crypto/ciphers/aes256.js} +14 -17
  107. package/dist/crypto/ciphers/rc4.d.ts +18 -0
  108. package/{packages/pdf-lite/src/crypto/ciphers/rc4.ts → dist/crypto/ciphers/rc4.js} +25 -30
  109. package/dist/crypto/constants.d.ts +6 -0
  110. package/{packages/pdf-lite/src/crypto/constants.ts → dist/crypto/constants.js} +1 -1
  111. package/dist/crypto/key-derivation/key-derivation-aes256.d.ts +56 -0
  112. package/dist/crypto/key-derivation/key-derivation-aes256.js +156 -0
  113. package/dist/crypto/key-derivation/key-derivation.d.ts +42 -0
  114. package/{packages/pdf-lite/src/crypto/key-derivation/key-derivation.ts → dist/crypto/key-derivation/key-derivation.js} +35 -66
  115. package/dist/crypto/key-gen/key-gen-aes256.d.ts +36 -0
  116. package/{packages/pdf-lite/src/crypto/key-gen/key-gen-aes256.ts → dist/crypto/key-gen/key-gen-aes256.js} +25 -50
  117. package/dist/crypto/key-gen/key-gen-rc4-128.d.ts +47 -0
  118. package/{packages/pdf-lite/src/crypto/key-gen/key-gen-rc4-128.ts → dist/crypto/key-gen/key-gen-rc4-128.js} +45 -106
  119. package/dist/crypto/key-gen/key-gen-rc4-40.d.ts +60 -0
  120. package/{packages/pdf-lite/src/crypto/key-gen/key-gen-rc4-40.ts → dist/crypto/key-gen/key-gen-rc4-40.js} +26 -62
  121. package/dist/crypto/types.d.ts +5 -0
  122. package/dist/crypto/types.js +1 -0
  123. package/dist/crypto/utils.d.ts +40 -0
  124. package/{packages/pdf-lite/src/crypto/utils.ts → dist/crypto/utils.js} +27 -36
  125. package/dist/filters/ascii85.d.ts +16 -0
  126. package/{packages/pdf-lite/src/filters/ascii85.ts → dist/filters/ascii85.js} +41 -65
  127. package/dist/filters/asciihex.d.ts +16 -0
  128. package/{packages/pdf-lite/src/filters/asciihex.ts → dist/filters/asciihex.js} +18 -19
  129. package/dist/filters/flate.d.ts +15 -0
  130. package/{packages/pdf-lite/src/filters/flate.ts → dist/filters/flate.js} +7 -10
  131. package/dist/filters/lzw.d.ts +16 -0
  132. package/dist/filters/lzw.js +150 -0
  133. package/dist/filters/pass-through.d.ts +14 -0
  134. package/{packages/pdf-lite/src/filters/pass-through.ts → dist/filters/pass-through.js} +6 -9
  135. package/dist/filters/runlength.d.ts +16 -0
  136. package/{packages/pdf-lite/src/filters/runlength.ts → dist/filters/runlength.js} +36 -40
  137. package/dist/filters/types.d.ts +18 -0
  138. package/{packages/pdf-lite/src/filters/types.ts → dist/filters/types.js} +1 -10
  139. package/dist/index.d.ts +4 -0
  140. package/dist/index.js +4 -0
  141. package/dist/pdf/errors.d.ts +6 -0
  142. package/{packages/pdf-lite/src/pdf/errors.ts → dist/pdf/errors.js} +2 -1
  143. package/dist/pdf/index.d.ts +4 -0
  144. package/dist/pdf/index.js +4 -0
  145. package/dist/pdf/pdf-document.d.ts +277 -0
  146. package/{packages/pdf-lite/src/pdf/pdf-document.ts → dist/pdf/pdf-document.js} +305 -541
  147. package/dist/pdf/pdf-reader.d.ts +37 -0
  148. package/{packages/pdf-lite/src/pdf/pdf-reader.ts → dist/pdf/pdf-reader.js} +12 -22
  149. package/dist/pdf/pdf-revision.d.ts +101 -0
  150. package/{packages/pdf-lite/src/pdf/pdf-revision.ts → dist/pdf/pdf-revision.js} +70 -105
  151. package/dist/pdf/pdf-xref-lookup.d.ts +149 -0
  152. package/dist/pdf/pdf-xref-lookup.js +402 -0
  153. package/dist/security/crypt-filters/aesv2.d.ts +35 -0
  154. package/{packages/pdf-lite/src/security/crypt-filters/aesv2.ts → dist/security/crypt-filters/aesv2.js} +9 -26
  155. package/dist/security/crypt-filters/aesv3.d.ts +36 -0
  156. package/{packages/pdf-lite/src/security/crypt-filters/aesv3.ts → dist/security/crypt-filters/aesv3.js} +9 -23
  157. package/{packages/pdf-lite/src/security/crypt-filters/base.ts → dist/security/crypt-filters/base.d.ts} +21 -73
  158. package/dist/security/crypt-filters/base.js +93 -0
  159. package/dist/security/crypt-filters/identity.d.ts +28 -0
  160. package/{packages/pdf-lite/src/security/crypt-filters/identity.ts → dist/security/crypt-filters/identity.js} +9 -13
  161. package/dist/security/crypt-filters/v2.d.ts +37 -0
  162. package/{packages/pdf-lite/src/security/crypt-filters/v2.ts → dist/security/crypt-filters/v2.js} +9 -26
  163. package/dist/security/handlers/base.d.ts +304 -0
  164. package/dist/security/handlers/base.js +359 -0
  165. package/dist/security/handlers/pubSec.d.ts +164 -0
  166. package/dist/security/handlers/pubSec.js +299 -0
  167. package/dist/security/handlers/utils.d.ts +77 -0
  168. package/dist/security/handlers/utils.js +244 -0
  169. package/dist/security/handlers/v1.d.ts +81 -0
  170. package/dist/security/handlers/v1.js +135 -0
  171. package/dist/security/handlers/v2.d.ts +63 -0
  172. package/{packages/pdf-lite/src/security/handlers/v2.ts → dist/security/handlers/v2.js} +25 -62
  173. package/dist/security/handlers/v4.d.ts +121 -0
  174. package/dist/security/handlers/v4.js +257 -0
  175. package/dist/security/handlers/v5.d.ts +112 -0
  176. package/dist/security/handlers/v5.js +210 -0
  177. package/{packages/pdf-lite/src/security/types.ts → dist/security/types.d.ts} +72 -94
  178. package/dist/security/types.js +1 -0
  179. package/dist/signing/document-security-store.d.ts +108 -0
  180. package/dist/signing/document-security-store.js +156 -0
  181. package/dist/signing/index.d.ts +3 -0
  182. package/dist/signing/index.js +3 -0
  183. package/dist/signing/signatures/adbe-pkcs7-detached.d.ts +57 -0
  184. package/dist/signing/signatures/adbe-pkcs7-detached.js +117 -0
  185. package/dist/signing/signatures/adbe-pkcs7-sha1.d.ts +55 -0
  186. package/dist/signing/signatures/adbe-pkcs7-sha1.js +121 -0
  187. package/dist/signing/signatures/adbe-x509-rsa-sha1.d.ts +49 -0
  188. package/dist/signing/signatures/adbe-x509-rsa-sha1.js +81 -0
  189. package/dist/signing/signatures/base.d.ts +107 -0
  190. package/dist/signing/signatures/base.js +145 -0
  191. package/dist/signing/signatures/etsi-cades-detached.d.ts +64 -0
  192. package/dist/signing/signatures/etsi-cades-detached.js +159 -0
  193. package/dist/signing/signatures/etsi-rfc3161.d.ts +37 -0
  194. package/{packages/pdf-lite/src/signing/signatures/etsi-rfc3161.ts → dist/signing/signatures/etsi-rfc3161.js} +21 -43
  195. package/dist/signing/signatures/index.d.ts +6 -0
  196. package/dist/signing/signatures/index.js +6 -0
  197. package/dist/signing/signer.d.ts +23 -0
  198. package/dist/signing/signer.js +92 -0
  199. package/{packages/pdf-lite/src/signing/types.ts → dist/signing/types.d.ts} +40 -48
  200. package/dist/signing/types.js +1 -0
  201. package/dist/signing/utils.d.ts +32 -0
  202. package/{packages/pdf-lite/src/signing/utils.ts → dist/signing/utils.js} +12 -31
  203. package/dist/types.d.ts +23 -0
  204. package/dist/types.js +11 -0
  205. package/dist/utils/IterableReadableStream.d.ts +24 -0
  206. package/{packages/pdf-lite/src/utils/IterableReadableStream.ts → dist/utils/IterableReadableStream.js} +6 -6
  207. package/dist/utils/algos.d.ts +242 -0
  208. package/{packages/pdf-lite/src/utils/algos.ts → dist/utils/algos.js} +63 -136
  209. package/dist/utils/assert.d.ts +28 -0
  210. package/{packages/pdf-lite/src/utils/assert.ts → dist/utils/assert.js} +5 -10
  211. package/dist/utils/bytesToHex.d.ts +13 -0
  212. package/{packages/pdf-lite/src/utils/bytesToHex.ts → dist/utils/bytesToHex.js} +4 -6
  213. package/dist/utils/bytesToHexBytes.d.ts +14 -0
  214. package/{packages/pdf-lite/src/utils/bytesToHexBytes.ts → dist/utils/bytesToHexBytes.js} +7 -12
  215. package/dist/utils/bytesToString.d.ts +13 -0
  216. package/{packages/pdf-lite/src/utils/bytesToString.ts → dist/utils/bytesToString.js} +3 -5
  217. package/dist/utils/concatUint8Arrays.d.ts +16 -0
  218. package/{packages/pdf-lite/src/utils/concatUint8Arrays.ts → dist/utils/concatUint8Arrays.js} +7 -9
  219. package/dist/utils/escapeString.d.ts +14 -0
  220. package/dist/utils/escapeString.js +43 -0
  221. package/dist/utils/hexBytesToBytes.d.ts +15 -0
  222. package/{packages/pdf-lite/src/utils/hexBytesToBytes.ts → dist/utils/hexBytesToBytes.js} +4 -6
  223. package/dist/utils/hexBytesToString.d.ts +13 -0
  224. package/{packages/pdf-lite/src/utils/hexBytesToString.ts → dist/utils/hexBytesToString.js} +5 -7
  225. package/dist/utils/hexToBytes.d.ts +13 -0
  226. package/{packages/pdf-lite/src/utils/hexToBytes.ts → dist/utils/hexToBytes.js} +4 -6
  227. package/dist/utils/padBytes.d.ts +15 -0
  228. package/{packages/pdf-lite/src/utils/padBytes.ts → dist/utils/padBytes.js} +5 -9
  229. package/dist/utils/predictors.d.ts +113 -0
  230. package/{packages/pdf-lite/src/utils/predictors.ts → dist/utils/predictors.js} +103 -156
  231. package/dist/utils/replaceInBuffer.d.ts +22 -0
  232. package/{packages/pdf-lite/src/utils/replaceInBuffer.ts → dist/utils/replaceInBuffer.js} +18 -27
  233. package/dist/utils/stringToBytes.d.ts +14 -0
  234. package/{packages/pdf-lite/src/utils/stringToBytes.ts → dist/utils/stringToBytes.js} +6 -7
  235. package/dist/utils/stringToHexBytes.d.ts +15 -0
  236. package/{packages/pdf-lite/src/utils/stringToHexBytes.ts → dist/utils/stringToHexBytes.js} +5 -7
  237. package/dist/utils/unescapeString.d.ts +16 -0
  238. package/dist/utils/unescapeString.js +114 -0
  239. package/package.json +37 -34
  240. package/.commitlintrc.cjs +0 -25
  241. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -40
  242. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -19
  243. package/.github/workflows/docs.yaml +0 -95
  244. package/.github/workflows/prepare-release.yaml +0 -79
  245. package/.github/workflows/release.yaml +0 -80
  246. package/.github/workflows/test.yaml +0 -35
  247. package/.husky/commit-msg +0 -1
  248. package/.husky/pre-commit +0 -1
  249. package/.prettierignore +0 -4
  250. package/.prettierrc +0 -4
  251. package/CONTRIBUTING.md +0 -109
  252. package/EXAMPLES.md +0 -1512
  253. package/docs/README.md +0 -127
  254. package/docs/core/README.md +0 -43
  255. package/docs/core/decoder/README.md +0 -11
  256. package/docs/core/decoder/classes/PdfDecoder.md +0 -362
  257. package/docs/core/generators/README.md +0 -14
  258. package/docs/core/generators/functions/bytesToPdfObjects.md +0 -26
  259. package/docs/core/generators/functions/pdfDecoder.md +0 -36
  260. package/docs/core/generators/functions/pdfDecoderAsync.md +0 -26
  261. package/docs/core/generators/functions/stringToPdfObjects.md +0 -25
  262. package/docs/core/incremental-parser/README.md +0 -13
  263. package/docs/core/incremental-parser/classes/EofReachedError.md +0 -55
  264. package/docs/core/incremental-parser/classes/IncrementalParser.md +0 -299
  265. package/docs/core/incremental-parser/classes/NoMoreTokensError.md +0 -55
  266. package/docs/core/objects/pdf-array/README.md +0 -11
  267. package/docs/core/objects/pdf-array/classes/PdfArray.md +0 -305
  268. package/docs/core/objects/pdf-boolean/README.md +0 -11
  269. package/docs/core/objects/pdf-boolean/classes/PdfBoolean.md +0 -265
  270. package/docs/core/objects/pdf-comment/README.md +0 -11
  271. package/docs/core/objects/pdf-comment/classes/PdfComment.md +0 -329
  272. package/docs/core/objects/pdf-date/README.md +0 -11
  273. package/docs/core/objects/pdf-date/classes/PdfDate.md +0 -317
  274. package/docs/core/objects/pdf-dictionary/README.md +0 -17
  275. package/docs/core/objects/pdf-dictionary/classes/PdfDictionary.md +0 -396
  276. package/docs/core/objects/pdf-dictionary/type-aliases/PdfDictionaryEntries.md +0 -9
  277. package/docs/core/objects/pdf-dictionary/type-aliases/PdfDictionaryEntry.md +0 -9
  278. package/docs/core/objects/pdf-dictionary/type-aliases/PdfDictionaryMap.md +0 -9
  279. package/docs/core/objects/pdf-hexadecimal/README.md +0 -11
  280. package/docs/core/objects/pdf-hexadecimal/classes/PdfHexadecimal.md +0 -320
  281. package/docs/core/objects/pdf-indirect-object/README.md +0 -11
  282. package/docs/core/objects/pdf-indirect-object/classes/PdfIndirectObject.md +0 -411
  283. package/docs/core/objects/pdf-name/README.md +0 -11
  284. package/docs/core/objects/pdf-name/classes/PdfName.md +0 -271
  285. package/docs/core/objects/pdf-null/README.md +0 -11
  286. package/docs/core/objects/pdf-null/classes/PdfNull.md +0 -259
  287. package/docs/core/objects/pdf-number/README.md +0 -12
  288. package/docs/core/objects/pdf-number/classes/PdfByteOffsetNumber.md +0 -369
  289. package/docs/core/objects/pdf-number/classes/PdfNumber.md +0 -345
  290. package/docs/core/objects/pdf-object/README.md +0 -11
  291. package/docs/core/objects/pdf-object/classes/PdfObject.md +0 -214
  292. package/docs/core/objects/pdf-object-reference/README.md +0 -11
  293. package/docs/core/objects/pdf-object-reference/classes/PdfObjectReference.md +0 -279
  294. package/docs/core/objects/pdf-start-xref/README.md +0 -11
  295. package/docs/core/objects/pdf-start-xref/classes/PdfStartXRef.md +0 -265
  296. package/docs/core/objects/pdf-stream/README.md +0 -23
  297. package/docs/core/objects/pdf-stream/classes/PdfObjStream.md +0 -699
  298. package/docs/core/objects/pdf-stream/classes/PdfStream.md +0 -570
  299. package/docs/core/objects/pdf-stream/classes/PdfXRefStream.md +0 -723
  300. package/docs/core/objects/pdf-stream/classes/PdfXRefStreamCompressedEntry.md +0 -51
  301. package/docs/core/objects/pdf-stream/type-aliases/PdfXRefStreamEntry.md +0 -9
  302. package/docs/core/objects/pdf-stream/type-aliases/PdfXRefStreamStandardEntry.md +0 -9
  303. package/docs/core/objects/pdf-stream/variables/PdfXRefStreamStandardEntry.md +0 -9
  304. package/docs/core/objects/pdf-string/README.md +0 -11
  305. package/docs/core/objects/pdf-string/classes/PdfString.md +0 -301
  306. package/docs/core/objects/pdf-trailer/README.md +0 -16
  307. package/docs/core/objects/pdf-trailer/classes/PdfTrailer.md +0 -271
  308. package/docs/core/objects/pdf-trailer/type-aliases/PdfTrailerDictionary.md +0 -9
  309. package/docs/core/objects/pdf-trailer/type-aliases/PdfTrailerEntries.md +0 -51
  310. package/docs/core/objects/pdf-xref-table/README.md +0 -13
  311. package/docs/core/objects/pdf-xref-table/classes/PdfXRefTable.md +0 -331
  312. package/docs/core/objects/pdf-xref-table/classes/PdfXRefTableEntry.md +0 -297
  313. package/docs/core/objects/pdf-xref-table/classes/PdfXRefTableSectionHeader.md +0 -277
  314. package/docs/core/parser/README.md +0 -11
  315. package/docs/core/parser/classes/Parser.md +0 -74
  316. package/docs/core/ref/README.md +0 -15
  317. package/docs/core/ref/classes/Ref.md +0 -149
  318. package/docs/core/ref/type-aliases/RefUpdateCallback.md +0 -33
  319. package/docs/core/serializer/README.md +0 -11
  320. package/docs/core/serializer/classes/PdfTokenSerializer.md +0 -106
  321. package/docs/core/streams/object-stream/README.md +0 -11
  322. package/docs/core/streams/object-stream/classes/PdfObjectStream.md +0 -69
  323. package/docs/core/tokeniser/README.md +0 -21
  324. package/docs/core/tokeniser/classes/PdfByteStreamTokeniser.md +0 -366
  325. package/docs/core/tokeniser/classes/PdfObjectTokeniser.md +0 -69
  326. package/docs/core/tokeniser/functions/objectToTokens.md +0 -25
  327. package/docs/core/tokeniser/functions/pdfObjectStreamTokeniser.md +0 -27
  328. package/docs/core/tokeniser/type-aliases/PdfTokeniser.md +0 -11
  329. package/docs/core/tokens/boolean-token/README.md +0 -11
  330. package/docs/core/tokens/boolean-token/classes/PdfBooleanToken.md +0 -139
  331. package/docs/core/tokens/byte-offset-token/README.md +0 -11
  332. package/docs/core/tokens/byte-offset-token/classes/PdfByteOffsetToken.md +0 -153
  333. package/docs/core/tokens/comment-token/README.md +0 -11
  334. package/docs/core/tokens/comment-token/classes/PdfCommentToken.md +0 -161
  335. package/docs/core/tokens/end-array-token/README.md +0 -11
  336. package/docs/core/tokens/end-array-token/classes/PdfEndArrayToken.md +0 -115
  337. package/docs/core/tokens/end-dictionary-token/README.md +0 -11
  338. package/docs/core/tokens/end-dictionary-token/classes/PdfEndDictionaryToken.md +0 -115
  339. package/docs/core/tokens/end-object-token/README.md +0 -11
  340. package/docs/core/tokens/end-object-token/classes/PdfEndObjectToken.md +0 -115
  341. package/docs/core/tokens/end-stream-token/README.md +0 -11
  342. package/docs/core/tokens/end-stream-token/classes/PdfEndStreamToken.md +0 -121
  343. package/docs/core/tokens/hexadecimal-token/README.md +0 -11
  344. package/docs/core/tokens/hexadecimal-token/classes/PdfHexadecimalToken.md +0 -127
  345. package/docs/core/tokens/name-token/README.md +0 -11
  346. package/docs/core/tokens/name-token/classes/PdfNameToken.md +0 -127
  347. package/docs/core/tokens/null-token/README.md +0 -11
  348. package/docs/core/tokens/null-token/classes/PdfNullToken.md +0 -115
  349. package/docs/core/tokens/number-token/README.md +0 -11
  350. package/docs/core/tokens/number-token/classes/PdfNumberToken.md +0 -271
  351. package/docs/core/tokens/object-reference-token/README.md +0 -11
  352. package/docs/core/tokens/object-reference-token/classes/PdfObjectReferenceToken.md +0 -137
  353. package/docs/core/tokens/start-array-token/README.md +0 -11
  354. package/docs/core/tokens/start-array-token/classes/PdfStartArrayToken.md +0 -115
  355. package/docs/core/tokens/start-dictionary-token/README.md +0 -11
  356. package/docs/core/tokens/start-dictionary-token/classes/PdfStartDictionaryToken.md +0 -115
  357. package/docs/core/tokens/start-object-token/README.md +0 -11
  358. package/docs/core/tokens/start-object-token/classes/PdfStartObjectToken.md +0 -147
  359. package/docs/core/tokens/start-stream-token/README.md +0 -11
  360. package/docs/core/tokens/start-stream-token/classes/PdfStartStreamToken.md +0 -147
  361. package/docs/core/tokens/start-xref-token/README.md +0 -11
  362. package/docs/core/tokens/start-xref-token/classes/PdfStartXRefToken.md +0 -115
  363. package/docs/core/tokens/stream-chunk-token/README.md +0 -11
  364. package/docs/core/tokens/stream-chunk-token/classes/PdfStreamChunkToken.md +0 -121
  365. package/docs/core/tokens/string-token/README.md +0 -11
  366. package/docs/core/tokens/string-token/classes/PdfStringToken.md +0 -127
  367. package/docs/core/tokens/token/README.md +0 -11
  368. package/docs/core/tokens/token/classes/PdfToken.md +0 -116
  369. package/docs/core/tokens/trailer-token/README.md +0 -11
  370. package/docs/core/tokens/trailer-token/classes/PdfTrailerToken.md +0 -127
  371. package/docs/core/tokens/whitespace-token/README.md +0 -11
  372. package/docs/core/tokens/whitespace-token/classes/PdfWhitespaceToken.md +0 -161
  373. package/docs/core/tokens/xref-table-entry-token/README.md +0 -11
  374. package/docs/core/tokens/xref-table-entry-token/classes/PdfXRefTableEntryToken.md +0 -157
  375. package/docs/core/tokens/xref-table-section-start-token/README.md +0 -11
  376. package/docs/core/tokens/xref-table-section-start-token/classes/PdfXRefTableSectionStartToken.md +0 -137
  377. package/docs/core/tokens/xref-table-start-token/README.md +0 -11
  378. package/docs/core/tokens/xref-table-start-token/classes/PdfXRefTableStartToken.md +0 -127
  379. package/docs/crypto/ciphers/aes128/README.md +0 -11
  380. package/docs/crypto/ciphers/aes128/functions/aes128.md +0 -39
  381. package/docs/crypto/ciphers/aes256/README.md +0 -11
  382. package/docs/crypto/ciphers/aes256/functions/aes256.md +0 -35
  383. package/docs/crypto/ciphers/rc4/README.md +0 -11
  384. package/docs/crypto/ciphers/rc4/functions/rc4.md +0 -35
  385. package/docs/crypto/constants/README.md +0 -11
  386. package/docs/crypto/constants/variables/DEFAULT_PADDING.md +0 -13
  387. package/docs/crypto/key-derivation/key-derivation/README.md +0 -13
  388. package/docs/crypto/key-derivation/key-derivation/functions/computeMasterKey.md +0 -57
  389. package/docs/crypto/key-derivation/key-derivation/functions/deriveObjectKey.md +0 -50
  390. package/docs/crypto/key-derivation/key-derivation/functions/padPassword.md +0 -33
  391. package/docs/crypto/key-derivation/key-derivation-aes256/README.md +0 -13
  392. package/docs/crypto/key-derivation/key-derivation-aes256/functions/computeAlgorithm2bHash.md +0 -45
  393. package/docs/crypto/key-derivation/key-derivation-aes256/functions/getFileKey.md +0 -66
  394. package/docs/crypto/key-derivation/key-derivation-aes256/functions/validatePasswordHash.md +0 -52
  395. package/docs/crypto/key-gen/key-gen-aes256/README.md +0 -12
  396. package/docs/crypto/key-gen/key-gen-aes256/functions/generateOandOe.md +0 -44
  397. package/docs/crypto/key-gen/key-gen-aes256/functions/generateUandUe.md +0 -38
  398. package/docs/crypto/key-gen/key-gen-rc4-128/README.md +0 -13
  399. package/docs/crypto/key-gen/key-gen-rc4-128/functions/computeOValueRc4_128.md +0 -38
  400. package/docs/crypto/key-gen/key-gen-rc4-128/functions/computeUValueRc4_128.md +0 -62
  401. package/docs/crypto/key-gen/key-gen-rc4-128/functions/decryptUserPasswordRc4_128.md +0 -38
  402. package/docs/crypto/key-gen/key-gen-rc4-40/README.md +0 -14
  403. package/docs/crypto/key-gen/key-gen-rc4-40/functions/computeEncryptionKeyRc4_40.md +0 -49
  404. package/docs/crypto/key-gen/key-gen-rc4-40/functions/computeORc4_40.md +0 -38
  405. package/docs/crypto/key-gen/key-gen-rc4-40/functions/computeURc4_40.md +0 -50
  406. package/docs/crypto/key-gen/key-gen-rc4-40/functions/decryptUserPasswordRc4_40.md +0 -38
  407. package/docs/crypto/types/README.md +0 -11
  408. package/docs/crypto/types/interfaces/Cipher.md +0 -39
  409. package/docs/crypto/utils/README.md +0 -13
  410. package/docs/crypto/utils/functions/int32ToLittleEndianBytes.md +0 -31
  411. package/docs/crypto/utils/functions/padPassword.md +0 -33
  412. package/docs/crypto/utils/functions/removePdfPasswordPadding.md +0 -32
  413. package/docs/filters/ascii85/README.md +0 -11
  414. package/docs/filters/ascii85/functions/ascii85.md +0 -27
  415. package/docs/filters/asciihex/README.md +0 -11
  416. package/docs/filters/asciihex/functions/asciiHex.md +0 -27
  417. package/docs/filters/flate/README.md +0 -11
  418. package/docs/filters/flate/functions/flate.md +0 -26
  419. package/docs/filters/lzw/README.md +0 -11
  420. package/docs/filters/lzw/functions/lzw.md +0 -27
  421. package/docs/filters/pass-through/README.md +0 -11
  422. package/docs/filters/pass-through/functions/passthroughFilter.md +0 -25
  423. package/docs/filters/runlength/README.md +0 -11
  424. package/docs/filters/runlength/functions/runLength.md +0 -27
  425. package/docs/filters/types/README.md +0 -19
  426. package/docs/filters/types/interfaces/PdfFilter.md +0 -39
  427. package/docs/filters/types/type-aliases/PdfStreamFilterType.md +0 -9
  428. package/docs/filters/types/variables/PDF_FILTER_TYPES.md +0 -51
  429. package/docs/index/README.md +0 -235
  430. package/docs/pdf/README.md +0 -31
  431. package/docs/pdf/errors/README.md +0 -11
  432. package/docs/pdf/errors/classes/FoundCompressedObjectError.md +0 -56
  433. package/docs/pdf/pdf-document/README.md +0 -11
  434. package/docs/pdf/pdf-document/classes/PdfDocument.md +0 -876
  435. package/docs/pdf/pdf-reader/README.md +0 -11
  436. package/docs/pdf/pdf-reader/classes/PdfReader.md +0 -82
  437. package/docs/pdf/pdf-revision/README.md +0 -11
  438. package/docs/pdf/pdf-revision/classes/PdfRevision.md +0 -508
  439. package/docs/pdf/pdf-xref-lookup/README.md +0 -11
  440. package/docs/pdf/pdf-xref-lookup/classes/PdfXrefLookup.md +0 -421
  441. package/docs/security/crypt-filters/aesv2/README.md +0 -11
  442. package/docs/security/crypt-filters/aesv2/classes/AesV2CryptFilter.md +0 -274
  443. package/docs/security/crypt-filters/aesv3/README.md +0 -11
  444. package/docs/security/crypt-filters/aesv3/classes/AesV3CryptFilter.md +0 -275
  445. package/docs/security/crypt-filters/base/README.md +0 -15
  446. package/docs/security/crypt-filters/base/classes/PdfCryptFilter.md +0 -221
  447. package/docs/security/crypt-filters/base/type-aliases/CryptFilterOptions.md +0 -43
  448. package/docs/security/crypt-filters/identity/README.md +0 -11
  449. package/docs/security/crypt-filters/identity/classes/IdentityCryptFilter.md +0 -249
  450. package/docs/security/crypt-filters/v2/README.md +0 -11
  451. package/docs/security/crypt-filters/v2/classes/V2CryptFilter.md +0 -279
  452. package/docs/security/handlers/base/README.md +0 -17
  453. package/docs/security/handlers/base/classes/PdfSecurityHandler.md +0 -384
  454. package/docs/security/handlers/base/classes/PdfStandardSecurityHandler.md +0 -694
  455. package/docs/security/handlers/base/type-aliases/PdfSecurityHandlerOptions.md +0 -27
  456. package/docs/security/handlers/base/type-aliases/PdfStandardSecurityHandlerOptions.md +0 -43
  457. package/docs/security/handlers/pubSec/README.md +0 -11
  458. package/docs/security/handlers/pubSec/classes/PdfPublicKeySecurityHandler.md +0 -503
  459. package/docs/security/handlers/utils/README.md +0 -14
  460. package/docs/security/handlers/utils/functions/createFromDictionary.md +0 -56
  461. package/docs/security/handlers/utils/functions/createFromEncryptionOptions.md +0 -40
  462. package/docs/security/handlers/utils/functions/createStandardSecurityHandlerFromDictionary.md +0 -55
  463. package/docs/security/handlers/utils/functions/getCryptFilter.md +0 -35
  464. package/docs/security/handlers/v1/README.md +0 -11
  465. package/docs/security/handlers/v1/classes/PdfV1SecurityHandler.md +0 -779
  466. package/docs/security/handlers/v2/README.md +0 -11
  467. package/docs/security/handlers/v2/classes/PdfV2SecurityHandler.md +0 -783
  468. package/docs/security/handlers/v4/README.md +0 -11
  469. package/docs/security/handlers/v4/classes/PdfV4SecurityHandler.md +0 -907
  470. package/docs/security/handlers/v5/README.md +0 -11
  471. package/docs/security/handlers/v5/classes/PdfV5SecurityHandler.md +0 -926
  472. package/docs/security/types/README.md +0 -19
  473. package/docs/security/types/type-aliases/CryptFilterType.md +0 -15
  474. package/docs/security/types/type-aliases/PdfCryptFilterDictionary.md +0 -12
  475. package/docs/security/types/type-aliases/PdfEncryptionAlgorithmOptions.md +0 -11
  476. package/docs/security/types/type-aliases/PdfEncryptionAlgorithmType.md +0 -17
  477. package/docs/security/types/type-aliases/PdfEncryptionDictionary.md +0 -13
  478. package/docs/security/types/type-aliases/PdfEncryptionDictionaryObject.md +0 -11
  479. package/docs/security/types/type-aliases/PdfEncryptionOptions.md +0 -90
  480. package/docs/security/types/type-aliases/PdfEncryptionRecipient.md +0 -24
  481. package/docs/security/types/type-aliases/PdfId.md +0 -13
  482. package/docs/signing/README.md +0 -127
  483. package/docs/signing/document-security-store/README.md +0 -19
  484. package/docs/signing/document-security-store/classes/PdfCertObject.md +0 -443
  485. package/docs/signing/document-security-store/classes/PdfCrlObject.md +0 -443
  486. package/docs/signing/document-security-store/classes/PdfDocumentSecurityStoreDictionary.md +0 -416
  487. package/docs/signing/document-security-store/classes/PdfDocumentSecurityStoreObject.md +0 -563
  488. package/docs/signing/document-security-store/classes/PdfOcspObject.md +0 -443
  489. package/docs/signing/document-security-store/type-aliases/PdfVriObject.md +0 -12
  490. package/docs/signing/signatures/README.md +0 -55
  491. package/docs/signing/signatures/adbe-pkcs7-detached/README.md +0 -11
  492. package/docs/signing/signatures/adbe-pkcs7-detached/classes/PdfAdbePkcs7DetachedSignatureObject.md +0 -669
  493. package/docs/signing/signatures/adbe-pkcs7-sha1/README.md +0 -11
  494. package/docs/signing/signatures/adbe-pkcs7-sha1/classes/PdfAdbePkcs7Sha1SignatureObject.md +0 -667
  495. package/docs/signing/signatures/adbe-x509-rsa-sha1/README.md +0 -11
  496. package/docs/signing/signatures/adbe-x509-rsa-sha1/classes/PdfAdbePkcsX509RsaSha1SignatureObject.md +0 -651
  497. package/docs/signing/signatures/base/README.md +0 -16
  498. package/docs/signing/signatures/base/classes/PdfSignatureDictionary.md +0 -420
  499. package/docs/signing/signatures/base/classes/PdfSignatureObject.md +0 -584
  500. package/docs/signing/signatures/base/type-aliases/PdfSignatureSignOptions.md +0 -51
  501. package/docs/signing/signatures/etsi-cades-detached/README.md +0 -11
  502. package/docs/signing/signatures/etsi-cades-detached/classes/PdfEtsiCadesDetachedSignatureObject.md +0 -693
  503. package/docs/signing/signatures/etsi-rfc3161/README.md +0 -11
  504. package/docs/signing/signatures/etsi-rfc3161/classes/PdfEtsiRfc3161SignatureObject.md +0 -614
  505. package/docs/signing/signer/README.md +0 -11
  506. package/docs/signing/signer/classes/PdfSigner.md +0 -58
  507. package/docs/signing/types/README.md +0 -16
  508. package/docs/signing/types/type-aliases/PdfSignatureDictionaryEntries.md +0 -95
  509. package/docs/signing/types/type-aliases/PdfSignatureSubType.md +0 -17
  510. package/docs/signing/types/type-aliases/PdfSignatureType.md +0 -14
  511. package/docs/signing/types/type-aliases/RevocationInfo.md +0 -43
  512. package/docs/signing/types/type-aliases/SignaturePolicyDocument.md +0 -35
  513. package/docs/signing/types/type-aliases/TimeStampAuthority.md +0 -35
  514. package/docs/signing/utils/README.md +0 -11
  515. package/docs/signing/utils/functions/fetchRevocationInfo.md +0 -70
  516. package/docs/types/README.md +0 -21
  517. package/docs/types/type-aliases/ByteArray.md +0 -9
  518. package/docs/types/type-aliases/ChangeType.md +0 -9
  519. package/docs/types/type-aliases/DecodeParms.md +0 -33
  520. package/docs/types/type-aliases/HashAlgorithm.md +0 -9
  521. package/docs/types/type-aliases/PdfEncryptionAlgorithm.md +0 -9
  522. package/docs/types/type-aliases/PdfPermissions.md +0 -63
  523. package/docs/types/type-aliases/PdfVersion.md +0 -9
  524. package/docs/types/variables/PERMISSION_FLAGS.md +0 -9
  525. package/docs/utils/IterableReadableStream/README.md +0 -11
  526. package/docs/utils/IterableReadableStream/classes/IterableReadableStream.md +0 -103
  527. package/docs/utils/algos/README.md +0 -28
  528. package/docs/utils/algos/functions/aes128CbcNoPaddingEncrypt.md +0 -43
  529. package/docs/utils/algos/functions/aes128cbcDecrypt.md +0 -47
  530. package/docs/utils/algos/functions/aes128cbcEncrypt.md +0 -47
  531. package/docs/utils/algos/functions/aes256CbcNoPaddingDecrypt.md +0 -43
  532. package/docs/utils/algos/functions/aes256CbcNoPaddingEncrypt.md +0 -43
  533. package/docs/utils/algos/functions/aes256cbcDecrypt.md +0 -43
  534. package/docs/utils/algos/functions/aes256cbcEncrypt.md +0 -43
  535. package/docs/utils/algos/functions/aes256ecbDecrypt.md +0 -41
  536. package/docs/utils/algos/functions/aes256ecbEncrypt.md +0 -41
  537. package/docs/utils/algos/functions/deflateData.md +0 -31
  538. package/docs/utils/algos/functions/getRandomBytes.md +0 -35
  539. package/docs/utils/algos/functions/hash.md +0 -41
  540. package/docs/utils/algos/functions/inflateData.md +0 -35
  541. package/docs/utils/algos/functions/md5.md +0 -31
  542. package/docs/utils/algos/functions/sha1.md +0 -31
  543. package/docs/utils/algos/functions/sha256.md +0 -31
  544. package/docs/utils/algos/functions/sha384.md +0 -31
  545. package/docs/utils/algos/functions/sha512.md +0 -31
  546. package/docs/utils/assert/README.md +0 -12
  547. package/docs/utils/assert/functions/assert.md +0 -39
  548. package/docs/utils/assert/functions/assertIfDefined.md +0 -46
  549. package/docs/utils/bytesToHex/README.md +0 -11
  550. package/docs/utils/bytesToHex/functions/bytesToHex.md +0 -31
  551. package/docs/utils/bytesToHexBytes/README.md +0 -11
  552. package/docs/utils/bytesToHexBytes/functions/bytesToHexBytes.md +0 -32
  553. package/docs/utils/bytesToString/README.md +0 -11
  554. package/docs/utils/bytesToString/functions/bytesToString.md +0 -31
  555. package/docs/utils/concatUint8Arrays/README.md +0 -11
  556. package/docs/utils/concatUint8Arrays/functions/concatUint8Arrays.md +0 -31
  557. package/docs/utils/escapeString/README.md +0 -11
  558. package/docs/utils/escapeString/functions/escapeString.md +0 -32
  559. package/docs/utils/hexBytesToBytes/README.md +0 -11
  560. package/docs/utils/hexBytesToBytes/functions/hexBytesToBytes.md +0 -33
  561. package/docs/utils/hexBytesToString/README.md +0 -11
  562. package/docs/utils/hexBytesToString/functions/hexBytesToString.md +0 -31
  563. package/docs/utils/hexToBytes/README.md +0 -11
  564. package/docs/utils/hexToBytes/functions/hexToBytes.md +0 -31
  565. package/docs/utils/padBytes/README.md +0 -11
  566. package/docs/utils/padBytes/functions/padBytes.md +0 -41
  567. package/docs/utils/predictors/README.md +0 -11
  568. package/docs/utils/predictors/classes/Predictor.md +0 -306
  569. package/docs/utils/replaceInBuffer/README.md +0 -11
  570. package/docs/utils/replaceInBuffer/functions/replaceInBuffer.md +0 -65
  571. package/docs/utils/stringToBytes/README.md +0 -11
  572. package/docs/utils/stringToBytes/functions/stringToBytes.md +0 -32
  573. package/docs/utils/stringToHexBytes/README.md +0 -11
  574. package/docs/utils/stringToHexBytes/functions/stringToHexBytes.md +0 -33
  575. package/docs/utils/unescapeString/README.md +0 -11
  576. package/docs/utils/unescapeString/functions/unescapeString.md +0 -34
  577. package/examples/001-create-pdf.ts +0 -112
  578. package/examples/002-create-encrypted-pdf.ts +0 -121
  579. package/examples/003-sign-pdf.ts +0 -347
  580. package/examples/004-incremental-update.ts +0 -206
  581. package/examples/005-modify-acroform.ts +0 -374
  582. package/examples/006-tokeniser-example.ts +0 -131
  583. package/examples/007-decoder-example.ts +0 -197
  584. package/packages/pdf-lite/README.md +0 -3
  585. package/packages/pdf-lite/node_modules/.bin/playwright +0 -16
  586. package/packages/pdf-lite/node_modules/.bin/tsc +0 -16
  587. package/packages/pdf-lite/node_modules/.bin/tsserver +0 -16
  588. package/packages/pdf-lite/node_modules/.bin/vitest +0 -16
  589. package/packages/pdf-lite/package.json +0 -68
  590. package/packages/pdf-lite/scripts/create-encryption-tests.sh +0 -41
  591. package/packages/pdf-lite/scripts/gen-signing-keys.sh +0 -290
  592. package/packages/pdf-lite/scripts/generate-all-signing-keys.sh +0 -70
  593. package/packages/pdf-lite/src/core/decoder.ts +0 -454
  594. package/packages/pdf-lite/src/core/index.ts +0 -2
  595. package/packages/pdf-lite/src/core/objects/pdf-array.ts +0 -54
  596. package/packages/pdf-lite/src/core/objects/pdf-boolean.ts +0 -19
  597. package/packages/pdf-lite/src/core/objects/pdf-comment.ts +0 -50
  598. package/packages/pdf-lite/src/core/objects/pdf-date.ts +0 -74
  599. package/packages/pdf-lite/src/core/objects/pdf-dictionary.ts +0 -171
  600. package/packages/pdf-lite/src/core/objects/pdf-hexadecimal.ts +0 -54
  601. package/packages/pdf-lite/src/core/objects/pdf-indirect-object.ts +0 -137
  602. package/packages/pdf-lite/src/core/objects/pdf-name.ts +0 -19
  603. package/packages/pdf-lite/src/core/objects/pdf-null.ts +0 -15
  604. package/packages/pdf-lite/src/core/objects/pdf-number.ts +0 -98
  605. package/packages/pdf-lite/src/core/objects/pdf-object-reference.ts +0 -30
  606. package/packages/pdf-lite/src/core/objects/pdf-object.ts +0 -107
  607. package/packages/pdf-lite/src/core/objects/pdf-start-xref.ts +0 -39
  608. package/packages/pdf-lite/src/core/objects/pdf-stream.ts +0 -687
  609. package/packages/pdf-lite/src/core/objects/pdf-string.ts +0 -38
  610. package/packages/pdf-lite/src/core/objects/pdf-trailer.ts +0 -57
  611. package/packages/pdf-lite/src/core/objects/pdf-xref-table.ts +0 -264
  612. package/packages/pdf-lite/src/core/streams/object-stream.ts +0 -20
  613. package/packages/pdf-lite/src/core/tokeniser.ts +0 -687
  614. package/packages/pdf-lite/src/core/tokens/boolean-token.ts +0 -20
  615. package/packages/pdf-lite/src/core/tokens/byte-offset-token.ts +0 -20
  616. package/packages/pdf-lite/src/core/tokens/comment-token.ts +0 -32
  617. package/packages/pdf-lite/src/core/tokens/end-array-token.ts +0 -10
  618. package/packages/pdf-lite/src/core/tokens/end-dictionary-token.ts +0 -10
  619. package/packages/pdf-lite/src/core/tokens/end-object-token.ts +0 -10
  620. package/packages/pdf-lite/src/core/tokens/end-stream-token.ts +0 -11
  621. package/packages/pdf-lite/src/core/tokens/hexadecimal-token.ts +0 -22
  622. package/packages/pdf-lite/src/core/tokens/name-token.ts +0 -19
  623. package/packages/pdf-lite/src/core/tokens/null-token.ts +0 -9
  624. package/packages/pdf-lite/src/core/tokens/number-token.ts +0 -164
  625. package/packages/pdf-lite/src/core/tokens/object-reference-token.ts +0 -24
  626. package/packages/pdf-lite/src/core/tokens/start-array-token.ts +0 -10
  627. package/packages/pdf-lite/src/core/tokens/start-dictionary-token.ts +0 -10
  628. package/packages/pdf-lite/src/core/tokens/start-object-token.ts +0 -28
  629. package/packages/pdf-lite/src/core/tokens/start-stream-token.ts +0 -52
  630. package/packages/pdf-lite/src/core/tokens/start-xref-token.ts +0 -10
  631. package/packages/pdf-lite/src/core/tokens/stream-chunk-token.ts +0 -8
  632. package/packages/pdf-lite/src/core/tokens/string-token.ts +0 -17
  633. package/packages/pdf-lite/src/core/tokens/token.ts +0 -43
  634. package/packages/pdf-lite/src/core/tokens/trailer-token.ts +0 -12
  635. package/packages/pdf-lite/src/core/tokens/whitespace-token.ts +0 -43
  636. package/packages/pdf-lite/src/core/tokens/xref-table-entry-token.ts +0 -65
  637. package/packages/pdf-lite/src/core/tokens/xref-table-section-start-token.ts +0 -31
  638. package/packages/pdf-lite/src/core/tokens/xref-table-start-token.ts +0 -13
  639. package/packages/pdf-lite/src/crypto/key-derivation/key-derivation-aes256.ts +0 -213
  640. package/packages/pdf-lite/src/crypto/types.ts +0 -6
  641. package/packages/pdf-lite/src/filters/lzw.ts +0 -144
  642. package/packages/pdf-lite/src/index.ts +0 -4
  643. package/packages/pdf-lite/src/pdf/index.ts +0 -4
  644. package/packages/pdf-lite/src/pdf/pdf-xref-lookup.ts +0 -527
  645. package/packages/pdf-lite/src/security/handlers/base.ts +0 -625
  646. package/packages/pdf-lite/src/security/handlers/pubSec.ts +0 -413
  647. package/packages/pdf-lite/src/security/handlers/utils.ts +0 -304
  648. package/packages/pdf-lite/src/security/handlers/v1.ts +0 -225
  649. package/packages/pdf-lite/src/security/handlers/v4.ts +0 -379
  650. package/packages/pdf-lite/src/security/handlers/v5.ts +0 -298
  651. package/packages/pdf-lite/src/signing/document-security-store.ts +0 -224
  652. package/packages/pdf-lite/src/signing/index.ts +0 -3
  653. package/packages/pdf-lite/src/signing/signatures/adbe-pkcs7-detached.ts +0 -154
  654. package/packages/pdf-lite/src/signing/signatures/adbe-pkcs7-sha1.ts +0 -161
  655. package/packages/pdf-lite/src/signing/signatures/adbe-x509-rsa-sha1.ts +0 -106
  656. package/packages/pdf-lite/src/signing/signatures/base.ts +0 -229
  657. package/packages/pdf-lite/src/signing/signatures/etsi-cades-detached.ts +0 -229
  658. package/packages/pdf-lite/src/signing/signatures/index.ts +0 -6
  659. package/packages/pdf-lite/src/signing/signer.ts +0 -120
  660. package/packages/pdf-lite/src/types.ts +0 -44
  661. package/packages/pdf-lite/src/utils/escapeString.ts +0 -49
  662. package/packages/pdf-lite/src/utils/unescapeString.ts +0 -123
  663. package/packages/pdf-lite/test/acceptance/__snapshots__/versions.node.test.ts.snap +0 -60766
  664. package/packages/pdf-lite/test/acceptance/fixtures/1.3/basic.pdf +0 -0
  665. package/packages/pdf-lite/test/acceptance/fixtures/1.4/basic-aes-128.pdf +0 -0
  666. package/packages/pdf-lite/test/acceptance/fixtures/1.4/basic-aes-256.pdf +0 -0
  667. package/packages/pdf-lite/test/acceptance/fixtures/1.4/basic-rc4-128.pdf +0 -0
  668. package/packages/pdf-lite/test/acceptance/fixtures/1.4/basic-rc4-40.pdf +0 -0
  669. package/packages/pdf-lite/test/acceptance/fixtures/1.4/basic.pdf +0 -0
  670. package/packages/pdf-lite/test/acceptance/fixtures/1.5/basic.pdf +0 -0
  671. package/packages/pdf-lite/test/acceptance/fixtures/1.6/basic.pdf +0 -0
  672. package/packages/pdf-lite/test/acceptance/fixtures/1.7/basic.pdf +0 -0
  673. package/packages/pdf-lite/test/acceptance/fixtures/2.0/basic-aes-128.pdf +0 -43
  674. package/packages/pdf-lite/test/acceptance/fixtures/2.0/basic-aes-256.pdf +0 -43
  675. package/packages/pdf-lite/test/acceptance/fixtures/2.0/basic-rc4-128.pdf +0 -43
  676. package/packages/pdf-lite/test/acceptance/fixtures/2.0/basic-rc4-40.pdf +0 -44
  677. package/packages/pdf-lite/test/acceptance/fixtures/2.0/basic.pdf +0 -79
  678. package/packages/pdf-lite/test/acceptance/versions.node.test.ts +0 -41
  679. package/packages/pdf-lite/test/unit/__snapshots__/decoder.node.test.ts.snap +0 -86947
  680. package/packages/pdf-lite/test/unit/__snapshots__/tokeniser.node.test.ts.snap +0 -131829
  681. package/packages/pdf-lite/test/unit/ciphers.test.ts +0 -61
  682. package/packages/pdf-lite/test/unit/decoder.node.test.ts +0 -21
  683. package/packages/pdf-lite/test/unit/decoder.test.ts +0 -567
  684. package/packages/pdf-lite/test/unit/filters.test.ts +0 -67
  685. package/packages/pdf-lite/test/unit/fixtures/basic.pdf +0 -0
  686. package/packages/pdf-lite/test/unit/fixtures/encrypted_v1/basic-aes-128.pdf +0 -0
  687. package/packages/pdf-lite/test/unit/fixtures/encrypted_v1/basic-aes-256.pdf +0 -0
  688. package/packages/pdf-lite/test/unit/fixtures/encrypted_v1/basic-rc4-128.pdf +0 -0
  689. package/packages/pdf-lite/test/unit/fixtures/encrypted_v1/basic-rc4-40.pdf +0 -43
  690. package/packages/pdf-lite/test/unit/fixtures/protectedAdobeLivecycle.pdf +0 -0
  691. package/packages/pdf-lite/test/unit/fixtures/rsa-2048/index.ts +0 -187
  692. package/packages/pdf-lite/test/unit/fixtures/template.pdf +0 -0
  693. package/packages/pdf-lite/test/unit/incremental-update.test.ts +0 -0
  694. package/packages/pdf-lite/test/unit/objects.test.ts +0 -0
  695. package/packages/pdf-lite/test/unit/pdf-document-signing.test.ts +0 -0
  696. package/packages/pdf-lite/test/unit/pdf-revision.test.ts +0 -195
  697. package/packages/pdf-lite/test/unit/pdf.browser.test.ts +0 -0
  698. package/packages/pdf-lite/test/unit/predictors.test.ts +0 -226
  699. package/packages/pdf-lite/test/unit/ref.test.ts +0 -158
  700. package/packages/pdf-lite/test/unit/security-handlers.test.ts +0 -645
  701. package/packages/pdf-lite/test/unit/serializer.test.ts +0 -81
  702. package/packages/pdf-lite/test/unit/signature-objects.test.ts +0 -814
  703. package/packages/pdf-lite/test/unit/string-escaping.test.ts +0 -84
  704. package/packages/pdf-lite/test/unit/tokeniser.node.test.ts +0 -38
  705. package/packages/pdf-lite/test/unit/tokeniser.test.ts +0 -1213
  706. package/packages/pdf-lite/test/unit/utils.test.ts +0 -248
  707. package/packages/pdf-lite/test/unit/xref-lookup.test.ts +0 -72
  708. package/packages/pdf-lite/tsconfig.json +0 -4
  709. package/packages/pdf-lite/tsconfig.prod.json +0 -8
  710. package/packages/pdf-lite/typedoc.json +0 -14
  711. package/packages/pdf-lite/vitest.config.ts +0 -43
  712. package/pnpm-workspace.yaml +0 -2
  713. package/renovate.json +0 -34
  714. package/scripts/build-examples.ts +0 -30
  715. package/scripts/bump-version.sh +0 -56
  716. package/scripts/gen-html-docs.sh +0 -21
  717. package/scripts/gen-md-docs.sh +0 -15
  718. package/scripts/prepare-release.sh +0 -33
  719. package/tsconfig.json +0 -22
  720. package/tsconfig.prod.json +0 -12
  721. package/typedoc.json +0 -34
package/EXAMPLES.md DELETED
@@ -1,1512 +0,0 @@
1
- # PDF-Lite Examples
2
-
3
- This directory contains example scripts demonstrating how to use the PDF-Lite library.
4
-
5
- ## PDF creation from scratch example
6
-
7
- ```typescript
8
- import { writeFileSync } from 'fs'
9
- import { PdfArray } from 'pdf-lite/core/objects/pdf-array'
10
- import { PdfDictionary } from 'pdf-lite/core/objects/pdf-dictionary'
11
- import { PdfIndirectObject } from 'pdf-lite/core/objects/pdf-indirect-object'
12
- import { PdfName } from 'pdf-lite/core/objects/pdf-name'
13
- import { PdfNumber } from 'pdf-lite/core/objects/pdf-number'
14
- import { PdfObjectReference } from 'pdf-lite/core/objects/pdf-object-reference'
15
- import { PdfStream } from 'pdf-lite/core/objects/pdf-stream'
16
- import { PdfDocument } from 'pdf-lite/pdf/pdf-document'
17
-
18
- function createPage(
19
- contentStreamRef: PdfObjectReference,
20
- ): PdfIndirectObject<PdfDictionary> {
21
- const pageDict = new PdfDictionary()
22
- pageDict.set('Type', new PdfName('Page'))
23
- pageDict.set(
24
- 'MediaBox',
25
- new PdfArray([
26
- new PdfNumber(0),
27
- new PdfNumber(0),
28
- new PdfNumber(612),
29
- new PdfNumber(792),
30
- ]),
31
- )
32
- pageDict.set('Contents', contentStreamRef)
33
- return new PdfIndirectObject({ content: pageDict })
34
- }
35
-
36
- function createPages(
37
- pages: PdfIndirectObject<PdfDictionary>[],
38
- ): PdfIndirectObject<PdfDictionary> {
39
- const pagesDict = new PdfDictionary()
40
- pagesDict.set('Type', new PdfName('Pages'))
41
- pagesDict.set('Kids', new PdfArray(pages.map((x) => x.reference)))
42
- pagesDict.set('Count', new PdfNumber(pages.length))
43
- return new PdfIndirectObject({ content: pagesDict })
44
- }
45
-
46
- function createCatalog(
47
- pagesRef: PdfObjectReference,
48
- ): PdfIndirectObject<PdfDictionary> {
49
- const catalogDict = new PdfDictionary()
50
- catalogDict.set('Type', new PdfName('Catalog'))
51
- catalogDict.set('Pages', pagesRef)
52
- return new PdfIndirectObject({ content: catalogDict })
53
- }
54
-
55
- function createFont(): PdfIndirectObject<PdfDictionary> {
56
- const fontDict = new PdfDictionary()
57
- fontDict.set('Type', new PdfName('Font'))
58
- fontDict.set('Subtype', new PdfName('Type1'))
59
- fontDict.set('BaseFont', new PdfName('Helvetica'))
60
- return new PdfIndirectObject({ content: fontDict })
61
- }
62
-
63
- function createResources(
64
- fontRef: PdfObjectReference,
65
- ): PdfIndirectObject<PdfDictionary> {
66
- const resourcesDict = new PdfDictionary()
67
- const fontDict = new PdfDictionary()
68
- fontDict.set('F1', fontRef)
69
- resourcesDict.set('Font', fontDict)
70
- return new PdfIndirectObject({ content: resourcesDict })
71
- }
72
-
73
- // Create the document
74
- const document = new PdfDocument()
75
-
76
- // Create font
77
- const font = createFont()
78
- document.add(font)
79
-
80
- // Create resources with the font
81
- const resources = createResources(font.reference)
82
- document.add(resources)
83
-
84
- // Create content stream
85
- const contentStream = new PdfIndirectObject({
86
- content: new PdfStream({
87
- header: new PdfDictionary(),
88
- original: 'BT /F1 24 Tf 100 700 Td (Hello, PDF-Lite!) Tj ET',
89
- }),
90
- })
91
-
92
- // Create a page
93
- const page = createPage(contentStream.reference)
94
- // Add resources to the page
95
- page.content.set('Resources', resources.reference)
96
- document.add(page)
97
-
98
- // Create pages collection
99
- const pages = createPages([page])
100
- // Set parent reference for the page
101
- page.content.set('Parent', pages.reference)
102
- document.add(pages)
103
-
104
- // Create catalog
105
- const catalog = createCatalog(pages.reference)
106
- document.add(catalog)
107
-
108
- // Set the catalog as the root
109
- document.trailerDict.set('Root', catalog.reference)
110
-
111
- document.add(contentStream)
112
- await document.commit()
113
-
114
- const file = `${import.meta.dirname}/tmp/created.pdf`
115
- console.log(`Writing PDF to: ${file}`)
116
-
117
- await writeFileSync(`${file}`, document.toBytes())
118
- ```
119
-
120
- ## PDF creation with encryption example
121
-
122
- ```typescript
123
- import { writeFileSync } from 'fs'
124
- import { PdfArray } from 'pdf-lite/core/objects/pdf-array'
125
- import { PdfDictionary } from 'pdf-lite/core/objects/pdf-dictionary'
126
- import { PdfIndirectObject } from 'pdf-lite/core/objects/pdf-indirect-object'
127
- import { PdfName } from 'pdf-lite/core/objects/pdf-name'
128
- import { PdfNumber } from 'pdf-lite/core/objects/pdf-number'
129
- import { PdfObjectReference } from 'pdf-lite/core/objects/pdf-object-reference'
130
- import { PdfStream } from 'pdf-lite/core/objects/pdf-stream'
131
- import { PdfDocument } from 'pdf-lite/pdf/pdf-document'
132
- import { PdfV2SecurityHandler } from 'pdf-lite/security/handlers/v2'
133
-
134
- function createPage(
135
- contentStreamRef: PdfObjectReference,
136
- ): PdfIndirectObject<PdfDictionary> {
137
- const pageDict = new PdfDictionary()
138
- pageDict.set('Type', new PdfName('Page'))
139
- pageDict.set(
140
- 'MediaBox',
141
- new PdfArray([
142
- new PdfNumber(0),
143
- new PdfNumber(0),
144
- new PdfNumber(612),
145
- new PdfNumber(792),
146
- ]),
147
- )
148
- pageDict.set('Contents', contentStreamRef)
149
- return new PdfIndirectObject({ content: pageDict })
150
- }
151
-
152
- function createPages(
153
- pages: PdfIndirectObject<PdfDictionary>[],
154
- ): PdfIndirectObject<PdfDictionary> {
155
- const pagesDict = new PdfDictionary()
156
- pagesDict.set('Type', new PdfName('Pages'))
157
- pagesDict.set('Kids', new PdfArray(pages.map((x) => x.reference)))
158
- pagesDict.set('Count', new PdfNumber(pages.length))
159
- return new PdfIndirectObject({ content: pagesDict })
160
- }
161
-
162
- function createCatalog(
163
- pagesRef: PdfObjectReference,
164
- ): PdfIndirectObject<PdfDictionary> {
165
- const catalogDict = new PdfDictionary()
166
- catalogDict.set('Type', new PdfName('Catalog'))
167
- catalogDict.set('Pages', pagesRef)
168
- return new PdfIndirectObject({ content: catalogDict })
169
- }
170
-
171
- function createFont(): PdfIndirectObject<PdfDictionary> {
172
- const fontDict = new PdfDictionary()
173
- fontDict.set('Type', new PdfName('Font'))
174
- fontDict.set('Subtype', new PdfName('Type1'))
175
- fontDict.set('BaseFont', new PdfName('Helvetica'))
176
- return new PdfIndirectObject({ content: fontDict })
177
- }
178
-
179
- function createResources(
180
- fontRef: PdfObjectReference,
181
- ): PdfIndirectObject<PdfDictionary> {
182
- const resourcesDict = new PdfDictionary()
183
- const fontDict = new PdfDictionary()
184
- fontDict.set('F1', fontRef)
185
- resourcesDict.set('Font', fontDict)
186
- return new PdfIndirectObject({ content: resourcesDict })
187
- }
188
-
189
- // Create the document
190
- const document = new PdfDocument()
191
-
192
- // Create font
193
- const font = createFont()
194
- document.add(font)
195
-
196
- // Create resources with the font
197
- const resources = createResources(font.reference)
198
- document.add(resources)
199
-
200
- // Create content stream
201
- const contentStream = new PdfIndirectObject({
202
- content: new PdfStream({
203
- header: new PdfDictionary(),
204
- original: 'BT /F1 24 Tf 100 700 Td (Hello, PDF-Lite!) Tj ET',
205
- }),
206
- })
207
-
208
- // Create a page
209
- const page = createPage(contentStream.reference)
210
- // Add resources to the page
211
- page.content.set('Resources', resources.reference)
212
- document.add(page)
213
-
214
- // Create pages collection
215
- const pages = createPages([page])
216
- // Set parent reference for the page
217
- page.content.set('Parent', pages.reference)
218
- document.add(pages)
219
-
220
- // Create catalog
221
- const catalog = createCatalog(pages.reference)
222
- document.add(catalog)
223
-
224
- // Set the catalog as the root
225
- document.trailerDict.set('Root', catalog.reference)
226
-
227
- document.add(contentStream)
228
- await document.commit()
229
-
230
- document.securityHandler = new PdfV2SecurityHandler({
231
- password: 'up',
232
- documentId: 'cafebabe',
233
- encryptMetadata: true,
234
- })
235
-
236
- await document.encrypt()
237
-
238
- const file = `${import.meta.dirname}/tmp/encrypted.pdf`
239
- console.log(`Writing encrypted PDF to: ${file}. Password: "up"`)
240
-
241
- await writeFileSync(`${file}`, document.toBytes())
242
- ```
243
-
244
- ## PDF signature example
245
-
246
- ```typescript
247
- import { PdfArray } from 'pdf-lite/core/objects/pdf-array'
248
- import { PdfDictionary } from 'pdf-lite/core/objects/pdf-dictionary'
249
- import { PdfIndirectObject } from 'pdf-lite/core/objects/pdf-indirect-object'
250
- import { PdfName } from 'pdf-lite/core/objects/pdf-name'
251
- import { PdfNumber } from 'pdf-lite/core/objects/pdf-number'
252
- import { PdfObjectReference } from 'pdf-lite/core/objects/pdf-object-reference'
253
- import { PdfStream } from 'pdf-lite/core/objects/pdf-stream'
254
- import { PdfDocument } from 'pdf-lite/pdf/pdf-document'
255
- import { PdfString } from 'pdf-lite/core/objects/pdf-string'
256
- import {
257
- PdfAdbePkcsX509RsaSha1SignatureObject,
258
- PdfAdbePkcs7DetachedSignatureObject,
259
- PdfAdbePkcs7Sha1SignatureObject,
260
- PdfEtsiCadesDetachedSignatureObject,
261
- PdfEtsiRfc3161SignatureObject,
262
- } from 'pdf-lite'
263
- import { rsaSigningKeys } from '../packages/pdf-lite/test/unit/fixtures/rsa-2048/index'
264
- import fs from 'fs/promises'
265
-
266
- function createPage(
267
- contentStreamRef: PdfObjectReference,
268
- ): PdfIndirectObject<PdfDictionary> {
269
- const pageDict = new PdfDictionary()
270
- pageDict.set('Type', new PdfName('Page'))
271
- pageDict.set(
272
- 'MediaBox',
273
- new PdfArray([
274
- new PdfNumber(0),
275
- new PdfNumber(0),
276
- new PdfNumber(612),
277
- new PdfNumber(792),
278
- ]),
279
- )
280
- pageDict.set('Contents', contentStreamRef)
281
- return new PdfIndirectObject({ content: pageDict })
282
- }
283
-
284
- function createPages(
285
- pages: PdfIndirectObject<PdfDictionary>[],
286
- ): PdfIndirectObject<PdfDictionary> {
287
- const pagesDict = new PdfDictionary()
288
- pagesDict.set('Type', new PdfName('Pages'))
289
- pagesDict.set('Kids', new PdfArray(pages.map((x) => x.reference)))
290
- pagesDict.set('Count', new PdfNumber(pages.length))
291
- return new PdfIndirectObject({ content: pagesDict })
292
- }
293
-
294
- function createCatalog(
295
- pagesRef: PdfObjectReference,
296
- ): PdfIndirectObject<PdfDictionary> {
297
- const catalogDict = new PdfDictionary()
298
- catalogDict.set('Type', new PdfName('Catalog'))
299
- catalogDict.set('Pages', pagesRef)
300
- return new PdfIndirectObject({ content: catalogDict })
301
- }
302
-
303
- function createFont(): PdfIndirectObject<PdfDictionary> {
304
- const fontDict = new PdfDictionary()
305
- fontDict.set('Type', new PdfName('Font'))
306
- fontDict.set('Subtype', new PdfName('Type1'))
307
- fontDict.set('BaseFont', new PdfName('Helvetica'))
308
- return new PdfIndirectObject({ content: fontDict })
309
- }
310
-
311
- function createResources(
312
- fontRef: PdfObjectReference,
313
- ): PdfIndirectObject<PdfDictionary> {
314
- const resourcesDict = new PdfDictionary()
315
- const fontDict = new PdfDictionary()
316
- fontDict.set('F1', fontRef)
317
- resourcesDict.set('Font', fontDict)
318
- return new PdfIndirectObject({ content: resourcesDict })
319
- }
320
-
321
- function createPageWithSignatureField(
322
- contentStreamRef: PdfObjectReference,
323
- signatureAnnotRef: PdfObjectReference,
324
- ): PdfIndirectObject<PdfDictionary> {
325
- const pageDict = new PdfDictionary()
326
- pageDict.set('Type', new PdfName('Page'))
327
- pageDict.set(
328
- 'MediaBox',
329
- new PdfArray([
330
- new PdfNumber(0),
331
- new PdfNumber(0),
332
- new PdfNumber(612),
333
- new PdfNumber(792),
334
- ]),
335
- )
336
- pageDict.set('Contents', contentStreamRef)
337
- pageDict.set('Annots', new PdfArray([signatureAnnotRef]))
338
-
339
- return new PdfIndirectObject({ content: pageDict })
340
- }
341
-
342
- function createSignatureAnnotation(
343
- signatureRef: PdfObjectReference,
344
- appearanceStreamRef: PdfObjectReference,
345
- pageRef: PdfObjectReference,
346
- signatureName: string,
347
- ): PdfIndirectObject<PdfDictionary> {
348
- const signatureAnnotation = new PdfDictionary()
349
- signatureAnnotation.set('Type', new PdfName('Annot'))
350
- signatureAnnotation.set('Subtype', new PdfName('Widget'))
351
- signatureAnnotation.set('FT', new PdfName('Sig'))
352
- signatureAnnotation.set('T', new PdfString(signatureName))
353
- signatureAnnotation.set(
354
- 'Rect',
355
- new PdfArray([
356
- new PdfNumber(135), // x1: Start after "Signature: " text (~72 + 63)
357
- new PdfNumber(640), // y1: Bottom of signature area (652 - 12)
358
- new PdfNumber(400), // x2: End of signature line
359
- new PdfNumber(665), // y2: Top of signature area (652 + 13)
360
- ]),
361
- )
362
- signatureAnnotation.set('F', new PdfNumber(4))
363
- signatureAnnotation.set('P', pageRef) // Reference to parent page
364
- signatureAnnotation.set('V', signatureRef)
365
-
366
- // Add appearance dictionary
367
- const appearanceDict = new PdfDictionary()
368
- appearanceDict.set('N', appearanceStreamRef)
369
- signatureAnnotation.set('AP', appearanceDict)
370
-
371
- return new PdfIndirectObject({ content: signatureAnnotation })
372
- }
373
-
374
- function createSignatureAppearance(): PdfIndirectObject<PdfStream> {
375
- // Create font for appearance
376
- const appearanceFont = new PdfDictionary()
377
- appearanceFont.set('Type', new PdfName('Font'))
378
- appearanceFont.set('Subtype', new PdfName('Type1'))
379
- appearanceFont.set('BaseFont', new PdfName('Helvetica'))
380
-
381
- const fontDict = new PdfDictionary()
382
- fontDict.set('F1', appearanceFont)
383
-
384
- const resourcesDict = new PdfDictionary()
385
- resourcesDict.set('Font', fontDict)
386
-
387
- // Create appearance stream header
388
- const appearanceHeader = new PdfDictionary()
389
- appearanceHeader.set('Type', new PdfName('XObject'))
390
- appearanceHeader.set('Subtype', new PdfName('Form'))
391
- appearanceHeader.set(
392
- 'BBox',
393
- new PdfArray([
394
- new PdfNumber(0),
395
- new PdfNumber(0),
396
- new PdfNumber(265), // Width: 400 - 135
397
- new PdfNumber(25), // Height: 665 - 640
398
- ]),
399
- )
400
- appearanceHeader.set('Resources', resourcesDict)
401
-
402
- // Create appearance stream for the signature
403
- return new PdfIndirectObject({
404
- content: new PdfStream({
405
- header: appearanceHeader,
406
- original:
407
- 'BT /F1 10 Tf 5 14 Td (Digitally signed by: Jake Shirley) Tj ET',
408
- }),
409
- })
410
- }
411
-
412
- // Create the document
413
- const document = new PdfDocument()
414
-
415
- // Create font
416
- const font = createFont()
417
- document.add(font)
418
-
419
- // Create resources with the font
420
- const resources = createResources(font.reference)
421
- document.add(resources)
422
-
423
- // Create content stream for first page
424
- const contentStream = new PdfIndirectObject({
425
- content: new PdfStream({
426
- header: new PdfDictionary(),
427
- original: 'BT /F1 24 Tf 100 700 Td (Hello, PDF-Lite!) Tj ET',
428
- }),
429
- })
430
- document.add(contentStream)
431
-
432
- // Create first page
433
- const page1 = createPage(contentStream.reference)
434
- page1.content.set('Resources', resources.reference)
435
- document.add(page1)
436
-
437
- // Array to hold all pages and signature objects
438
- const allPages: PdfIndirectObject<PdfDictionary>[] = [page1]
439
- const allSignatures: any[] = []
440
- const signatureFields: PdfObjectReference[] = []
441
-
442
- // Helper function to create a signature page
443
- function createSignaturePage(
444
- signatureType: string,
445
- signatureObj: any,
446
- pageNumber: number,
447
- ) {
448
- const content = new PdfIndirectObject({
449
- content: new PdfStream({
450
- header: new PdfDictionary(),
451
- original: `BT /F1 12 Tf 72 712 Td (Signature Type: ${signatureType}) Tj 0 -60 Td (Signature: ________________________________) Tj ET`,
452
- }),
453
- })
454
- document.add(content)
455
-
456
- const appearance = createSignatureAppearance()
457
- document.add(appearance)
458
-
459
- // Create page first to get its reference
460
- const page = createPageWithSignatureField(
461
- content.reference,
462
- new PdfObjectReference(0, 0), // Temporary placeholder
463
- )
464
- page.content.set('Resources', resources.reference)
465
- document.add(page)
466
-
467
- // Now create annotation with page reference
468
- const annotation = createSignatureAnnotation(
469
- signatureObj.reference,
470
- appearance.reference,
471
- page.reference,
472
- `Signature${pageNumber}`,
473
- )
474
- document.add(annotation)
475
-
476
- // Update page's Annots array with actual annotation reference
477
- page.content.set('Annots', new PdfArray([annotation.reference]))
478
-
479
- signatureFields.push(annotation.reference)
480
- return page
481
- }
482
-
483
- // Page 2: Adobe PKCS7 Detached
484
- const pkcs7DetachedSig = new PdfAdbePkcs7DetachedSignatureObject({
485
- privateKey: rsaSigningKeys.privateKey,
486
- certificate: rsaSigningKeys.cert,
487
- issuerCertificate: rsaSigningKeys.caCert,
488
- name: 'Jake Shirley',
489
- location: 'Earth',
490
- reason: 'PKCS7 Detached Signature',
491
- contactInfo: 'test@test.com',
492
- revocationInfo: {
493
- crls: [rsaSigningKeys.caCrl],
494
- ocsps: [rsaSigningKeys.ocspResponse],
495
- },
496
- })
497
- allSignatures.push(pkcs7DetachedSig)
498
- allPages.push(createSignaturePage('Adobe PKCS7 Detached', pkcs7DetachedSig, 2))
499
-
500
- // Page 3: Adobe PKCS7 SHA1
501
- const pkcs7Sha1Sig = new PdfAdbePkcs7Sha1SignatureObject({
502
- privateKey: rsaSigningKeys.privateKey,
503
- certificate: rsaSigningKeys.cert,
504
- issuerCertificate: rsaSigningKeys.caCert,
505
- name: 'Jake Shirley',
506
- location: 'Earth',
507
- reason: 'PKCS7 SHA1 Signature',
508
- contactInfo: 'test@test.com',
509
- })
510
- allSignatures.push(pkcs7Sha1Sig)
511
- allPages.push(createSignaturePage('Adobe PKCS7 SHA1', pkcs7Sha1Sig, 3))
512
-
513
- // Page 4: Adobe X509 RSA SHA1
514
- const x509RsaSha1Sig = new PdfAdbePkcsX509RsaSha1SignatureObject({
515
- privateKey: rsaSigningKeys.privateKey,
516
- certificate: rsaSigningKeys.cert,
517
- additionalCertificates: [rsaSigningKeys.caCert],
518
- name: 'Jake Shirley',
519
- location: 'Earth',
520
- reason: 'X509 RSA SHA1 Signature',
521
- contactInfo: 'test@test.com',
522
- revocationInfo: {
523
- crls: [rsaSigningKeys.caCrl],
524
- ocsps: [rsaSigningKeys.ocspResponse],
525
- },
526
- })
527
- allSignatures.push(x509RsaSha1Sig)
528
- allPages.push(createSignaturePage('Adobe X509 RSA SHA1', x509RsaSha1Sig, 4))
529
-
530
- // Page 5: ETSI CAdES Detached
531
- const cadesDetachedSig = new PdfEtsiCadesDetachedSignatureObject({
532
- privateKey: rsaSigningKeys.privateKey,
533
- certificate: rsaSigningKeys.cert,
534
- issuerCertificate: rsaSigningKeys.caCert,
535
- name: 'Jake Shirley',
536
- location: 'Earth',
537
- reason: 'CAdES Detached Signature',
538
- contactInfo: 'test@test.com',
539
- revocationInfo: {
540
- crls: [rsaSigningKeys.caCrl],
541
- ocsps: [rsaSigningKeys.ocspResponse],
542
- },
543
- })
544
- allSignatures.push(cadesDetachedSig)
545
- allPages.push(createSignaturePage('ETSI CAdES Detached', cadesDetachedSig, 5))
546
-
547
- // Page 6: ETSI RFC3161 (Timestamp)
548
- const rfc3161Sig = new PdfEtsiRfc3161SignatureObject({
549
- timeStampAuthority: {
550
- url: 'https://freetsa.org/tsr',
551
- },
552
- })
553
- allSignatures.push(rfc3161Sig)
554
- allPages.push(createSignaturePage('ETSI RFC3161 Timestamp', rfc3161Sig, 6))
555
-
556
- // Create pages collection with all pages
557
- const pages = createPages(allPages)
558
- // Set parent reference for all pages
559
- allPages.forEach((page) => {
560
- page.content.set('Parent', pages.reference)
561
- })
562
- document.add(pages)
563
-
564
- // Create catalog with AcroForm
565
- const catalog = createCatalog(pages.reference)
566
-
567
- // Add AcroForm to catalog with all signature fields
568
- const acroForm = new PdfDictionary()
569
- acroForm.set('Fields', new PdfArray(signatureFields))
570
- acroForm.set('SigFlags', new PdfNumber(3))
571
- const acroFormObj = new PdfIndirectObject({ content: acroForm })
572
- document.add(acroFormObj)
573
- catalog.content.set('AcroForm', acroFormObj.reference)
574
-
575
- document.add(catalog)
576
-
577
- // Set the catalog as the root
578
- document.trailerDict.set('Root', catalog.reference)
579
-
580
- // IMPORTANT: Add all signatures LAST - after all other objects
581
- // This ensures the ByteRange is calculated correctly for each signature
582
- allSignatures.forEach((sig) => {
583
- document.startNewRevision()
584
- document.add(sig)
585
- })
586
-
587
- await document.commit()
588
-
589
- const tmpFolder = `${import.meta.dirname}/tmp`
590
- await fs.mkdir(tmpFolder, { recursive: true })
591
- await fs.writeFile(`${tmpFolder}/signed-output.pdf`, document.toBytes())
592
- ```
593
-
594
- ## Incremental PDF update example
595
-
596
- ```typescript
597
- import { PdfArray } from 'pdf-lite/core/objects/pdf-array'
598
- import { PdfDictionary } from 'pdf-lite/core/objects/pdf-dictionary'
599
- import { PdfIndirectObject } from 'pdf-lite/core/objects/pdf-indirect-object'
600
- import { PdfName } from 'pdf-lite/core/objects/pdf-name'
601
- import { PdfNumber } from 'pdf-lite/core/objects/pdf-number'
602
- import { PdfObjectReference } from 'pdf-lite/core/objects/pdf-object-reference'
603
- import { PdfStream } from 'pdf-lite/core/objects/pdf-stream'
604
- import { PdfDocument } from 'pdf-lite/pdf/pdf-document'
605
- import fs from 'fs/promises'
606
-
607
- const tmpFolder = `${import.meta.dirname}/tmp`
608
- await fs.mkdir(tmpFolder, { recursive: true })
609
-
610
- // Helper functions for creating PDF objects
611
- function createPage(
612
- contentStreamRef: PdfObjectReference,
613
- ): PdfIndirectObject<PdfDictionary> {
614
- const pageDict = new PdfDictionary()
615
- pageDict.set('Type', new PdfName('Page'))
616
- pageDict.set(
617
- 'MediaBox',
618
- new PdfArray([
619
- new PdfNumber(0),
620
- new PdfNumber(0),
621
- new PdfNumber(612),
622
- new PdfNumber(792),
623
- ]),
624
- )
625
- pageDict.set('Contents', contentStreamRef)
626
- return new PdfIndirectObject({ content: pageDict })
627
- }
628
-
629
- function createPages(
630
- pages: PdfIndirectObject<PdfDictionary>[],
631
- ): PdfIndirectObject<PdfDictionary> {
632
- const pagesDict = new PdfDictionary()
633
- pagesDict.set('Type', new PdfName('Pages'))
634
- pagesDict.set('Kids', new PdfArray(pages.map((x) => x.reference)))
635
- pagesDict.set('Count', new PdfNumber(pages.length))
636
- return new PdfIndirectObject({ content: pagesDict })
637
- }
638
-
639
- function createCatalog(
640
- pagesRef: PdfObjectReference,
641
- ): PdfIndirectObject<PdfDictionary> {
642
- const catalogDict = new PdfDictionary()
643
- catalogDict.set('Type', new PdfName('Catalog'))
644
- catalogDict.set('Pages', pagesRef)
645
- return new PdfIndirectObject({ content: catalogDict })
646
- }
647
-
648
- function createFont(): PdfIndirectObject<PdfDictionary> {
649
- const fontDict = new PdfDictionary()
650
- fontDict.set('Type', new PdfName('Font'))
651
- fontDict.set('Subtype', new PdfName('Type1'))
652
- fontDict.set('BaseFont', new PdfName('Helvetica'))
653
- return new PdfIndirectObject({ content: fontDict })
654
- }
655
-
656
- function createResources(
657
- fontRef: PdfObjectReference,
658
- ): PdfIndirectObject<PdfDictionary> {
659
- const resourcesDict = new PdfDictionary()
660
- const fontDict = new PdfDictionary()
661
- fontDict.set('F1', fontRef)
662
- resourcesDict.set('Font', fontDict)
663
- return new PdfIndirectObject({ content: resourcesDict })
664
- }
665
-
666
- // Step 1: Create an initial PDF document
667
- console.log('Step 1: Creating initial PDF document...')
668
- const document = new PdfDocument()
669
-
670
- const font = createFont()
671
- document.add(font)
672
- const resources = createResources(font.reference)
673
- document.add(resources)
674
-
675
- const contentStream = new PdfIndirectObject({
676
- content: new PdfStream({
677
- header: new PdfDictionary(),
678
- original:
679
- 'BT /F1 24 Tf 100 700 Td (Original Document - Revision 1) Tj ET',
680
- }),
681
- })
682
-
683
- const page = createPage(contentStream.reference)
684
- page.content.set('Resources', resources.reference)
685
- document.add(page)
686
-
687
- const pages = createPages([page])
688
- page.content.set('Parent', pages.reference)
689
- document.add(pages)
690
-
691
- const catalog = createCatalog(pages.reference)
692
- document.add(catalog)
693
-
694
- document.trailerDict.set('Root', catalog.reference)
695
- document.add(contentStream)
696
-
697
- await document.commit()
698
- // Save the original PDF
699
- const originalPdfPath = `${tmpFolder}/original.pdf`
700
- await fs.writeFile(originalPdfPath, document.toBytes())
701
- console.log(`Original PDF saved to: ${originalPdfPath}`)
702
- console.log(`Original PDF has ${document.revisions.length} revision(s)`)
703
-
704
- // Step 2: Load the PDF and perform an incremental update
705
- console.log('\nStep 2: Loading PDF and performing incremental update...')
706
-
707
- // Read the existing PDF
708
- const existingPdfBytes = await fs.readFile(originalPdfPath)
709
- const loadedDocument = await PdfDocument.fromBytes([existingPdfBytes])
710
-
711
- // Lock existing revisions to enable incremental mode
712
- // This ensures changes are added as new revisions instead of modifying existing ones
713
- loadedDocument.setIncremental(true)
714
-
715
- // Create new content for the incremental update
716
- // In a real scenario, this could be adding annotations, form fields, signatures, etc.
717
- const newContentStream = new PdfIndirectObject({
718
- objectNumber: contentStream.objectNumber,
719
- generationNumber: contentStream.generationNumber,
720
- content: new PdfStream({
721
- header: new PdfDictionary(),
722
- original:
723
- 'BT /F1 18 Tf 100 650 Td (This content was added in Revision 2) Tj ET',
724
- }),
725
- })
726
-
727
- // Add the new content to the document
728
- loadedDocument.add(newContentStream)
729
- await loadedDocument.commit()
730
-
731
- // Save the incrementally updated PDF
732
- const updatedPdfPath = `${tmpFolder}/incremental-update.pdf`
733
- await fs.writeFile(updatedPdfPath, loadedDocument.toBytes())
734
- console.log(`Incrementally updated PDF saved to: ${updatedPdfPath}`)
735
- console.log(`Updated PDF has ${loadedDocument.revisions.length} revision(s)`)
736
-
737
- // Step 3: Verify the incremental update preserved the original content
738
- console.log('\nStep 3: Verifying incremental update...')
739
-
740
- // Check file sizes to confirm incremental update (new file should be larger)
741
- const originalStats = await fs.stat(originalPdfPath)
742
- const updatedStats = await fs.stat(updatedPdfPath)
743
-
744
- console.log(`Original PDF size: ${originalStats.size} bytes`)
745
- console.log(`Updated PDF size: ${updatedStats.size} bytes`)
746
- console.log(
747
- `Size difference: ${updatedStats.size - originalStats.size} bytes (new revision data)`,
748
- )
749
-
750
- // The updated PDF contains the original bytes plus the new revision
751
- // This is the key feature of incremental updates - the original PDF is preserved
752
- const updatedPdfBytes = await fs.readFile(updatedPdfPath)
753
- const originalPdfBytesForComparison = await fs.readFile(originalPdfPath)
754
-
755
- // Verify that the beginning of the updated PDF matches the original
756
- const originalBytesMatch = updatedPdfBytes
757
- .slice(0, originalPdfBytesForComparison.length - 10) // Exclude the %%EOF marker area
758
- .toString()
759
- .includes(
760
- originalPdfBytesForComparison
761
- .subarray(0, -10)
762
- .toString()
763
- .substring(0, 100),
764
- )
765
-
766
- console.log(`Original content preserved: ${originalBytesMatch ? 'Yes' : 'No'}`)
767
-
768
- // Step 4: Add another incremental revision
769
- console.log('\nStep 4: Adding another incremental revision...')
770
-
771
- const secondUpdate = await PdfDocument.fromBytes([updatedPdfBytes])
772
- secondUpdate.setIncremental(true)
773
-
774
- const thirdRevisionContent = new PdfIndirectObject({
775
- objectNumber: contentStream.objectNumber,
776
- generationNumber: contentStream.generationNumber,
777
- content: new PdfStream(
778
- 'BT /F1 14 Tf 100 600 Td (Third revision - demonstrates multiple incremental updates) Tj ET',
779
- ),
780
- })
781
-
782
- secondUpdate.add(thirdRevisionContent)
783
- await secondUpdate.commit()
784
-
785
- const multiRevisionPdfPath = `${tmpFolder}/multi-revision.pdf`
786
- await fs.writeFile(multiRevisionPdfPath, secondUpdate.toBytes())
787
- console.log(`Multi-revision PDF saved to: ${multiRevisionPdfPath}`)
788
- console.log(
789
- `Multi-revision PDF has ${secondUpdate.revisions.length} revision(s)`,
790
- )
791
-
792
- const multiRevisionStats = await fs.stat(multiRevisionPdfPath)
793
- console.log(`Multi-revision PDF size: ${multiRevisionStats.size} bytes`)
794
-
795
- console.log('\n=== Summary ===')
796
- console.log('Incremental updates allow you to:')
797
- console.log('1. Preserve the original PDF content (important for signatures)')
798
- console.log('2. Add new content without modifying existing revisions')
799
- console.log('3. Maintain a complete history of document changes')
800
- console.log('4. Stack multiple revisions on top of each other')
801
- ```
802
-
803
- ## Modifying AcroForms example - Creating and filling PDF form fields
804
-
805
- ```typescript
806
- import { PdfArray } from 'pdf-lite/core/objects/pdf-array'
807
- import { PdfBoolean } from 'pdf-lite/core/objects/pdf-boolean'
808
- import { PdfDictionary } from 'pdf-lite/core/objects/pdf-dictionary'
809
- import { PdfIndirectObject } from 'pdf-lite/core/objects/pdf-indirect-object'
810
- import { PdfName } from 'pdf-lite/core/objects/pdf-name'
811
- import { PdfNumber } from 'pdf-lite/core/objects/pdf-number'
812
- import { PdfObjectReference } from 'pdf-lite/core/objects/pdf-object-reference'
813
- import { PdfStream } from 'pdf-lite/core/objects/pdf-stream'
814
- import { PdfString } from 'pdf-lite/core/objects/pdf-string'
815
- import { PdfDocument } from 'pdf-lite/pdf/pdf-document'
816
- import fs from 'fs/promises'
817
-
818
- const tmpFolder = `${import.meta.dirname}/tmp`
819
- await fs.mkdir(tmpFolder, { recursive: true })
820
-
821
- // Helper function to create a basic page
822
- function createPage(
823
- contentStreamRef: PdfObjectReference,
824
- ): PdfIndirectObject<PdfDictionary> {
825
- const pageDict = new PdfDictionary()
826
- pageDict.set('Type', new PdfName('Page'))
827
- pageDict.set(
828
- 'MediaBox',
829
- new PdfArray([
830
- new PdfNumber(0),
831
- new PdfNumber(0),
832
- new PdfNumber(612),
833
- new PdfNumber(792),
834
- ]),
835
- )
836
- pageDict.set('Contents', contentStreamRef)
837
- return new PdfIndirectObject({ content: pageDict })
838
- }
839
-
840
- // Helper function to create pages collection
841
- function createPages(
842
- pages: PdfIndirectObject<PdfDictionary>[],
843
- ): PdfIndirectObject<PdfDictionary> {
844
- const pagesDict = new PdfDictionary()
845
- pagesDict.set('Type', new PdfName('Pages'))
846
- pagesDict.set('Kids', new PdfArray(pages.map((x) => x.reference)))
847
- pagesDict.set('Count', new PdfNumber(pages.length))
848
- return new PdfIndirectObject({ content: pagesDict })
849
- }
850
-
851
- // Helper function to create catalog
852
- function createCatalog(
853
- pagesRef: PdfObjectReference,
854
- ): PdfIndirectObject<PdfDictionary> {
855
- const catalogDict = new PdfDictionary()
856
- catalogDict.set('Type', new PdfName('Catalog'))
857
- catalogDict.set('Pages', pagesRef)
858
- return new PdfIndirectObject({ content: catalogDict })
859
- }
860
-
861
- // Helper function to create font
862
- function createFont(): PdfIndirectObject<PdfDictionary> {
863
- const fontDict = new PdfDictionary()
864
- fontDict.set('Type', new PdfName('Font'))
865
- fontDict.set('Subtype', new PdfName('Type1'))
866
- fontDict.set('BaseFont', new PdfName('Helvetica'))
867
- return new PdfIndirectObject({ content: fontDict })
868
- }
869
-
870
- // Helper function to create resources
871
- function createResources(
872
- fontRef: PdfObjectReference,
873
- ): PdfIndirectObject<PdfDictionary> {
874
- const resourcesDict = new PdfDictionary()
875
- const fontDict = new PdfDictionary()
876
- fontDict.set('F1', fontRef)
877
- resourcesDict.set('Font', fontDict)
878
- return new PdfIndirectObject({ content: resourcesDict })
879
- }
880
-
881
- // Helper function to create a text field widget annotation
882
- function createTextField(
883
- fieldName: string,
884
- pageRef: PdfObjectReference,
885
- rect: [number, number, number, number],
886
- defaultValue: string = '',
887
- ): PdfIndirectObject<PdfDictionary> {
888
- const fieldDict = new PdfDictionary()
889
- // Annotation properties
890
- fieldDict.set('Type', new PdfName('Annot'))
891
- fieldDict.set('Subtype', new PdfName('Widget'))
892
- // Field type: Text
893
- fieldDict.set('FT', new PdfName('Tx'))
894
- // Field name
895
- fieldDict.set('T', new PdfString(fieldName))
896
- // Bounding rectangle [x1, y1, x2, y2]
897
- fieldDict.set(
898
- 'Rect',
899
- new PdfArray([
900
- new PdfNumber(rect[0]),
901
- new PdfNumber(rect[1]),
902
- new PdfNumber(rect[2]),
903
- new PdfNumber(rect[3]),
904
- ]),
905
- )
906
- // Annotation flags (4 = print)
907
- fieldDict.set('F', new PdfNumber(4))
908
- // Parent page reference
909
- fieldDict.set('P', pageRef)
910
- // Default value (if any)
911
- if (defaultValue) {
912
- fieldDict.set('V', new PdfString(defaultValue))
913
- fieldDict.set('DV', new PdfString(defaultValue))
914
- }
915
- // Default appearance string (font and size)
916
- fieldDict.set('DA', new PdfString('/Helv 12 Tf 0 g'))
917
-
918
- return new PdfIndirectObject({ content: fieldDict })
919
- }
920
-
921
- // Helper function to create a checkbox field widget annotation
922
- function createCheckboxField(
923
- fieldName: string,
924
- pageRef: PdfObjectReference,
925
- rect: [number, number, number, number],
926
- checked: boolean = false,
927
- ): PdfIndirectObject<PdfDictionary> {
928
- const fieldDict = new PdfDictionary()
929
- // Annotation properties
930
- fieldDict.set('Type', new PdfName('Annot'))
931
- fieldDict.set('Subtype', new PdfName('Widget'))
932
- // Field type: Button
933
- fieldDict.set('FT', new PdfName('Btn'))
934
- // Field name
935
- fieldDict.set('T', new PdfString(fieldName))
936
- // Bounding rectangle
937
- fieldDict.set(
938
- 'Rect',
939
- new PdfArray([
940
- new PdfNumber(rect[0]),
941
- new PdfNumber(rect[1]),
942
- new PdfNumber(rect[2]),
943
- new PdfNumber(rect[3]),
944
- ]),
945
- )
946
- // Annotation flags (4 = print)
947
- fieldDict.set('F', new PdfNumber(4))
948
- // Parent page reference
949
- fieldDict.set('P', pageRef)
950
- // Value: /Yes for checked, /Off for unchecked
951
- fieldDict.set('V', new PdfName(checked ? 'Yes' : 'Off'))
952
- fieldDict.set('AS', new PdfName(checked ? 'Yes' : 'Off'))
953
-
954
- return new PdfIndirectObject({ content: fieldDict })
955
- }
956
-
957
- // ============================================
958
- // PART 1: Create a PDF with form fields
959
- // ============================================
960
-
961
- const document = new PdfDocument()
962
-
963
- // Create font
964
- const font = createFont()
965
- document.add(font)
966
-
967
- // Create resources with the font
968
- const resources = createResources(font.reference)
969
- document.add(resources)
970
-
971
- // Create content stream with form labels
972
- const contentStream = new PdfIndirectObject({
973
- content: new PdfStream({
974
- header: new PdfDictionary(),
975
- original: `BT
976
- /F1 18 Tf 72 720 Td (PDF Form Example) Tj
977
- /F1 12 Tf 0 -40 Td (Name:) Tj
978
- 0 -30 Td (Email:) Tj
979
- 0 -30 Td (Phone:) Tj
980
- 0 -30 Td (Subscribe to newsletter:) Tj
981
- ET`,
982
- }),
983
- })
984
- document.add(contentStream)
985
-
986
- // Create page
987
- const page = createPage(contentStream.reference)
988
- page.content.set('Resources', resources.reference)
989
- document.add(page)
990
-
991
- // Create form fields
992
- const nameField = createTextField('name', page.reference, [150, 665, 400, 685])
993
- const emailField = createTextField(
994
- 'email',
995
- page.reference,
996
- [150, 635, 400, 655],
997
- )
998
- const phoneField = createTextField(
999
- 'phone',
1000
- page.reference,
1001
- [150, 605, 400, 625],
1002
- )
1003
- const subscribeField = createCheckboxField(
1004
- 'subscribe',
1005
- page.reference,
1006
- [200, 575, 215, 590],
1007
- )
1008
-
1009
- document.add(nameField)
1010
- document.add(emailField)
1011
- document.add(phoneField)
1012
- document.add(subscribeField)
1013
-
1014
- // Add annotations to page
1015
- page.content.set(
1016
- 'Annots',
1017
- new PdfArray([
1018
- nameField.reference,
1019
- emailField.reference,
1020
- phoneField.reference,
1021
- subscribeField.reference,
1022
- ]),
1023
- )
1024
-
1025
- // Create pages collection
1026
- const pages = createPages([page])
1027
- page.content.set('Parent', pages.reference)
1028
- document.add(pages)
1029
-
1030
- // Create catalog
1031
- const catalog = createCatalog(pages.reference)
1032
-
1033
- // Create AcroForm with all fields
1034
- const acroForm = new PdfDictionary()
1035
- acroForm.set(
1036
- 'Fields',
1037
- new PdfArray([
1038
- nameField.reference,
1039
- emailField.reference,
1040
- phoneField.reference,
1041
- subscribeField.reference,
1042
- ]),
1043
- )
1044
- // NeedAppearances flag tells PDF readers to generate appearance streams
1045
- acroForm.set('NeedAppearances', new PdfBoolean(true))
1046
-
1047
- // Default resources for the form (font)
1048
- const formResources = new PdfDictionary()
1049
- const formFontDict = new PdfDictionary()
1050
- const helveticaFont = new PdfDictionary()
1051
- helveticaFont.set('Type', new PdfName('Font'))
1052
- helveticaFont.set('Subtype', new PdfName('Type1'))
1053
- helveticaFont.set('BaseFont', new PdfName('Helvetica'))
1054
- formFontDict.set('Helv', helveticaFont)
1055
- formResources.set('Font', formFontDict)
1056
- acroForm.set('DR', formResources)
1057
-
1058
- const acroFormObj = new PdfIndirectObject({ content: acroForm })
1059
- document.add(acroFormObj)
1060
- catalog.content.set('AcroForm', acroFormObj.reference)
1061
-
1062
- document.add(catalog)
1063
-
1064
- // Set the catalog as the root
1065
- document.trailerDict.set('Root', catalog.reference)
1066
-
1067
- await document.commit()
1068
-
1069
- // Save the empty form
1070
- // This demonstrates creating a blank form that users can fill in
1071
- await fs.writeFile(`${tmpFolder}/form-empty.pdf`, document.toBytes())
1072
- console.log('Created form-empty.pdf with empty form fields')
1073
-
1074
- // ============================================
1075
- // PART 2: Fill in the form fields
1076
- // ============================================
1077
- // This demonstrates how to programmatically fill in form fields.
1078
- // We now read the previously saved empty form and modify it.
1079
-
1080
- // Read the empty form PDF
1081
- const emptyFormBytes = await fs.readFile(`${tmpFolder}/form-empty.pdf`)
1082
- const filledDocument = await PdfDocument.fromBytes([emptyFormBytes])
1083
-
1084
- // Get the catalog reference from trailer
1085
- const catalogRef = filledDocument.trailerDict.get('Root')
1086
- if (!catalogRef || !(catalogRef instanceof PdfObjectReference)) {
1087
- throw new Error('No catalog found in PDF')
1088
- }
1089
-
1090
- // Read the catalog object
1091
- const catalogObj = await filledDocument.readObject({
1092
- objectNumber: catalogRef.objectNumber,
1093
- })
1094
- if (!catalogObj || !(catalogObj.content instanceof PdfDictionary)) {
1095
- throw new Error('Catalog object not found')
1096
- }
1097
-
1098
- // Get the AcroForm reference
1099
- const acroFormRef = catalogObj.content.get('AcroForm')
1100
- if (!acroFormRef || !(acroFormRef instanceof PdfObjectReference)) {
1101
- throw new Error('No AcroForm found in PDF')
1102
- }
1103
-
1104
- // Read the AcroForm object
1105
- const filledAcroFormObj = await filledDocument.readObject({
1106
- objectNumber: acroFormRef.objectNumber,
1107
- })
1108
- if (
1109
- !filledAcroFormObj ||
1110
- !(filledAcroFormObj.content instanceof PdfDictionary)
1111
- ) {
1112
- throw new Error('AcroForm object not found')
1113
- }
1114
-
1115
- // Get the fields array
1116
- const fieldsArray = filledAcroFormObj.content.get('Fields')
1117
- if (!fieldsArray || !(fieldsArray instanceof PdfArray)) {
1118
- throw new Error('No fields found in AcroForm')
1119
- }
1120
-
1121
- // Helper function to find a field by name
1122
- async function findField(
1123
- fieldName: string,
1124
- ): Promise<PdfIndirectObject<PdfDictionary> | null> {
1125
- for (const fieldRef of fieldsArray.items) {
1126
- if (!(fieldRef instanceof PdfObjectReference)) continue
1127
- const fieldObj = await filledDocument.readObject({
1128
- objectNumber: fieldRef.objectNumber,
1129
- })
1130
- if (!fieldObj || !(fieldObj.content instanceof PdfDictionary)) continue
1131
-
1132
- const name = fieldObj.content.get('T')
1133
- if (name instanceof PdfString) {
1134
- // Convert bytes to string for comparison
1135
- const nameStr = name.value
1136
- if (nameStr === fieldName) {
1137
- return fieldObj as PdfIndirectObject<PdfDictionary>
1138
- }
1139
- }
1140
- }
1141
- return null
1142
- }
1143
-
1144
- // Update the name field value
1145
- const nameFieldObj = await findField('name')
1146
- if (nameFieldObj) {
1147
- nameFieldObj.content.set('V', new PdfString('John Doe'))
1148
- }
1149
-
1150
- // Update the email field value
1151
- const emailFieldObj = await findField('email')
1152
- if (emailFieldObj) {
1153
- emailFieldObj.content.set('V', new PdfString('john.doe@example.com'))
1154
- }
1155
-
1156
- // Update the phone field value
1157
- const phoneFieldObj = await findField('phone')
1158
- if (phoneFieldObj) {
1159
- phoneFieldObj.content.set('V', new PdfString('+1 (555) 123-4567'))
1160
- }
1161
-
1162
- // Check the subscribe checkbox
1163
- const subscribeFieldObj = await findField('subscribe')
1164
- if (subscribeFieldObj) {
1165
- subscribeFieldObj.content.set('V', new PdfName('Yes'))
1166
- subscribeFieldObj.content.set('AS', new PdfName('Yes'))
1167
- }
1168
-
1169
- // Save the filled form
1170
- await fs.writeFile(`${tmpFolder}/form-filled.pdf`, filledDocument.toBytes())
1171
- console.log('Created form-filled.pdf with filled form fields')
1172
-
1173
- console.log('\nForm field values:')
1174
- console.log('- Name: John Doe')
1175
- console.log('- Email: john.doe@example.com')
1176
- console.log('- Phone: +1 (555) 123-4567')
1177
- console.log('- Subscribe: Yes')
1178
- ```
1179
-
1180
- ## Tokeniser usage example
1181
-
1182
- ```typescript
1183
- import { PdfByteStreamTokeniser } from 'pdf-lite/core/tokeniser'
1184
- import { PdfToken } from 'pdf-lite/core/tokens/token'
1185
- import { stringToBytes } from 'pdf-lite/utils/stringToBytes'
1186
-
1187
- /**
1188
- * This example demonstrates how to use the PdfByteStreamTokeniser
1189
- * to tokenize PDF content into individual tokens.
1190
- *
1191
- * The tokeniser converts raw PDF bytes into a stream of tokens that can
1192
- * be further processed by the decoder or used for PDF analysis.
1193
- */
1194
-
1195
- // Sample PDF content to tokenize
1196
- const pdfContent = `%PDF-2.0
1197
- 1 0 obj
1198
- << /Type /Catalog /Pages 2 0 R >>
1199
- endobj
1200
- 2 0 obj
1201
- << /Type /Pages /Kids [3 0 R] /Count 1 >>
1202
- endobj
1203
- 3 0 obj
1204
- << /Type /Page /Parent 2 0 R /MediaBox [0 0 612 792] >>
1205
- endobj
1206
- trailer
1207
- << /Size 4 /Root 1 0 R >>
1208
- startxref
1209
- 0
1210
- %%EOF`
1211
-
1212
- // Create the tokeniser
1213
- const tokeniser = new PdfByteStreamTokeniser()
1214
-
1215
- // Convert the PDF content to bytes and feed it to the tokeniser
1216
- const bytes = stringToBytes(pdfContent)
1217
- tokeniser.feedBytes(bytes)
1218
-
1219
- // Signal end of input
1220
- tokeniser.eof = true
1221
-
1222
- // Collect all tokens
1223
- const tokens: PdfToken[] = []
1224
- for (const token of tokeniser.nextItems()) {
1225
- tokens.push(token)
1226
- }
1227
-
1228
- // Display tokenisation results
1229
- console.log('PDF Tokenisation Example')
1230
- console.log('========================\n')
1231
- console.log(`Input: ${pdfContent.length} bytes`)
1232
- console.log(`Output: ${tokens.length} tokens\n`)
1233
-
1234
- // Group tokens by type for summary
1235
- const tokenCounts = new Map<string, number>()
1236
- for (const token of tokens) {
1237
- const type = token.constructor.name
1238
- tokenCounts.set(type, (tokenCounts.get(type) ?? 0) + 1)
1239
- }
1240
-
1241
- console.log('Token type counts:')
1242
- for (const [type, count] of tokenCounts) {
1243
- console.log(` ${type}: ${count}`)
1244
- }
1245
-
1246
- console.log('\nFirst 20 tokens:')
1247
- for (const token of tokens.slice(0, 20)) {
1248
- const tokenString = token.toString().slice(0, 40)
1249
- const displayString =
1250
- tokenString.length >= 40 ? tokenString + '...' : tokenString
1251
- console.log(
1252
- ` ${token.constructor.name.padEnd(30)} ${JSON.stringify(displayString)}`,
1253
- )
1254
- }
1255
-
1256
- // Example: Tokenising incrementally (useful for streaming)
1257
- console.log('\n\nIncremental Tokenisation Example')
1258
- console.log('=================================\n')
1259
-
1260
- const incrementalTokeniser = new PdfByteStreamTokeniser()
1261
-
1262
- // Feed bytes in chunks (simulating streaming)
1263
- const chunkSize = 50
1264
- const numChunks = Math.ceil(bytes.length / chunkSize)
1265
-
1266
- console.log(`Processing ${numChunks} chunks of ~${chunkSize} bytes each...`)
1267
-
1268
- let totalTokens = 0
1269
- for (let i = 0; i < bytes.length; i += chunkSize) {
1270
- const chunk = bytes.slice(i, i + chunkSize)
1271
- incrementalTokeniser.feedBytes(chunk)
1272
-
1273
- // Process tokens as they become available
1274
- for (const _ of incrementalTokeniser.nextItems()) {
1275
- totalTokens++
1276
- }
1277
- }
1278
-
1279
- // Signal end of input and collect remaining tokens
1280
- incrementalTokeniser.eof = true
1281
- for (const _ of incrementalTokeniser.nextItems()) {
1282
- totalTokens++
1283
- }
1284
-
1285
- console.log(`Total tokens produced: ${totalTokens}`)
1286
-
1287
- // Example: Custom stream chunk size
1288
- console.log('\n\nCustom Stream Chunk Size Example')
1289
- console.log('================================\n')
1290
-
1291
- const customTokeniser = new PdfByteStreamTokeniser({
1292
- streamChunkSizeBytes: 512, // Customize the chunk size for stream content
1293
- })
1294
-
1295
- const streamContent = `1 0 obj
1296
- << /Length 100 >>
1297
- stream
1298
- This is stream content that will be chunked by the tokeniser.
1299
- The chunk size determines how the stream data is delivered.
1300
- endstream
1301
- endobj`
1302
-
1303
- customTokeniser.feedBytes(stringToBytes(streamContent))
1304
- customTokeniser.eof = true
1305
-
1306
- console.log('Tokens from stream content:')
1307
- for (const token of customTokeniser.nextItems()) {
1308
- const type = token.constructor.name
1309
- const preview = token.toString().slice(0, 50).replace(/\n/g, '\\n')
1310
- console.log(` ${type.padEnd(25)} ${JSON.stringify(preview)}`)
1311
- }
1312
- ```
1313
-
1314
- ## Decoder usage example
1315
-
1316
- ```typescript
1317
- import { PdfDecoder } from 'pdf-lite/core/decoder'
1318
- import { PdfByteStreamTokeniser } from 'pdf-lite/core/tokeniser'
1319
- import { pdfDecoder } from 'pdf-lite/core/generators'
1320
- import { PdfObject } from 'pdf-lite/core/objects/pdf-object'
1321
- import { PdfIndirectObject } from 'pdf-lite/core/objects/pdf-indirect-object'
1322
- import { PdfDictionary } from 'pdf-lite/core/objects/pdf-dictionary'
1323
- import { PdfStream } from 'pdf-lite/core/objects/pdf-stream'
1324
- import { PdfTrailer } from 'pdf-lite/core/objects/pdf-trailer'
1325
- import { PdfXRefTable } from 'pdf-lite/core/objects/pdf-xref-table'
1326
- import { PdfComment } from 'pdf-lite/core/objects/pdf-comment'
1327
- import { PdfStartXRef } from 'pdf-lite/core/objects/pdf-start-xref'
1328
- import { stringToBytes } from 'pdf-lite/utils/stringToBytes'
1329
-
1330
- /**
1331
- * This example demonstrates how to use the PdfDecoder
1332
- * to decode PDF tokens into PDF objects.
1333
- *
1334
- * The decoder transforms a stream of tokens (from the tokeniser)
1335
- * into high-level PDF objects like dictionaries, arrays, streams,
1336
- * and indirect objects.
1337
- */
1338
-
1339
- // Sample PDF content to decode
1340
- const pdfContent = `%PDF-2.0
1341
- 1 0 obj
1342
- << /Type /Catalog /Pages 2 0 R >>
1343
- endobj
1344
- 2 0 obj
1345
- << /Type /Pages /Kids [3 0 R] /Count 1 >>
1346
- endobj
1347
- 3 0 obj
1348
- << /Type /Page /Parent 2 0 R /MediaBox [0 0 612 792] /Contents 4 0 R >>
1349
- endobj
1350
- 4 0 obj
1351
- << /Length 44 >>
1352
- stream
1353
- BT /F1 12 Tf 100 700 Td (Hello!) Tj ET
1354
- endstream
1355
- endobj
1356
- xref
1357
- 0 5
1358
- 0000000000 65535 f
1359
- 0000000010 00000 n
1360
- 0000000060 00000 n
1361
- 0000000118 00000 n
1362
- 0000000217 00000 n
1363
- trailer
1364
- << /Size 5 /Root 1 0 R >>
1365
- startxref
1366
- 310
1367
- %%EOF`
1368
-
1369
- // Method 1: Using the pdfDecoder generator (recommended)
1370
- console.log('PDF Decoder Example - Using pdfDecoder Generator')
1371
- console.log('================================================\n')
1372
-
1373
- const bytes = stringToBytes(pdfContent)
1374
- const objects: PdfObject[] = []
1375
-
1376
- for (const obj of pdfDecoder([bytes])) {
1377
- objects.push(obj)
1378
- }
1379
-
1380
- console.log(`Decoded ${objects.length} PDF objects:\n`)
1381
-
1382
- for (const obj of objects) {
1383
- const type = obj.constructor.name
1384
-
1385
- if (obj instanceof PdfComment) {
1386
- console.log(` ${type}: ${obj.toString().trim()}`)
1387
- } else if (obj instanceof PdfIndirectObject) {
1388
- const contentType = obj.content.constructor.name
1389
- console.log(
1390
- ` ${type}: ${obj.objectNumber} ${obj.generationNumber} obj (${contentType})`,
1391
- )
1392
-
1393
- // Show dictionary keys if content is a dictionary or stream
1394
- if (obj.content instanceof PdfDictionary) {
1395
- const keys = Object.keys(obj.content.values)
1396
- console.log(` Keys: ${keys.join(', ')}`)
1397
- }
1398
- if (obj.content instanceof PdfStream) {
1399
- console.log(
1400
- ` Stream length: ${obj.content.original.length} bytes`,
1401
- )
1402
- }
1403
- } else if (obj instanceof PdfXRefTable) {
1404
- console.log(` ${type}: ${obj.entries.length} entries`)
1405
- } else if (obj instanceof PdfTrailer) {
1406
- const size = obj.dict.get('Size')?.toString() ?? 'unknown'
1407
- console.log(` ${type}: Size=${size}`)
1408
- } else if (obj instanceof PdfStartXRef) {
1409
- console.log(` ${type}: offset=${obj.offset}`)
1410
- } else {
1411
- console.log(` ${type}`)
1412
- }
1413
- }
1414
-
1415
- // Method 2: Using the PdfDecoder class directly with a tokeniser
1416
- console.log('\n\nPDF Decoder Example - Manual Pipeline')
1417
- console.log('======================================\n')
1418
-
1419
- const tokeniser = new PdfByteStreamTokeniser()
1420
- const decoder = new PdfDecoder({ ignoreWhitespace: true })
1421
-
1422
- // Feed bytes to tokeniser
1423
- tokeniser.feedBytes(bytes)
1424
- tokeniser.eof = true
1425
-
1426
- // Feed tokens to decoder
1427
- for (const token of tokeniser.nextItems()) {
1428
- decoder.feed(token)
1429
- }
1430
- decoder.eof = true
1431
-
1432
- // Collect decoded objects
1433
- const manualObjects: PdfObject[] = []
1434
- for (const obj of decoder.nextItems()) {
1435
- manualObjects.push(obj)
1436
- }
1437
-
1438
- console.log(`Decoded ${manualObjects.length} objects with whitespace ignored\n`)
1439
-
1440
- // Count objects by type
1441
- const typeCounts = new Map<string, number>()
1442
- for (const obj of manualObjects) {
1443
- const type = obj.constructor.name
1444
- typeCounts.set(type, (typeCounts.get(type) ?? 0) + 1)
1445
- }
1446
-
1447
- console.log('Object type counts:')
1448
- for (const [type, count] of typeCounts) {
1449
- console.log(` ${type}: ${count}`)
1450
- }
1451
-
1452
- // Example: Incremental decoding (useful for streaming)
1453
- console.log('\n\nIncremental Decoding Example')
1454
- console.log('============================\n')
1455
-
1456
- const streamTokeniser = new PdfByteStreamTokeniser()
1457
- const streamDecoder = new PdfDecoder()
1458
-
1459
- // Simulate streaming by processing in chunks
1460
- const chunkSize = 100
1461
- let objectCount = 0
1462
-
1463
- for (let i = 0; i < bytes.length; i += chunkSize) {
1464
- const chunk = bytes.slice(i, i + chunkSize)
1465
- streamTokeniser.feedBytes(chunk)
1466
-
1467
- // Process available tokens
1468
- for (const token of streamTokeniser.nextItems()) {
1469
- streamDecoder.feed(token)
1470
-
1471
- // Collect any complete objects
1472
- for (const obj of streamDecoder.nextItems()) {
1473
- objectCount++
1474
- console.log(
1475
- ` Chunk ${Math.floor(i / chunkSize) + 1}: Found ${obj.constructor.name}`,
1476
- )
1477
- }
1478
- }
1479
- }
1480
-
1481
- // Finalize
1482
- streamTokeniser.eof = true
1483
- streamDecoder.eof = true
1484
-
1485
- for (const token of streamTokeniser.nextItems()) {
1486
- streamDecoder.feed(token)
1487
- }
1488
-
1489
- for (const obj of streamDecoder.nextItems()) {
1490
- objectCount++
1491
- console.log(` Final: Found ${obj.constructor.name}`)
1492
- }
1493
-
1494
- console.log(`\nTotal objects decoded incrementally: ${objectCount}`)
1495
-
1496
- // Example: Preserving whitespace for round-trip
1497
- console.log('\n\nRound-Trip Example (Preserving Whitespace)')
1498
- console.log('==========================================\n')
1499
-
1500
- const simpleDict = `<< /Type /Page /MediaBox [0 0 612 792] >>`
1501
- const preservingDecoder = pdfDecoder([stringToBytes(simpleDict)], {
1502
- ignoreWhitespace: false,
1503
- })
1504
-
1505
- for (const obj of preservingDecoder) {
1506
- // toString() will recreate the original representation
1507
- const reconstructed = obj.toString()
1508
- console.log('Original: ', JSON.stringify(simpleDict))
1509
- console.log('Reconstructed:', JSON.stringify(reconstructed))
1510
- console.log('Match:', simpleDict === reconstructed)
1511
- }
1512
- ```