@pdfme/pdf-lib 6.0.3 → 6.0.5-dev.1

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 (449) hide show
  1. package/{src/api/Embeddable.ts → dist/api/Embeddable.d.ts} +1 -1
  2. package/dist/api/PDFDocument.d.ts +778 -0
  3. package/dist/api/PDFDocumentOptions.d.ts +38 -0
  4. package/dist/api/PDFEmbeddedFile.d.ts +38 -0
  5. package/dist/api/PDFEmbeddedPage.d.ts +73 -0
  6. package/dist/api/PDFFont.d.ts +94 -0
  7. package/dist/api/PDFImage.d.ts +95 -0
  8. package/dist/api/PDFJavaScript.d.ts +38 -0
  9. package/dist/api/PDFPage.d.ts +910 -0
  10. package/dist/api/PDFPageOptions.d.ts +172 -0
  11. package/dist/api/StandardFonts.d.ts +16 -0
  12. package/dist/api/colors.d.ts +34 -0
  13. package/dist/api/errors.d.ts +42 -0
  14. package/dist/api/form/PDFButton.d.ts +137 -0
  15. package/dist/api/form/PDFCheckBox.d.ts +142 -0
  16. package/dist/api/form/PDFDropdown.d.ts +402 -0
  17. package/dist/api/form/PDFField.d.ts +203 -0
  18. package/dist/api/form/PDFForm.d.ts +411 -0
  19. package/dist/api/form/PDFOptionList.d.ts +335 -0
  20. package/dist/api/form/PDFRadioGroup.d.ts +252 -0
  21. package/dist/api/form/PDFSignature.d.ts +29 -0
  22. package/dist/api/form/PDFTextField.d.ts +537 -0
  23. package/dist/api/form/appearances.d.ts +41 -0
  24. package/dist/api/image/alignment.d.ts +5 -0
  25. package/dist/api/objects.d.ts +4 -0
  26. package/dist/api/operations.d.ts +226 -0
  27. package/dist/api/operators.d.ts +90 -0
  28. package/dist/api/rotations.d.ts +38 -0
  29. package/dist/api/sizes.d.ts +52 -0
  30. package/dist/api/svg.d.ts +70 -0
  31. package/dist/api/svgPath.d.ts +2 -0
  32. package/dist/api/text/alignment.d.ts +5 -0
  33. package/dist/api/text/layout.d.ts +54 -0
  34. package/dist/core/PDFContext.d.ts +84 -0
  35. package/dist/core/PDFObjectCopier.d.ts +37 -0
  36. package/dist/core/acroform/PDFAcroButton.d.ts +21 -0
  37. package/dist/core/acroform/PDFAcroCheckBox.d.ts +13 -0
  38. package/dist/core/acroform/PDFAcroChoice.d.ts +20 -0
  39. package/dist/core/acroform/PDFAcroComboBox.d.ts +9 -0
  40. package/dist/core/acroform/PDFAcroField.d.ts +36 -0
  41. package/dist/core/acroform/PDFAcroForm.d.ts +20 -0
  42. package/dist/core/acroform/PDFAcroListBox.d.ts +9 -0
  43. package/dist/core/acroform/PDFAcroNonTerminal.d.ts +13 -0
  44. package/dist/core/acroform/PDFAcroPushButton.d.ts +9 -0
  45. package/dist/core/acroform/PDFAcroRadioButton.d.ts +13 -0
  46. package/{src/core/acroform/PDFAcroSignature.ts → dist/core/acroform/PDFAcroSignature.d.ts} +2 -4
  47. package/dist/core/acroform/PDFAcroTerminal.d.ts +16 -0
  48. package/dist/core/acroform/PDFAcroText.d.ts +22 -0
  49. package/dist/core/acroform/flags.d.ts +141 -0
  50. package/dist/core/acroform/utils.d.ts +6 -0
  51. package/dist/core/annotation/AppearanceCharacteristics.d.ts +33 -0
  52. package/dist/core/annotation/BorderStyle.d.ts +11 -0
  53. package/dist/core/annotation/PDFAnnotation.d.ts +51 -0
  54. package/dist/core/annotation/PDFWidgetAnnotation.d.ts +26 -0
  55. package/dist/core/annotation/flags.d.ts +79 -0
  56. package/dist/core/crypto.d.ts +95 -0
  57. package/dist/core/document/PDFCrossRefSection.d.ts +27 -0
  58. package/dist/core/document/PDFHeader.d.ts +10 -0
  59. package/dist/core/document/PDFTrailer.d.ts +9 -0
  60. package/dist/core/document/PDFTrailerDict.d.ts +10 -0
  61. package/dist/core/embedders/CMap.d.ts +3 -0
  62. package/dist/core/embedders/CustomFontEmbedder.d.ts +44 -0
  63. package/dist/core/embedders/CustomFontSubsetEmbedder.d.ts +20 -0
  64. package/dist/core/embedders/FileEmbedder.d.ts +33 -0
  65. package/dist/core/embedders/FontFlags.d.ts +13 -0
  66. package/dist/core/embedders/JavaScriptEmbedder.d.ts +10 -0
  67. package/dist/core/embedders/JpegEmbedder.d.ts +23 -0
  68. package/dist/core/embedders/PDFPageEmbedder.d.ts +37 -0
  69. package/dist/core/embedders/PngEmbedder.d.ts +19 -0
  70. package/dist/core/embedders/StandardFontEmbedder.d.ts +36 -0
  71. package/dist/core/errors.d.ts +94 -0
  72. package/{src/core/index.ts → dist/core/index.d.ts} +1 -17
  73. package/dist/core/interactive/ViewerPreferences.d.ts +347 -0
  74. package/dist/core/objects/PDFArray.d.ts +63 -0
  75. package/dist/core/objects/PDFBool.d.ts +13 -0
  76. package/dist/core/objects/PDFDict.d.ts +62 -0
  77. package/dist/core/objects/PDFHexString.d.ts +16 -0
  78. package/dist/core/objects/PDFInvalidObject.d.ts +11 -0
  79. package/dist/core/objects/PDFName.d.ts +41 -0
  80. package/dist/core/objects/PDFNull.d.ts +10 -0
  81. package/dist/core/objects/PDFNumber.d.ts +15 -0
  82. package/dist/core/objects/PDFObject.d.ts +8 -0
  83. package/dist/core/objects/PDFRawStream.d.ts +16 -0
  84. package/dist/core/objects/PDFRef.d.ts +13 -0
  85. package/dist/core/objects/PDFStream.d.ts +16 -0
  86. package/dist/core/objects/PDFString.d.ts +16 -0
  87. package/dist/core/operators/PDFOperator.d.ts +19 -0
  88. package/dist/core/operators/PDFOperatorNames.d.ts +76 -0
  89. package/dist/core/parser/BaseParser.d.ts +14 -0
  90. package/dist/core/parser/ByteStream.d.ts +26 -0
  91. package/dist/core/parser/PDFObjectParser.d.ts +31 -0
  92. package/dist/core/parser/PDFObjectStreamParser.d.ts +13 -0
  93. package/dist/core/parser/PDFParser.d.ts +46 -0
  94. package/dist/core/parser/PDFXRefStreamParser.d.ts +21 -0
  95. package/dist/core/streams/Ascii85Stream.d.ts +9 -0
  96. package/dist/core/streams/AsciiHexStream.d.ts +9 -0
  97. package/dist/core/streams/DecodeStream.d.ts +26 -0
  98. package/dist/core/streams/DecryptStream.d.ts +12 -0
  99. package/dist/core/streams/FlateStream.d.ts +13 -0
  100. package/dist/core/streams/LZWStream.d.ts +12 -0
  101. package/dist/core/streams/RunLengthStream.d.ts +8 -0
  102. package/dist/core/streams/Stream.d.ts +34 -0
  103. package/dist/core/streams/decode.d.ts +3 -0
  104. package/dist/core/structures/PDFCatalog.d.ts +27 -0
  105. package/dist/core/structures/PDFContentStream.d.ts +15 -0
  106. package/dist/core/structures/PDFCrossRefStream.d.ts +53 -0
  107. package/dist/core/structures/PDFFlateStream.d.ts +13 -0
  108. package/dist/core/structures/PDFObjectStream.d.ts +20 -0
  109. package/dist/core/structures/PDFPageLeaf.d.ts +54 -0
  110. package/dist/core/structures/PDFPageTree.d.ts +41 -0
  111. package/dist/core/syntax/CharCodes.d.ts +61 -0
  112. package/dist/core/syntax/Delimiters.d.ts +1 -0
  113. package/dist/core/syntax/Irregular.d.ts +1 -0
  114. package/dist/core/syntax/Keywords.d.ts +22 -0
  115. package/dist/core/syntax/Numeric.d.ts +3 -0
  116. package/dist/core/syntax/Whitespace.d.ts +1 -0
  117. package/dist/core/writers/PDFStreamWriter.d.ts +19 -0
  118. package/dist/core/writers/PDFWriter.d.ts +29 -0
  119. package/dist/index.js +19124 -0
  120. package/dist/index.js.map +1 -0
  121. package/dist/types/fontkit.d.ts +597 -0
  122. package/{src/types/index.ts → dist/types/index.d.ts} +8 -13
  123. package/{src/types/matrix.ts → dist/types/matrix.d.ts} +1 -2
  124. package/dist/utils/Cache.d.ts +10 -0
  125. package/dist/utils/arrays.d.ts +16 -0
  126. package/dist/utils/async.d.ts +5 -0
  127. package/dist/utils/base64.d.ts +10 -0
  128. package/dist/utils/elements/Arc.d.ts +22 -0
  129. package/dist/utils/elements/Circle.d.ts +14 -0
  130. package/dist/utils/elements/Ellipse.d.ts +20 -0
  131. package/dist/utils/elements/GraphElement.d.ts +6 -0
  132. package/dist/utils/elements/Line.d.ts +23 -0
  133. package/dist/utils/elements/Plot.d.ts +11 -0
  134. package/dist/utils/elements/Point.d.ts +18 -0
  135. package/dist/utils/elements/Rectangle.d.ts +21 -0
  136. package/dist/utils/elements/Segment.d.ts +19 -0
  137. package/dist/utils/errors.d.ts +1 -0
  138. package/dist/utils/intersections.d.ts +9 -0
  139. package/dist/utils/maths.d.ts +45 -0
  140. package/dist/utils/numbers.d.ts +23 -0
  141. package/dist/utils/objects.d.ts +15 -0
  142. package/dist/utils/pdfDocEncoding.d.ts +7 -0
  143. package/dist/utils/png.d.ts +17 -0
  144. package/dist/utils/rng.d.ts +13 -0
  145. package/dist/utils/strings.d.ts +25 -0
  146. package/{src/utils/unicode.ts → dist/utils/unicode.d.ts} +8 -195
  147. package/dist/utils/validators.d.ts +26 -0
  148. package/package.json +6 -1
  149. package/__tests__/api/PDFDocument.spec.ts +0 -576
  150. package/__tests__/api/PDFImage.spec.ts +0 -60
  151. package/__tests__/api/PDFPage.spec.ts +0 -151
  152. package/__tests__/api/form/PDFCheckBox.spec.ts +0 -71
  153. package/__tests__/api/form/PDFDropdown.spec.ts +0 -118
  154. package/__tests__/api/form/PDFForm.spec.ts +0 -370
  155. package/__tests__/api/form/PDFOptionList.spec.ts +0 -104
  156. package/__tests__/api/form/PDFRadioGroup.spec.ts +0 -183
  157. package/__tests__/api/form/PDFTextField.spec.ts +0 -148
  158. package/__tests__/api/svgPath.spec.ts +0 -153
  159. package/__tests__/api/text/layout.spec.ts +0 -166
  160. package/__tests__/core/PDFContext.spec.ts +0 -194
  161. package/__tests__/core/PDFObjectCopier.spec.ts +0 -421
  162. package/__tests__/core/acroform/PDFAcroField.spec.ts +0 -98
  163. package/__tests__/core/acroform/PDFAcroTerminal.spec.ts +0 -39
  164. package/__tests__/core/annotation/PDFWidgetAnnotation.spec.ts +0 -40
  165. package/__tests__/core/document/PDFCrossRefSection.spec.ts +0 -88
  166. package/__tests__/core/document/PDFHeader.spec.ts +0 -22
  167. package/__tests__/core/document/PDFTrailer.spec.ts +0 -28
  168. package/__tests__/core/document/PDFTrailerDict.spec.ts +0 -24
  169. package/__tests__/core/embedders/CMap.spec.ts +0 -47
  170. package/__tests__/core/embedders/CustomFontEmbedder.spec.ts +0 -96
  171. package/__tests__/core/embedders/CustomFontSubsetEmbedder.spec.ts +0 -62
  172. package/__tests__/core/embedders/FileEmbedder.spec.ts +0 -54
  173. package/__tests__/core/embedders/JpegEmbedder.spec.ts +0 -67
  174. package/__tests__/core/embedders/PDFPageEmbedder.spec.ts +0 -65
  175. package/__tests__/core/embedders/PngEmbedder.spec.ts +0 -87
  176. package/__tests__/core/embedders/StandardFontEmbedder.spec.ts +0 -79
  177. package/__tests__/core/embedders/data/SourceHanSerifJP-Regular.otf.cmap +0 -16096
  178. package/__tests__/core/embedders/data/Ubuntu-R.ttf.cmap +0 -1211
  179. package/__tests__/core/objects/PDFArray.spec.ts +0 -134
  180. package/__tests__/core/objects/PDFBool.spec.ts +0 -42
  181. package/__tests__/core/objects/PDFDict.spec.ts +0 -195
  182. package/__tests__/core/objects/PDFHexString.spec.ts +0 -168
  183. package/__tests__/core/objects/PDFInvalidObject.spec.ts +0 -32
  184. package/__tests__/core/objects/PDFName.spec.ts +0 -122
  185. package/__tests__/core/objects/PDFNull.spec.ts +0 -30
  186. package/__tests__/core/objects/PDFNumber.spec.ts +0 -50
  187. package/__tests__/core/objects/PDFObject.spec.ts +0 -29
  188. package/__tests__/core/objects/PDFRawStream.spec.ts +0 -45
  189. package/__tests__/core/objects/PDFRef.spec.ts +0 -60
  190. package/__tests__/core/objects/PDFString.spec.ts +0 -237
  191. package/__tests__/core/operators/PDFOperator.spec.ts +0 -77
  192. package/__tests__/core/parser/PDFObjectParser.spec.ts +0 -730
  193. package/__tests__/core/parser/PDFObjectStreamParser.spec.ts +0 -158
  194. package/__tests__/core/parser/PDFParser.spec.ts +0 -398
  195. package/__tests__/core/parser/PDFXRefStreamParser.spec.ts +0 -187
  196. package/__tests__/core/parser/data/object-stream-invalid +0 -2
  197. package/__tests__/core/parser/data/object-stream1 +0 -16
  198. package/__tests__/core/parser/data/object-stream2 +0 -10
  199. package/__tests__/core/parser/data/object-stream3 +0 -0
  200. package/__tests__/core/parser/data/object-stream4 +0 -0
  201. package/__tests__/core/parser/data/xref-stream1 +0 -0
  202. package/__tests__/core/parser/data/xref-stream2 +0 -0
  203. package/__tests__/core/parser/data/xref-stream3 +0 -0
  204. package/__tests__/core/parser/data/xref-stream4 +0 -0
  205. package/__tests__/core/streams/Ascii85Stream.spec.ts +0 -20
  206. package/__tests__/core/streams/AsciiHexStream.spec.ts +0 -20
  207. package/__tests__/core/streams/FlateStream.spec.ts +0 -20
  208. package/__tests__/core/streams/LZWStream.spec.ts +0 -20
  209. package/__tests__/core/streams/RunLengthStream.spec.ts +0 -20
  210. package/__tests__/core/streams/Stream.spec.ts +0 -128
  211. package/__tests__/core/streams/data/ascii85/1.decoded +0 -0
  212. package/__tests__/core/streams/data/ascii85/1.encoded +0 -43
  213. package/__tests__/core/streams/data/asciihex/1.decoded +0 -1
  214. package/__tests__/core/streams/data/asciihex/1.encoded +0 -1
  215. package/__tests__/core/streams/data/asciihex/2.decoded +0 -7
  216. package/__tests__/core/streams/data/asciihex/2.encoded +0 -1
  217. package/__tests__/core/streams/data/flate/1.corrupt.encoded +0 -1
  218. package/__tests__/core/streams/data/flate/1.decoded +0 -0
  219. package/__tests__/core/streams/data/flate/1.encoded +0 -2
  220. package/__tests__/core/streams/data/flate/2.decoded +0 -33
  221. package/__tests__/core/streams/data/flate/2.encoded +0 -0
  222. package/__tests__/core/streams/data/flate/3.decoded +0 -15
  223. package/__tests__/core/streams/data/flate/3.encoded +0 -0
  224. package/__tests__/core/streams/data/flate/4.decoded +0 -16
  225. package/__tests__/core/streams/data/flate/4.encoded +0 -0
  226. package/__tests__/core/streams/data/flate/5.decoded +0 -0
  227. package/__tests__/core/streams/data/flate/5.encoded +0 -0
  228. package/__tests__/core/streams/data/flate/6.decoded +0 -17
  229. package/__tests__/core/streams/data/flate/6.encoded +0 -0
  230. package/__tests__/core/streams/data/flate/7.decoded +0 -20
  231. package/__tests__/core/streams/data/flate/7.encoded +0 -1
  232. package/__tests__/core/streams/data/lzw/1.decoded +0 -0
  233. package/__tests__/core/streams/data/lzw/1.encoded +0 -0
  234. package/__tests__/core/streams/data/lzw/2.decoded +0 -0
  235. package/__tests__/core/streams/data/lzw/2.encoded +0 -0
  236. package/__tests__/core/streams/data/lzw/3.decoded +0 -14
  237. package/__tests__/core/streams/data/lzw/3.encoded +0 -2
  238. package/__tests__/core/streams/data/lzw/4.decoded +0 -14
  239. package/__tests__/core/streams/data/lzw/4.encoded +0 -2
  240. package/__tests__/core/streams/data/runlength/1.decoded +0 -1
  241. package/__tests__/core/streams/data/runlength/1.encoded +0 -1
  242. package/__tests__/core/streams/data/runlength/2.decoded +0 -1
  243. package/__tests__/core/streams/data/runlength/2.encoded +0 -1
  244. package/__tests__/core/streams/data/runlength/3.decoded +0 -0
  245. package/__tests__/core/streams/data/runlength/3.encoded +0 -0
  246. package/__tests__/core/streams/data/runlength/4.decoded +0 -1
  247. package/__tests__/core/streams/data/runlength/4.encoded +0 -1
  248. package/__tests__/core/streams/data/runlength/5.decoded +0 -1
  249. package/__tests__/core/streams/data/runlength/5.encoded +0 -1
  250. package/__tests__/core/streams/data/runlength/empty.encoded +0 -1
  251. package/__tests__/core/structures/PDFCatalog.spec.ts +0 -108
  252. package/__tests__/core/structures/PDFContentStream.spec.ts +0 -117
  253. package/__tests__/core/structures/PDFCrossRefStream.spec.ts +0 -145
  254. package/__tests__/core/structures/PDFObjectStream.spec.ts +0 -138
  255. package/__tests__/core/structures/PDFPageLeaf.spec.ts +0 -355
  256. package/__tests__/core/structures/PDFPageTree.spec.ts +0 -592
  257. package/__tests__/core/writers/PDFStreamWriter.spec.ts +0 -71
  258. package/__tests__/core/writers/PDFWriter.spec.ts +0 -144
  259. package/__tests__/core/writers/data/stream-writer-1.pdf +0 -0
  260. package/__tests__/index.test.ts +0 -12
  261. package/__tests__/utils/base64.spec.ts +0 -61
  262. package/__tests__/utils/data/simple.pdf +0 -201
  263. package/__tests__/utils/data/simple.pdf.base64 +0 -1
  264. package/__tests__/utils/pdfDocEncoding.spec.ts +0 -82
  265. package/__tests__/utils/png.spec.ts +0 -53
  266. package/__tests__/utils/rng.spec.ts +0 -14
  267. package/__tests__/utils/strings.spec.ts +0 -98
  268. package/__tests__/utils/unicode.spec.ts +0 -337
  269. package/assets/fonts/source_hans_jp/SourceHanSerifJP-Regular.otf +0 -0
  270. package/assets/fonts/ubuntu/Ubuntu-B.ttf +0 -0
  271. package/assets/fonts/ubuntu/Ubuntu-R.ttf +0 -0
  272. package/assets/images/cat_riding_unicorn.jpg +0 -0
  273. package/assets/images/cmyk_colorspace.jpg +0 -0
  274. package/assets/images/greyscale_bird.png +0 -0
  275. package/assets/images/minions_banana_alpha.png +0 -0
  276. package/assets/images/minions_banana_no_alpha.png +0 -0
  277. package/assets/images/minions_laughing.jpg +0 -0
  278. package/assets/pdfs/bixby_guide.pdf +0 -0
  279. package/assets/pdfs/encrypted_new.pdf +0 -0
  280. package/assets/pdfs/encrypted_old.pdf +0 -0
  281. package/assets/pdfs/fancy_fields.pdf +0 -0
  282. package/assets/pdfs/giraffe.pdf +0 -0
  283. package/assets/pdfs/invalid_root_ref.pdf +0 -0
  284. package/assets/pdfs/just_metadata.pdf +0 -49
  285. package/assets/pdfs/missing_endobj_keyword.pdf +0 -70
  286. package/assets/pdfs/missing_xref_trailer_dict.pdf +0 -141
  287. package/assets/pdfs/normal.pdf +0 -0
  288. package/assets/pdfs/pdf20examples/PDF 2.0 with offset start.pdf +0 -179
  289. package/assets/pdfs/stuff_following_header.pdf +0 -0
  290. package/assets/pdfs/us_constitution.pdf +0 -0
  291. package/assets/pdfs/with_comments.pdf +0 -0
  292. package/assets/pdfs/with_invalid_objects.pdf +0 -53
  293. package/assets/pdfs/with_invalid_stream_EOL.pdf +0 -0
  294. package/assets/pdfs/with_null_parent_entry.pdf +0 -0
  295. package/assets/pdfs/with_signature.pdf +0 -0
  296. package/assets/pdfs/with_update_sections.pdf +0 -0
  297. package/assets/pdfs/with_viewer_prefs.pdf +0 -0
  298. package/assets/pdfs/with_xfa_fields.pdf +0 -0
  299. package/src/api/PDFDocument.ts +0 -1389
  300. package/src/api/PDFDocumentOptions.ts +0 -45
  301. package/src/api/PDFEmbeddedFile.ts +0 -87
  302. package/src/api/PDFEmbeddedPage.ts +0 -100
  303. package/src/api/PDFFont.ts +0 -149
  304. package/src/api/PDFImage.ts +0 -143
  305. package/src/api/PDFJavaScript.ts +0 -75
  306. package/src/api/PDFPage.ts +0 -1604
  307. package/src/api/PDFPageOptions.ts +0 -175
  308. package/src/api/StandardFonts.ts +0 -16
  309. package/src/api/colors.ts +0 -109
  310. package/src/api/errors.ts +0 -110
  311. package/src/api/form/PDFButton.ts +0 -242
  312. package/src/api/form/PDFCheckBox.ts +0 -247
  313. package/src/api/form/PDFDropdown.ts +0 -637
  314. package/src/api/form/PDFField.ts +0 -491
  315. package/src/api/form/PDFForm.ts +0 -842
  316. package/src/api/form/PDFOptionList.ts +0 -555
  317. package/src/api/form/PDFRadioGroup.ts +0 -455
  318. package/src/api/form/PDFSignature.ts +0 -44
  319. package/src/api/form/PDFTextField.ts +0 -811
  320. package/src/api/form/appearances.ts +0 -655
  321. package/src/api/image/alignment.ts +0 -5
  322. package/src/api/objects.ts +0 -10
  323. package/src/api/operations.ts +0 -873
  324. package/src/api/operators.ts +0 -335
  325. package/src/api/rotations.ts +0 -84
  326. package/src/api/sizes.ts +0 -52
  327. package/src/api/svg.ts +0 -888
  328. package/src/api/svgPath.ts +0 -460
  329. package/src/api/text/alignment.ts +0 -5
  330. package/src/api/text/layout.ts +0 -328
  331. package/src/core/PDFContext.ts +0 -274
  332. package/src/core/PDFObjectCopier.ts +0 -142
  333. package/src/core/acroform/PDFAcroButton.ts +0 -104
  334. package/src/core/acroform/PDFAcroCheckBox.ts +0 -48
  335. package/src/core/acroform/PDFAcroChoice.ts +0 -143
  336. package/src/core/acroform/PDFAcroComboBox.ts +0 -21
  337. package/src/core/acroform/PDFAcroField.ts +0 -168
  338. package/src/core/acroform/PDFAcroForm.ts +0 -96
  339. package/src/core/acroform/PDFAcroListBox.ts +0 -19
  340. package/src/core/acroform/PDFAcroNonTerminal.ts +0 -33
  341. package/src/core/acroform/PDFAcroPushButton.ts +0 -21
  342. package/src/core/acroform/PDFAcroRadioButton.ts +0 -57
  343. package/src/core/acroform/PDFAcroTerminal.ts +0 -70
  344. package/src/core/acroform/PDFAcroText.ts +0 -76
  345. package/src/core/acroform/flags.ts +0 -162
  346. package/src/core/acroform/utils.ts +0 -129
  347. package/src/core/annotation/AppearanceCharacteristics.ts +0 -133
  348. package/src/core/annotation/BorderStyle.ts +0 -31
  349. package/src/core/annotation/PDFAnnotation.ts +0 -148
  350. package/src/core/annotation/PDFWidgetAnnotation.ts +0 -111
  351. package/src/core/annotation/flags.ts +0 -90
  352. package/src/core/crypto.ts +0 -1844
  353. package/src/core/document/PDFCrossRefSection.ts +0 -161
  354. package/src/core/document/PDFHeader.ts +0 -48
  355. package/src/core/document/PDFTrailer.ts +0 -48
  356. package/src/core/document/PDFTrailerDict.ts +0 -39
  357. package/src/core/embedders/CMap.ts +0 -65
  358. package/src/core/embedders/CustomFontEmbedder.ts +0 -237
  359. package/src/core/embedders/CustomFontSubsetEmbedder.ts +0 -89
  360. package/src/core/embedders/FileEmbedder.ts +0 -77
  361. package/src/core/embedders/FontFlags.ts +0 -45
  362. package/src/core/embedders/JavaScriptEmbedder.ts +0 -34
  363. package/src/core/embedders/JpegEmbedder.ts +0 -118
  364. package/src/core/embedders/PDFPageEmbedder.ts +0 -139
  365. package/src/core/embedders/PngEmbedder.ts +0 -69
  366. package/src/core/embedders/StandardFontEmbedder.ts +0 -121
  367. package/src/core/errors.ts +0 -226
  368. package/src/core/interactive/ViewerPreferences.ts +0 -565
  369. package/src/core/objects/PDFArray.ts +0 -179
  370. package/src/core/objects/PDFBool.ts +0 -53
  371. package/src/core/objects/PDFDict.ts +0 -220
  372. package/src/core/objects/PDFHexString.ts +0 -94
  373. package/src/core/objects/PDFInvalidObject.ts +0 -34
  374. package/src/core/objects/PDFName.ts +0 -152
  375. package/src/core/objects/PDFNull.ts +0 -30
  376. package/src/core/objects/PDFNumber.ts +0 -44
  377. package/src/core/objects/PDFObject.ts +0 -22
  378. package/src/core/objects/PDFRawStream.ts +0 -41
  379. package/src/core/objects/PDFRef.ts +0 -51
  380. package/src/core/objects/PDFStream.ts +0 -87
  381. package/src/core/objects/PDFString.ts +0 -118
  382. package/src/core/operators/PDFOperator.ts +0 -72
  383. package/src/core/operators/PDFOperatorNames.ts +0 -92
  384. package/src/core/parser/BaseParser.ts +0 -119
  385. package/src/core/parser/ByteStream.ts +0 -76
  386. package/src/core/parser/PDFObjectParser.ts +0 -302
  387. package/src/core/parser/PDFObjectStreamParser.ts +0 -65
  388. package/src/core/parser/PDFParser.ts +0 -363
  389. package/src/core/parser/PDFXRefStreamParser.ts +0 -129
  390. package/src/core/streams/Ascii85Stream.ts +0 -97
  391. package/src/core/streams/AsciiHexStream.ts +0 -77
  392. package/src/core/streams/DecodeStream.ts +0 -188
  393. package/src/core/streams/DecryptStream.ts +0 -49
  394. package/src/core/streams/FlateStream.ts +0 -397
  395. package/src/core/streams/LZWStream.ts +0 -157
  396. package/src/core/streams/RunLengthStream.ts +0 -55
  397. package/src/core/streams/Stream.ts +0 -126
  398. package/src/core/streams/decode.ts +0 -70
  399. package/src/core/structures/PDFCatalog.ts +0 -81
  400. package/src/core/structures/PDFContentStream.ts +0 -58
  401. package/src/core/structures/PDFCrossRefStream.ts +0 -238
  402. package/src/core/structures/PDFFlateStream.ts +0 -40
  403. package/src/core/structures/PDFObjectStream.ts +0 -91
  404. package/src/core/structures/PDFPageLeaf.ts +0 -244
  405. package/src/core/structures/PDFPageTree.ts +0 -192
  406. package/src/core/syntax/CharCodes.ts +0 -62
  407. package/src/core/syntax/Delimiters.ts +0 -14
  408. package/src/core/syntax/Irregular.ts +0 -10
  409. package/src/core/syntax/Keywords.ts +0 -57
  410. package/src/core/syntax/Numeric.ts +0 -26
  411. package/src/core/syntax/Whitespace.ts +0 -10
  412. package/src/core/writers/PDFStreamWriter.ts +0 -114
  413. package/src/core/writers/PDFWriter.ts +0 -146
  414. package/src/types/fontkit.ts +0 -643
  415. package/src/utils/Cache.ts +0 -26
  416. package/src/utils/arrays.ts +0 -153
  417. package/src/utils/async.ts +0 -8
  418. package/src/utils/base64.ts +0 -98
  419. package/src/utils/elements/Arc.ts +0 -97
  420. package/src/utils/elements/Circle.ts +0 -47
  421. package/src/utils/elements/Ellipse.ts +0 -117
  422. package/src/utils/elements/GraphElement.ts +0 -14
  423. package/src/utils/elements/Line.ts +0 -83
  424. package/src/utils/elements/Plot.ts +0 -50
  425. package/src/utils/elements/Point.ts +0 -37
  426. package/src/utils/elements/Rectangle.ts +0 -65
  427. package/src/utils/elements/Segment.ts +0 -81
  428. package/src/utils/errors.ts +0 -3
  429. package/src/utils/intersections.ts +0 -237
  430. package/src/utils/maths.ts +0 -96
  431. package/src/utils/numbers.ts +0 -55
  432. package/src/utils/objects.ts +0 -13
  433. package/src/utils/pdfDocEncoding.ts +0 -69
  434. package/src/utils/png.ts +0 -100
  435. package/src/utils/rng.ts +0 -21
  436. package/src/utils/strings.ts +0 -191
  437. package/src/utils/validators.ts +0 -192
  438. package/tsconfig.build.json +0 -14
  439. package/tsconfig.json +0 -15
  440. package/vite.config.mts +0 -39
  441. /package/{src/api/form/index.ts → dist/api/form/index.d.ts} +0 -0
  442. /package/{src/api/image/index.ts → dist/api/image/index.d.ts} +0 -0
  443. /package/{src/api/index.ts → dist/api/index.d.ts} +0 -0
  444. /package/{src/api/text/index.ts → dist/api/text/index.d.ts} +0 -0
  445. /package/{src/core/acroform/index.ts → dist/core/acroform/index.d.ts} +0 -0
  446. /package/{src/core/annotation/index.ts → dist/core/annotation/index.d.ts} +0 -0
  447. /package/{src/index.ts → dist/index.d.ts} +0 -0
  448. /package/{src/utils/elements/index.ts → dist/utils/elements/index.d.ts} +0 -0
  449. /package/{src/utils/index.ts → dist/utils/index.d.ts} +0 -0
@@ -1,144 +0,0 @@
1
- import pako from 'pako';
2
- import {
3
- mergeIntoTypedArray,
4
- PDFContext,
5
- PDFName,
6
- PDFRef,
7
- PDFWriter,
8
- typedArrayFor,
9
- } from '../../../src/index';
10
-
11
- const contentStreamText = `
12
- BT
13
- /F1 24 Tf
14
- 100 100 Td
15
- (Hello World and stuff!) Tj
16
- ET
17
- `;
18
-
19
- const encodedContentStream = pako.deflate(typedArrayFor(contentStreamText));
20
-
21
- const pdfBytes = mergeIntoTypedArray(
22
- `%PDF-1.7
23
- %
24
-
25
- 9000 0 obj
26
- <<
27
- /Filter /FlateDecode
28
- /Length 67
29
- >>
30
- stream
31
- `,
32
- encodedContentStream,
33
- `
34
- endstream
35
- endobj
36
-
37
- 9001 0 obj
38
- <<
39
- /Type /Font
40
- /Subtype /Type1
41
- /Name /F1
42
- /BaseFont /Helvetica
43
- /Encoding /MacRomanEncoding
44
- >>
45
- endobj
46
-
47
- 9002 0 obj
48
- <<
49
- /Type /Page
50
- /MediaBox [ 0 0 612 792 ]
51
- /Contents 9000 0 R
52
- /Resources <<
53
- /Font <<
54
- /F1 9001 0 R
55
- >>
56
- >>
57
- /Parent 9003 0 R
58
- >>
59
- endobj
60
-
61
- 9003 0 obj
62
- <<
63
- /Type /Pages
64
- /Kids [ 9002 0 R ]
65
- /Count 1
66
- >>
67
- endobj
68
-
69
- 9004 0 obj
70
- <<
71
- /Type /Catalog
72
- /Pages 9003 0 R
73
- >>
74
- endobj
75
-
76
- xref
77
- 0 1
78
- 0000000000 65535 f
79
- 9000 5
80
- 0000000016 00000 n
81
- 0000000158 00000 n
82
- 0000000270 00000 n
83
- 0000000411 00000 n
84
- 0000000477 00000 n
85
-
86
- trailer
87
- <<
88
- /Size 9005
89
- /Root 9004 0 R
90
- >>
91
-
92
- startxref
93
- 533
94
- %%EOF`,
95
- );
96
-
97
- describe(`PDFWriter`, () => {
98
- it(`serializes PDFContext objects using Indirect Objects and a Cross Reference table`, async () => {
99
- const context = PDFContext.create();
100
-
101
- const contentStream = context.flateStream(contentStreamText);
102
- const contentStreamRef = PDFRef.of(9000);
103
- context.assign(contentStreamRef, contentStream);
104
-
105
- const fontDict = context.obj({
106
- Type: 'Font',
107
- Subtype: 'Type1',
108
- Name: 'F1',
109
- BaseFont: 'Helvetica',
110
- Encoding: 'MacRomanEncoding',
111
- });
112
- const fontDictRef = context.register(fontDict);
113
-
114
- const page = context.obj({
115
- Type: 'Page',
116
- MediaBox: [0, 0, 612, 792],
117
- Contents: contentStreamRef,
118
- Resources: { Font: { F1: fontDictRef } },
119
- });
120
- const pageRef = context.register(page);
121
-
122
- const pages = context.obj({
123
- Type: 'Pages',
124
- Kids: [pageRef],
125
- Count: 1,
126
- });
127
- const pagesRef = context.register(pages);
128
- page.set(PDFName.of('Parent'), pagesRef);
129
-
130
- const catalog = context.obj({
131
- Type: 'Catalog',
132
- Pages: pagesRef,
133
- });
134
- context.trailerInfo.Root = context.register(catalog);
135
-
136
- const buffer = await PDFWriter.forContext(
137
- context,
138
- Infinity,
139
- ).serializeToBuffer();
140
-
141
- expect(buffer.length).toBe(pdfBytes.length);
142
- expect(buffer).toEqual(pdfBytes);
143
- });
144
- });
@@ -1,12 +0,0 @@
1
- import { PDFDocument } from '../src';
2
-
3
- describe('pdf-lib basic functionality', () => {
4
- test('should create a new PDF document', async () => {
5
- const pdfDoc = await PDFDocument.create();
6
- expect(pdfDoc).toBeDefined();
7
- });
8
-
9
- test('should export main classes', () => {
10
- expect(PDFDocument).toBeDefined();
11
- });
12
- });
@@ -1,61 +0,0 @@
1
- import fs from 'fs';
2
- import { decodeFromBase64DataUri } from '../../src/utils';
3
-
4
- const pdfBytes = fs.readFileSync(`${__dirname}/data/simple.pdf`);
5
- const pdfBase64Bytes = fs.readFileSync(`${__dirname}/data/simple.pdf.base64`);
6
-
7
- // Jest stalls when comparing large arrays, so we'll use this instead
8
- const arraysAreEqual = (a: Uint8Array, b: Uint8Array) => {
9
- if (a.length !== b.length) return false;
10
- for (let idx = 0, len = a.length; idx < len; idx++) {
11
- if (a[idx] !== b[idx]) return false;
12
- }
13
- return true;
14
- };
15
-
16
- describe(`decodeFromBase64DataUri`, () => {
17
- it(`can decode plain base64 strings`, () => {
18
- const uri = String(pdfBase64Bytes);
19
- expect(arraysAreEqual(decodeFromBase64DataUri(uri), pdfBytes)).toBe(true);
20
- });
21
-
22
- it(`can decode complete data URIs`, () => {
23
- const uri = `data:application/pdf;base64,${pdfBase64Bytes}`;
24
- expect(arraysAreEqual(decodeFromBase64DataUri(uri), pdfBytes)).toBe(true);
25
- });
26
-
27
- it(`can decode partial data URIs (1)`, () => {
28
- const uri = `data:application/pdf;,${pdfBase64Bytes}`;
29
- expect(arraysAreEqual(decodeFromBase64DataUri(uri), pdfBytes)).toBe(true);
30
- });
31
-
32
- it(`can decode partial data URIs (2)`, () => {
33
- const uri = `data:;,${pdfBase64Bytes}`;
34
- expect(arraysAreEqual(decodeFromBase64DataUri(uri), pdfBytes)).toBe(true);
35
- });
36
-
37
- it(`can decode partial data URIs (3)`, () => {
38
- const uri = `data:application/pdf;,${pdfBase64Bytes}`;
39
- expect(arraysAreEqual(decodeFromBase64DataUri(uri), pdfBytes)).toBe(true);
40
- });
41
-
42
- it(`can decode partial data URIs (4)`, () => {
43
- const uri = `:;,${pdfBase64Bytes}`;
44
- expect(arraysAreEqual(decodeFromBase64DataUri(uri), pdfBytes)).toBe(true);
45
- });
46
-
47
- it(`can decode partial data URIs (5)`, () => {
48
- const uri = `;,${pdfBase64Bytes}`;
49
- expect(arraysAreEqual(decodeFromBase64DataUri(uri), pdfBytes)).toBe(true);
50
- });
51
-
52
- it(`can decode partial data URIs (6)`, () => {
53
- const uri = `,${pdfBase64Bytes}`;
54
- expect(arraysAreEqual(decodeFromBase64DataUri(uri), pdfBytes)).toBe(true);
55
- });
56
-
57
- it(`can throws an error when it fails to parse the URI`, () => {
58
- const uri = {} as any;
59
- expect(() => decodeFromBase64DataUri(uri)).toThrow();
60
- });
61
- });
@@ -1,201 +0,0 @@
1
- %PDF-2.0
2
-
3
- 1 0 obj
4
- <<
5
- /Type /Catalog
6
- /Metadata 2 0 R
7
- /Pages 3 0 R
8
- >>
9
- endobj
10
-
11
- 2 0 obj
12
- <<
13
- /Length 2351
14
- /Type /Metadata
15
- /Subtype /XML
16
- >>
17
- stream
18
- <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Insert XMP tool name here.'>
19
- <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
20
- <rdf:Description rdf:about="" xmlns:pdf="http://ns.adobe.com/pdf/1.3/">
21
- <pdf:Producer>Datalogics - example producer program name here</pdf:Producer>
22
- <pdf:Copyright>Copyright 2017 PDF Association</pdf:Copyright>
23
- <pdf:Keywords>PDF 2.0 sample example</pdf:Keywords>
24
- </rdf:Description>
25
- <rdf:Description rdf:about="" xmlns:xap="http://ns.adobe.com/xap/1.0/">
26
- <xap:CreateDate>2017-05-24T10:30:11Z</xap:CreateDate>
27
- <xap:MetadataDate>2017-07-11T07:55:11Z</xap:MetadataDate>
28
- <xap:ModifyDate>2017-07-11T07:55:11Z</xap:ModifyDate>
29
- <xap:CreatorTool>Datalogics - example creator tool name here</xap:CreatorTool>
30
- </rdf:Description>
31
- <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/">
32
- <dc:format>application/pdf</dc:format>
33
- <dc:title>
34
- <rdf:Alt>
35
- <rdf:li xml:lang="x-default">A simple PDF 2.0 example file</rdf:li>
36
- </rdf:Alt>
37
- </dc:title>
38
- <dc:creator>
39
- <rdf:Seq>
40
- <rdf:li>Datalogics Incorporated</rdf:li>
41
- </rdf:Seq>
42
- </dc:creator>
43
- <dc:description>
44
- <rdf:Alt>
45
- <rdf:li xml:lang="x-default">Demonstration of a simple PDF 2.0 file.</rdf:li>
46
- </rdf:Alt>
47
- </dc:description>
48
- <dc:rights>
49
- <rdf:Alt>
50
- <rdf:li xml:lang="x-default">Copyright 2017 PDF Association. Licensed to the public under Creative Commons Attribution-ShareAlike 4.0 International license.</rdf:li>
51
- </rdf:Alt>
52
- </dc:rights>
53
- </rdf:Description>
54
- <rdf:Description rdf:about="" xmlns:xapRights="http://ns.adobe.com/xap/1.0/rights/">
55
- <xapRights:Marked>True</xapRights:Marked>
56
- </rdf:Description>
57
- <rdf:Description rdf:about="" xmlns:cc="http://creativecommons.org/ns#">
58
- <cc:license rdf:resource="https://creativecommons.org/licenses/sa/4.0/" />
59
- </rdf:Description>
60
- <rdf:Description rdf:about="" xmlns:xapMM="http://ns.adobe.com/xap/1.0/mm/">
61
- <xapMM:DocumentID>uuid:3eef2166-8332-abb4-3d31-77334578873f</xapMM:DocumentID>
62
- <xapMM:InstanceID>uuid:991bcce7-ee70-11a3-91aa-77bbe2181fd8</xapMM:InstanceID>
63
- </rdf:Description>
64
- </rdf:RDF>
65
- </x:xmpmeta>
66
- endstream
67
- endobj
68
-
69
- 3 0 obj
70
- <<
71
- /Type /Pages
72
- /Kids [4 0 R]
73
- /Count 1
74
- >>
75
- endobj
76
-
77
- 4 0 obj
78
- <<
79
- /Type /Page
80
- /Parent 3 0 R
81
- /MediaBox [0 0 612 396]
82
- /Contents [5 0 R 6 0 R]
83
- /Resources <<
84
- /Font << /F1 7 0 R >>
85
- >>
86
- >>
87
- endobj
88
-
89
- 5 0 obj
90
- << /Length 744 >>
91
- stream
92
- % Save the current graphic state
93
- q
94
-
95
- % Draw a black line segment, using the default line width.
96
- 150 250 m
97
- 150 350 l
98
- S
99
-
100
- % Draw a thicker, dashed line segment.
101
- 4 w % Set line width to 4 points
102
- [4 6] 0 d % Set dash pattern to 4 units on, 6 units off
103
- 150 250 m
104
- 400 250 l
105
- S
106
- [] 0 d % Reset dash pattern to a solid line
107
- 1 w % Reset line width to 1 unit
108
-
109
- % Draw a rectangle with a 1-unit red border, filled with light blue.
110
- 1.0 0.0 0.0 RG % Red for stroke color
111
- 0.5 0.75 1.0 rg % Light blue for fill color
112
- 200 300 50 75 re
113
- B
114
-
115
- % Draw a curve filled with gray and with a colored border.
116
- 0.5 0.1 0.2 RG
117
- 0.7 g
118
- 300 300 m
119
- 300 400 400 400 400 300 c
120
- b
121
-
122
- % Restore the graphic state to what it was at the beginning of this stream
123
- Q
124
-
125
- endstream
126
- endobj
127
-
128
- 6 0 obj
129
- << /Length 166 >>
130
- stream
131
- % A text block that shows "Hello World"
132
- % No color is set, so this defaults to black in DeviceGray colorspace
133
- BT
134
- /F1 24 Tf
135
- 100 100 Td
136
- (Hello World) Tj
137
- ET
138
- endstream
139
- endobj
140
-
141
- 7 0 obj
142
- <<
143
- /Type /Font
144
- /Subtype /Type1
145
- /BaseFont /Helvetica
146
- /FirstChar 33
147
- /LastChar 126
148
- /Widths 8 0 R
149
- /FontDescriptor 9 0 R
150
- >>
151
- endobj
152
-
153
- 8 0 obj
154
- [ 278 355 556 556 889 667 222 333 333 389 584 278 333 278 278 556
155
- 556 556 556 556 556 556 556 556 556 278 278 584 584 584 556 1015
156
- 667 667 722 722 667 611 778 722 278 500 667 556 833 722 778 667
157
- 778 722 667 611 722 667 944 667 667 611 278 278 278 469 556 222
158
- 556 556 500 556 556 278 556 556 222 222 500 222 833 556 556 556
159
- 556 333 500 278 556 500 722 500 500 500 334 260 334 584 ]
160
- endobj
161
-
162
- % This FontDescriptor contains only the required entries for PDF 2.0
163
- % for unembedded standard 14 fonts that contain Latin characters
164
- 9 0 obj
165
- <<
166
- /Type /FontDescriptor
167
- /FontName /Helvetica
168
- /Flags 32
169
- /FontBBox [ -166 -225 1000 931 ]
170
- /ItalicAngle 0
171
- /Ascent 718
172
- /Descent -207
173
- /CapHeight 718
174
- /StemV 88
175
- /MissingWidth 0
176
- >>
177
- endobj
178
-
179
- % The object cross-reference table. The first entry
180
- % denotes the start of PDF data in this file.
181
- xref
182
- 0 10
183
- 0000000000 65535 f
184
- 0000000012 00000 n
185
- 0000000092 00000 n
186
- 0000002543 00000 n
187
- 0000002615 00000 n
188
- 0000002778 00000 n
189
- 0000003583 00000 n
190
- 0000003807 00000 n
191
- 0000003968 00000 n
192
- 0000004520 00000 n
193
- trailer
194
- <<
195
- /Size 10
196
- /Root 1 0 R
197
- /ID [ <31c7a8a269e4c59bc3cd7df0dabbf388><31c7a8a269e4c59bc3cd7df0dabbf388> ]
198
- >>
199
- startxref
200
- 4847
201
- %%EOF
@@ -1 +0,0 @@
1
- JVBERi0yLjANCg0KMSAwIG9iag0KPDwNCiAgL1R5cGUgL0NhdGFsb2cNCiAgL01ldGFkYXRhIDIgMCBSDQogIC9QYWdlcyAzIDAgUg0KPj4NCmVuZG9iag0KDQoyIDAgb2JqDQo8PA0KICAvTGVuZ3RoIDIzNTENCiAgL1R5cGUgL01ldGFkYXRhDQogIC9TdWJ0eXBlIC9YTUwNCj4+DQpzdHJlYW0NCjx4OnhtcG1ldGEgeG1sbnM6eD0nYWRvYmU6bnM6bWV0YS8nIHg6eG1wdGs9J0luc2VydCBYTVAgdG9vbCBuYW1lIGhlcmUuJz4NCiAgPHJkZjpSREYgeG1sbnM6cmRmPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjJz4NCiAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczpwZGY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGRmLzEuMy8iPg0KICAgICAgPHBkZjpQcm9kdWNlcj5EYXRhbG9naWNzIC0gZXhhbXBsZSBwcm9kdWNlciBwcm9ncmFtIG5hbWUgaGVyZTwvcGRmOlByb2R1Y2VyPg0KICAgICAgPHBkZjpDb3B5cmlnaHQ+Q29weXJpZ2h0IDIwMTcgUERGIEFzc29jaWF0aW9uPC9wZGY6Q29weXJpZ2h0Pg0KICAgICAgPHBkZjpLZXl3b3Jkcz5QREYgMi4wIHNhbXBsZSBleGFtcGxlPC9wZGY6S2V5d29yZHM+DQogICAgPC9yZGY6RGVzY3JpcHRpb24+DQogICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eGFwPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIj4NCiAgICAgIDx4YXA6Q3JlYXRlRGF0ZT4yMDE3LTA1LTI0VDEwOjMwOjExWjwveGFwOkNyZWF0ZURhdGU+DQogICAgICA8eGFwOk1ldGFkYXRhRGF0ZT4yMDE3LTA3LTExVDA3OjU1OjExWjwveGFwOk1ldGFkYXRhRGF0ZT4NCiAgICAgIDx4YXA6TW9kaWZ5RGF0ZT4yMDE3LTA3LTExVDA3OjU1OjExWjwveGFwOk1vZGlmeURhdGU+DQogICAgICA8eGFwOkNyZWF0b3JUb29sPkRhdGFsb2dpY3MgLSBleGFtcGxlIGNyZWF0b3IgdG9vbCBuYW1lIGhlcmU8L3hhcDpDcmVhdG9yVG9vbD4NCiAgICA8L3JkZjpEZXNjcmlwdGlvbj4NCiAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iPg0KICAgICAgPGRjOmZvcm1hdD5hcHBsaWNhdGlvbi9wZGY8L2RjOmZvcm1hdD4NCiAgICAgIDxkYzp0aXRsZT4NCiAgICAgICAgPHJkZjpBbHQ+DQogICAgICAgICAgPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij5BIHNpbXBsZSBQREYgMi4wIGV4YW1wbGUgZmlsZTwvcmRmOmxpPg0KICAgICAgICA8L3JkZjpBbHQ+DQogICAgICA8L2RjOnRpdGxlPg0KICAgICAgPGRjOmNyZWF0b3I+DQogICAgICAgIDxyZGY6U2VxPg0KICAgICAgICAgIDxyZGY6bGk+RGF0YWxvZ2ljcyBJbmNvcnBvcmF0ZWQ8L3JkZjpsaT4NCiAgICAgICAgPC9yZGY6U2VxPg0KICAgICAgPC9kYzpjcmVhdG9yPg0KICAgICAgPGRjOmRlc2NyaXB0aW9uPg0KICAgICAgICA8cmRmOkFsdD4NCiAgICAgICAgICA8cmRmOmxpIHhtbDpsYW5nPSJ4LWRlZmF1bHQiPkRlbW9uc3RyYXRpb24gb2YgYSBzaW1wbGUgUERGIDIuMCBmaWxlLjwvcmRmOmxpPg0KICAgICAgICA8L3JkZjpBbHQ+DQogICAgICA8L2RjOmRlc2NyaXB0aW9uPg0KICAgICAgPGRjOnJpZ2h0cz4NCiAgICAgICAgPHJkZjpBbHQ+DQogICAgICAgICAgPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij5Db3B5cmlnaHQgMjAxNyBQREYgQXNzb2NpYXRpb24uIExpY2Vuc2VkIHRvIHRoZSBwdWJsaWMgdW5kZXIgQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1TaGFyZUFsaWtlIDQuMCBJbnRlcm5hdGlvbmFsIGxpY2Vuc2UuPC9yZGY6bGk+DQogICAgICAgIDwvcmRmOkFsdD4NCiAgICAgIDwvZGM6cmlnaHRzPg0KICAgIDwvcmRmOkRlc2NyaXB0aW9uPg0KICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhhcFJpZ2h0cz0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3JpZ2h0cy8iPg0KICAgICAgPHhhcFJpZ2h0czpNYXJrZWQ+VHJ1ZTwveGFwUmlnaHRzOk1hcmtlZD4NCiAgICA8L3JkZjpEZXNjcmlwdGlvbj4NCiAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIj4NCiAgICAgIDxjYzpsaWNlbnNlIHJkZjpyZXNvdXJjZT0iaHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL3NhLzQuMC8iIC8+DQogICAgPC9yZGY6RGVzY3JpcHRpb24+DQogICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eGFwTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iPg0KICAgICAgPHhhcE1NOkRvY3VtZW50SUQ+dXVpZDozZWVmMjE2Ni04MzMyLWFiYjQtM2QzMS03NzMzNDU3ODg3M2Y8L3hhcE1NOkRvY3VtZW50SUQ+DQogICAgICA8eGFwTU06SW5zdGFuY2VJRD51dWlkOjk5MWJjY2U3LWVlNzAtMTFhMy05MWFhLTc3YmJlMjE4MWZkODwveGFwTU06SW5zdGFuY2VJRD4NCiAgICA8L3JkZjpEZXNjcmlwdGlvbj4NCiAgPC9yZGY6UkRGPg0KPC94OnhtcG1ldGE+DQplbmRzdHJlYW0NCmVuZG9iag0KDQozIDAgb2JqDQo8PA0KICAvVHlwZSAvUGFnZXMNCiAgL0tpZHMgWzQgMCBSXQ0KICAvQ291bnQgMQ0KPj4NCmVuZG9iag0KDQo0IDAgb2JqDQo8PA0KICAvVHlwZSAvUGFnZQ0KICAvUGFyZW50IDMgMCBSDQogIC9NZWRpYUJveCBbMCAwIDYxMiAzOTZdDQogIC9Db250ZW50cyBbNSAwIFIgNiAwIFJdDQogIC9SZXNvdXJjZXMgPDwNCiAgICAvRm9udCA8PCAvRjEgNyAwIFIgPj4NCiAgPj4NCj4+DQplbmRvYmoNCg0KNSAwIG9iag0KPDwgL0xlbmd0aCA3NDQgPj4NCnN0cmVhbQ0KJSBTYXZlIHRoZSBjdXJyZW50IGdyYXBoaWMgc3RhdGUNCnEgDQoNCiUgRHJhdyBhIGJsYWNrIGxpbmUgc2VnbWVudCwgdXNpbmcgdGhlIGRlZmF1bHQgbGluZSB3aWR0aC4NCjE1MCAyNTAgbQ0KMTUwIDM1MCBsDQpTDQoNCiUgRHJhdyBhIHRoaWNrZXIsIGRhc2hlZCBsaW5lIHNlZ21lbnQuDQo0IHcgJSBTZXQgbGluZSB3aWR0aCB0byA0IHBvaW50cw0KWzQgNl0gMCBkICUgU2V0IGRhc2ggcGF0dGVybiB0byA0IHVuaXRzIG9uLCA2IHVuaXRzIG9mZg0KMTUwIDI1MCBtDQo0MDAgMjUwIGwNClMNCltdIDAgZCAlIFJlc2V0IGRhc2ggcGF0dGVybiB0byBhIHNvbGlkIGxpbmUNCjEgdyAlIFJlc2V0IGxpbmUgd2lkdGggdG8gMSB1bml0DQoNCiUgRHJhdyBhIHJlY3RhbmdsZSB3aXRoIGEgMS11bml0IHJlZCBib3JkZXIsIGZpbGxlZCB3aXRoIGxpZ2h0IGJsdWUuDQoxLjAgMC4wIDAuMCBSRyAlIFJlZCBmb3Igc3Ryb2tlIGNvbG9yDQowLjUgMC43NSAxLjAgcmcgJSBMaWdodCBibHVlIGZvciBmaWxsIGNvbG9yDQoyMDAgMzAwIDUwIDc1IHJlDQpCDQoNCiUgRHJhdyBhIGN1cnZlIGZpbGxlZCB3aXRoIGdyYXkgYW5kIHdpdGggYSBjb2xvcmVkIGJvcmRlci4NCjAuNSAwLjEgMC4yIFJHDQowLjcgZw0KMzAwIDMwMCBtDQozMDAgNDAwIDQwMCA0MDAgNDAwIDMwMCBjDQpiDQoNCiUgUmVzdG9yZSB0aGUgZ3JhcGhpYyBzdGF0ZSB0byB3aGF0IGl0IHdhcyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoaXMgc3RyZWFtDQpRDQoNCmVuZHN0cmVhbQ0KZW5kb2JqDQoNCjYgMCBvYmoNCjw8IC9MZW5ndGggMTY2ID4+DQpzdHJlYW0NCiUgQSB0ZXh0IGJsb2NrIHRoYXQgc2hvd3MgIkhlbGxvIFdvcmxkIg0KJSBObyBjb2xvciBpcyBzZXQsIHNvIHRoaXMgZGVmYXVsdHMgdG8gYmxhY2sgaW4gRGV2aWNlR3JheSBjb2xvcnNwYWNlDQpCVA0KICAvRjEgMjQgVGYNCiAgMTAwIDEwMCBUZA0KICAoSGVsbG8gV29ybGQpIFRqDQpFVA0KZW5kc3RyZWFtDQplbmRvYmoNCg0KNyAwIG9iag0KPDwNCiAgL1R5cGUgL0ZvbnQNCiAgL1N1YnR5cGUgL1R5cGUxDQogIC9CYXNlRm9udCAvSGVsdmV0aWNhDQogIC9GaXJzdENoYXIgMzMNCiAgL0xhc3RDaGFyIDEyNg0KICAvV2lkdGhzIDggMCBSDQogIC9Gb250RGVzY3JpcHRvciA5IDAgUg0KPj4NCmVuZG9iag0KDQo4IDAgb2JqDQpbIDI3OCAzNTUgNTU2IDU1NiA4ODkgNjY3IDIyMiAzMzMgMzMzIDM4OSA1ODQgMjc4IDMzMyAyNzggMjc4IDU1Ng0KICA1NTYgNTU2IDU1NiA1NTYgNTU2IDU1NiA1NTYgNTU2IDU1NiAyNzggMjc4IDU4NCA1ODQgNTg0IDU1NiAxMDE1DQogIDY2NyA2NjcgNzIyIDcyMiA2NjcgNjExIDc3OCA3MjIgMjc4IDUwMCA2NjcgNTU2IDgzMyA3MjIgNzc4IDY2Nw0KICA3NzggNzIyIDY2NyA2MTEgNzIyIDY2NyA5NDQgNjY3IDY2NyA2MTEgMjc4IDI3OCAyNzggNDY5IDU1NiAyMjINCiAgNTU2IDU1NiA1MDAgNTU2IDU1NiAyNzggNTU2IDU1NiAyMjIgMjIyIDUwMCAyMjIgODMzIDU1NiA1NTYgNTU2DQogIDU1NiAzMzMgNTAwIDI3OCA1NTYgNTAwIDcyMiA1MDAgNTAwIDUwMCAzMzQgMjYwIDMzNCA1ODQgXQ0KZW5kb2JqDQoNCiUgVGhpcyBGb250RGVzY3JpcHRvciBjb250YWlucyBvbmx5IHRoZSByZXF1aXJlZCBlbnRyaWVzIGZvciBQREYgMi4wDQolIGZvciB1bmVtYmVkZGVkIHN0YW5kYXJkIDE0IGZvbnRzIHRoYXQgY29udGFpbiBMYXRpbiBjaGFyYWN0ZXJzDQo5IDAgb2JqDQo8PA0KICAvVHlwZSAvRm9udERlc2NyaXB0b3INCiAgL0ZvbnROYW1lIC9IZWx2ZXRpY2ENCiAgL0ZsYWdzIDMyDQogIC9Gb250QkJveCBbIC0xNjYgLTIyNSAxMDAwIDkzMSBdDQogIC9JdGFsaWNBbmdsZSAwDQogIC9Bc2NlbnQgNzE4DQogIC9EZXNjZW50IC0yMDcNCiAgL0NhcEhlaWdodCA3MTgNCiAgL1N0ZW1WIDg4DQogIC9NaXNzaW5nV2lkdGggMCAgDQo+Pg0KZW5kb2JqDQoNCiUgVGhlIG9iamVjdCBjcm9zcy1yZWZlcmVuY2UgdGFibGUuIFRoZSBmaXJzdCBlbnRyeQ0KJSBkZW5vdGVzIHRoZSBzdGFydCBvZiBQREYgZGF0YSBpbiB0aGlzIGZpbGUuDQp4cmVmDQowIDEwDQowMDAwMDAwMDAwIDY1NTM1IGYNCjAwMDAwMDAwMTIgMDAwMDAgbg0KMDAwMDAwMDA5MiAwMDAwMCBuDQowMDAwMDAyNTQzIDAwMDAwIG4NCjAwMDAwMDI2MTUgMDAwMDAgbg0KMDAwMDAwMjc3OCAwMDAwMCBuDQowMDAwMDAzNTgzIDAwMDAwIG4NCjAwMDAwMDM4MDcgMDAwMDAgbg0KMDAwMDAwMzk2OCAwMDAwMCBuDQowMDAwMDA0NTIwIDAwMDAwIG4NCnRyYWlsZXINCjw8DQogIC9TaXplIDEwDQogIC9Sb290IDEgMCBSDQogIC9JRCBbIDwzMWM3YThhMjY5ZTRjNTliYzNjZDdkZjBkYWJiZjM4OD48MzFjN2E4YTI2OWU0YzU5YmMzY2Q3ZGYwZGFiYmYzODg+IF0NCj4+DQpzdGFydHhyZWYNCjQ4NDcNCiUlRU9GDQo=
@@ -1,82 +0,0 @@
1
- import { range, pdfDocEncodingDecode } from '../../src/utils';
2
-
3
- type Mapping = [number, string];
4
-
5
- const identityMapping = (code: number): Mapping => [
6
- code,
7
- String.fromCodePoint(code),
8
- ];
9
-
10
- // Define mappings (see "Table D.2 – PDFDocEncoding Character Set" of the PDF spec)
11
- const mappings: Mapping[] = [
12
- ...range(0x00, 0x15 + 1).map(identityMapping),
13
- [0x16, '\u0017'],
14
- [0x17, '\u0017'],
15
- [0x18, '\u02D8'],
16
- [0x19, '\u02C7'],
17
- [0x1a, '\u02C6'],
18
- [0x1b, '\u02D9'],
19
- [0x1c, '\u02DD'],
20
- [0x1d, '\u02DB'],
21
- [0x1e, '\u02DA'],
22
- [0x1f, '\u02DC'],
23
- ...range(0x20, 0x7e + 1).map(identityMapping),
24
- [0x7f, '\uFFFD'],
25
- [0x80, '\u2022'],
26
- [0x81, '\u2020'],
27
- [0x82, '\u2021'],
28
- [0x83, '\u2026'],
29
- [0x84, '\u2014'],
30
- [0x85, '\u2013'],
31
- [0x86, '\u0192'],
32
- [0x87, '\u2044'],
33
- [0x88, '\u2039'],
34
- [0x89, '\u203A'],
35
- [0x8a, '\u2212'],
36
- [0x8b, '\u2030'],
37
- [0x8c, '\u201E'],
38
- [0x8d, '\u201C'],
39
- [0x8e, '\u201D'],
40
- [0x8f, '\u2018'],
41
- [0x90, '\u2019'],
42
- [0x91, '\u201A'],
43
- [0x92, '\u2122'],
44
- [0x93, '\uFB01'],
45
- [0x94, '\uFB02'],
46
- [0x95, '\u0141'],
47
- [0x96, '\u0152'],
48
- [0x97, '\u0160'],
49
- [0x98, '\u0178'],
50
- [0x99, '\u017D'],
51
- [0x9a, '\u0131'],
52
- [0x9b, '\u0142'],
53
- [0x9c, '\u0153'],
54
- [0x9d, '\u0161'],
55
- [0x9e, '\u017E'],
56
- [0x9f, '\uFFFD'],
57
- [0xa0, '\u20AC'],
58
- ...range(0xa1, 0xac + 1).map(identityMapping),
59
- [0xad, '\uFFFD'],
60
- ...range(0xae, 0xff + 1).map(identityMapping),
61
- ];
62
-
63
- describe(`pdfDocEncodingDecode`, () => {
64
- it(`maps all PDFDocEncoding codes from 0-255 to the correct Unicode code points`, () => {
65
- // Make sure we have defined mappings for all codes from 0-255
66
- expect(mappings.map(([code]) => code).sort((a, b) => a - b)).toEqual(
67
- range(0, 256),
68
- );
69
-
70
- // Now make sure that `pdfDocEncodingDecode` decodes everything correctly
71
- mappings.forEach(([input1, expected1]) => {
72
- const actual1 = pdfDocEncodingDecode(Uint8Array.of(input1));
73
- expect(actual1).toBe(expected1);
74
- });
75
-
76
- // Let's do it again but all at once instead of passing each code separately
77
- const input2 = Uint8Array.from(mappings.map(([code]) => code));
78
- const expected2 = mappings.map(([, str]) => str).join('');
79
- const actual2 = pdfDocEncodingDecode(input2);
80
- expect(actual2).toEqual(expected2);
81
- });
82
- });
@@ -1,53 +0,0 @@
1
- import { PNG } from '../../src/utils/png';
2
-
3
- // prettier-ignore
4
- const singlePixelPng = new Uint8Array([
5
- 137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 1,
6
- 0, 0, 0, 1, 8, 6, 0, 0, 0, 31, 21, 196, 137, 0, 0, 0, 13, 73, 68, 65, 84,
7
- 24, 87, 99, 248, 95, 17, 208, 0, 0, 6, 137, 2, 72, 25, 58, 220, 62, 0, 0,
8
- 0, 0, 73, 69, 78, 68, 174, 66, 96, 130,
9
- ]);
10
-
11
- describe(`PNG`, () => {
12
- afterEach(() => {
13
- vi.doUnmock('@pdf-lib/upng');
14
- vi.resetModules();
15
- });
16
-
17
- it(`can load images with alpha values greater than 1`, () => {
18
- // This Uint8Array contains a PNG image composed of a single pixel. It was
19
- // generated with the following code in a browser:
20
- // ```
21
- // const ctx = c.getContext('2d');
22
- // ctx.fillStyle = 'rgba(255, 120, 80, 0.5)';
23
- // ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height);
24
- // ```
25
- // The pixel has the following values: R=255, G=120, B=80, A=128
26
- //
27
- const pngImage = PNG.load(singlePixelPng);
28
-
29
- expect(pngImage.rgbChannel).toEqual(new Uint8Array([255, 120, 80]));
30
- expect(pngImage.alphaChannel).toEqual(new Uint8Array([128]));
31
- });
32
-
33
- it(`resolves nested default exports from @pdf-lib/upng`, async () => {
34
- vi.doMock('@pdf-lib/upng', () => ({
35
- default: {
36
- default: {
37
- decode: vi.fn(() => ({
38
- ctype: 6,
39
- width: 1,
40
- height: 1,
41
- })),
42
- toRGBA8: vi.fn(() => [new Uint8Array([255, 120, 80, 128]).buffer]),
43
- },
44
- },
45
- }));
46
-
47
- const { PNG: MockedPNG } = await import('../../src/utils/png');
48
- const pngImage = MockedPNG.load(singlePixelPng);
49
-
50
- expect(pngImage.rgbChannel).toEqual(new Uint8Array([255, 120, 80]));
51
- expect(pngImage.alphaChannel).toEqual(new Uint8Array([128]));
52
- });
53
- });
@@ -1,14 +0,0 @@
1
- import { SimpleRNG } from '../../src/utils/rng';
2
-
3
- describe(`psuedo random numbers`, () => {
4
- it(`generates distinct numbers`, () => {
5
- const rng = SimpleRNG.withSeed(1);
6
- expect(rng.nextInt()).not.toEqual(rng.nextInt());
7
- });
8
-
9
- it(`generates the same number across different SimpleRNG`, () => {
10
- const rng = SimpleRNG.withSeed(1);
11
- expect(rng.nextInt()).toEqual(0.7098480789645691);
12
- expect(rng.nextInt()).toEqual(0.9742682568175951);
13
- });
14
- });
@@ -1,98 +0,0 @@
1
- import fontkit from '@pdf-lib/fontkit';
2
- import { FontNames } from '@pdf-lib/standard-fonts';
3
- import fs from 'fs';
4
-
5
- import { CustomFontEmbedder, StandardFontEmbedder } from '../../src/core';
6
- import { breakTextIntoLines } from '../../src/utils';
7
-
8
- const font = StandardFontEmbedder.for(FontNames.Helvetica);
9
-
10
- const textSize = 24;
11
-
12
- const computeTextWidth = (text: string) =>
13
- font.widthOfTextAtSize(text, textSize);
14
-
15
- describe(`breakTextIntoLines`, () => {
16
- it(`handles empty wordBreaks arrays`, () => {
17
- const input = 'foobar-quxbaz';
18
- const expected = ['foobar-quxbaz'];
19
- const actual = breakTextIntoLines(input, [], 21, computeTextWidth);
20
- expect(actual).toEqual(expected);
21
- });
22
-
23
- it(`handles trailing newlines`, () => {
24
- const input = 'foo\n';
25
- const expected = ['foo'];
26
- const actual = breakTextIntoLines(input, [], 21, computeTextWidth);
27
- expect(actual).toEqual(expected);
28
- });
29
-
30
- it(`handles trailing carriage returns`, () => {
31
- const input = 'foo\r';
32
- const expected = ['foo'];
33
- const actual = breakTextIntoLines(input, [], 21, computeTextWidth);
34
- expect(actual).toEqual(expected);
35
- });
36
-
37
- it(`always breaks lines when EOLs are encountered`, () => {
38
- const input = 'foo\nbar-qux\rbaz\n';
39
- const expected = ['foo', 'bar-qux', 'baz'];
40
- const actual = breakTextIntoLines(input, [], 90000, computeTextWidth);
41
- expect(actual).toEqual(expected);
42
- });
43
-
44
- it(`breaks at the last possible 'wordBreak' before exceeding 'maxWidth' (1)`, () => {
45
- const input =
46
- 'Lorem Test ipsum dolor sit amet, consectetur adipiscing\nelit';
47
- const expected = [
48
- 'Lorem T',
49
- 'est ipsu',
50
- 'm dolor s',
51
- 'it amet, c',
52
- 'onsectet',
53
- 'ur adipis',
54
- 'cing',
55
- 'elit',
56
- ];
57
- const actual = breakTextIntoLines(
58
- input,
59
- ['', 'Test'],
60
- 100,
61
- computeTextWidth,
62
- );
63
- expect(actual).toEqual(expected);
64
- });
65
-
66
- it(`breaks at the last possible 'wordBreak' before exceeding 'maxWidth' (2)`, () => {
67
- const input = 'Foo%bar%baz';
68
- const expected = ['Foo%', 'bar%baz'];
69
- const actual = breakTextIntoLines(input, ['%'], 100, computeTextWidth);
70
- expect(actual).toEqual(expected);
71
- });
72
-
73
- it(`handles non-ascii code points and empty breaks`, async () => {
74
- const sourceHansBytes = fs.readFileSync(
75
- 'assets/fonts/source_hans_jp/SourceHanSerifJP-Regular.otf',
76
- );
77
- const sourceHansFont = await CustomFontEmbedder.for(
78
- fontkit,
79
- sourceHansBytes,
80
- );
81
-
82
- const input =
83
- '遅未亮惑職界転藤柔索名午納,問通桑転加料演載満経信回込町者訟窃。';
84
- const expected = [
85
- '遅未亮惑職',
86
- '界転藤柔索',
87
- '名午納,問',
88
- '通桑転加料',
89
- '演載満経信',
90
- '回込町者訟',
91
- '窃。',
92
- ];
93
- const actual = breakTextIntoLines(input, [''], 125, (text: string) =>
94
- sourceHansFont.widthOfTextAtSize(text, 24),
95
- );
96
- expect(actual).toEqual(expected);
97
- });
98
- });