@pdfme/pdf-lib 6.0.3 → 6.0.4-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.
- package/{src/api/Embeddable.ts → dist/api/Embeddable.d.ts} +1 -1
- package/dist/api/PDFDocument.d.ts +778 -0
- package/dist/api/PDFDocumentOptions.d.ts +38 -0
- package/dist/api/PDFEmbeddedFile.d.ts +38 -0
- package/dist/api/PDFEmbeddedPage.d.ts +73 -0
- package/dist/api/PDFFont.d.ts +94 -0
- package/dist/api/PDFImage.d.ts +95 -0
- package/dist/api/PDFJavaScript.d.ts +38 -0
- package/dist/api/PDFPage.d.ts +910 -0
- package/dist/api/PDFPageOptions.d.ts +172 -0
- package/dist/api/StandardFonts.d.ts +16 -0
- package/dist/api/colors.d.ts +34 -0
- package/dist/api/errors.d.ts +42 -0
- package/dist/api/form/PDFButton.d.ts +137 -0
- package/dist/api/form/PDFCheckBox.d.ts +142 -0
- package/dist/api/form/PDFDropdown.d.ts +402 -0
- package/dist/api/form/PDFField.d.ts +203 -0
- package/dist/api/form/PDFForm.d.ts +411 -0
- package/dist/api/form/PDFOptionList.d.ts +335 -0
- package/dist/api/form/PDFRadioGroup.d.ts +252 -0
- package/dist/api/form/PDFSignature.d.ts +29 -0
- package/dist/api/form/PDFTextField.d.ts +537 -0
- package/dist/api/form/appearances.d.ts +41 -0
- package/dist/api/image/alignment.d.ts +5 -0
- package/dist/api/objects.d.ts +4 -0
- package/dist/api/operations.d.ts +226 -0
- package/dist/api/operators.d.ts +90 -0
- package/dist/api/rotations.d.ts +38 -0
- package/dist/api/sizes.d.ts +52 -0
- package/dist/api/svg.d.ts +70 -0
- package/dist/api/svgPath.d.ts +2 -0
- package/dist/api/text/alignment.d.ts +5 -0
- package/dist/api/text/layout.d.ts +54 -0
- package/dist/core/PDFContext.d.ts +84 -0
- package/dist/core/PDFObjectCopier.d.ts +37 -0
- package/dist/core/acroform/PDFAcroButton.d.ts +21 -0
- package/dist/core/acroform/PDFAcroCheckBox.d.ts +13 -0
- package/dist/core/acroform/PDFAcroChoice.d.ts +20 -0
- package/dist/core/acroform/PDFAcroComboBox.d.ts +9 -0
- package/dist/core/acroform/PDFAcroField.d.ts +36 -0
- package/dist/core/acroform/PDFAcroForm.d.ts +20 -0
- package/dist/core/acroform/PDFAcroListBox.d.ts +9 -0
- package/dist/core/acroform/PDFAcroNonTerminal.d.ts +13 -0
- package/dist/core/acroform/PDFAcroPushButton.d.ts +9 -0
- package/dist/core/acroform/PDFAcroRadioButton.d.ts +13 -0
- package/{src/core/acroform/PDFAcroSignature.ts → dist/core/acroform/PDFAcroSignature.d.ts} +2 -4
- package/dist/core/acroform/PDFAcroTerminal.d.ts +16 -0
- package/dist/core/acroform/PDFAcroText.d.ts +22 -0
- package/dist/core/acroform/flags.d.ts +141 -0
- package/dist/core/acroform/utils.d.ts +6 -0
- package/dist/core/annotation/AppearanceCharacteristics.d.ts +33 -0
- package/dist/core/annotation/BorderStyle.d.ts +11 -0
- package/dist/core/annotation/PDFAnnotation.d.ts +51 -0
- package/dist/core/annotation/PDFWidgetAnnotation.d.ts +26 -0
- package/dist/core/annotation/flags.d.ts +79 -0
- package/dist/core/crypto.d.ts +95 -0
- package/dist/core/document/PDFCrossRefSection.d.ts +27 -0
- package/dist/core/document/PDFHeader.d.ts +10 -0
- package/dist/core/document/PDFTrailer.d.ts +9 -0
- package/dist/core/document/PDFTrailerDict.d.ts +10 -0
- package/dist/core/embedders/CMap.d.ts +3 -0
- package/dist/core/embedders/CustomFontEmbedder.d.ts +44 -0
- package/dist/core/embedders/CustomFontSubsetEmbedder.d.ts +20 -0
- package/dist/core/embedders/FileEmbedder.d.ts +33 -0
- package/dist/core/embedders/FontFlags.d.ts +13 -0
- package/dist/core/embedders/JavaScriptEmbedder.d.ts +10 -0
- package/dist/core/embedders/JpegEmbedder.d.ts +23 -0
- package/dist/core/embedders/PDFPageEmbedder.d.ts +37 -0
- package/dist/core/embedders/PngEmbedder.d.ts +19 -0
- package/dist/core/embedders/StandardFontEmbedder.d.ts +36 -0
- package/dist/core/errors.d.ts +94 -0
- package/{src/core/index.ts → dist/core/index.d.ts} +1 -17
- package/dist/core/interactive/ViewerPreferences.d.ts +347 -0
- package/dist/core/objects/PDFArray.d.ts +63 -0
- package/dist/core/objects/PDFBool.d.ts +13 -0
- package/dist/core/objects/PDFDict.d.ts +62 -0
- package/dist/core/objects/PDFHexString.d.ts +16 -0
- package/dist/core/objects/PDFInvalidObject.d.ts +11 -0
- package/dist/core/objects/PDFName.d.ts +41 -0
- package/dist/core/objects/PDFNull.d.ts +10 -0
- package/dist/core/objects/PDFNumber.d.ts +15 -0
- package/dist/core/objects/PDFObject.d.ts +8 -0
- package/dist/core/objects/PDFRawStream.d.ts +16 -0
- package/dist/core/objects/PDFRef.d.ts +13 -0
- package/dist/core/objects/PDFStream.d.ts +16 -0
- package/dist/core/objects/PDFString.d.ts +16 -0
- package/dist/core/operators/PDFOperator.d.ts +19 -0
- package/dist/core/operators/PDFOperatorNames.d.ts +76 -0
- package/dist/core/parser/BaseParser.d.ts +14 -0
- package/dist/core/parser/ByteStream.d.ts +26 -0
- package/dist/core/parser/PDFObjectParser.d.ts +31 -0
- package/dist/core/parser/PDFObjectStreamParser.d.ts +13 -0
- package/dist/core/parser/PDFParser.d.ts +46 -0
- package/dist/core/parser/PDFXRefStreamParser.d.ts +21 -0
- package/dist/core/streams/Ascii85Stream.d.ts +9 -0
- package/dist/core/streams/AsciiHexStream.d.ts +9 -0
- package/dist/core/streams/DecodeStream.d.ts +26 -0
- package/dist/core/streams/DecryptStream.d.ts +12 -0
- package/dist/core/streams/FlateStream.d.ts +13 -0
- package/dist/core/streams/LZWStream.d.ts +12 -0
- package/dist/core/streams/RunLengthStream.d.ts +8 -0
- package/dist/core/streams/Stream.d.ts +34 -0
- package/dist/core/streams/decode.d.ts +3 -0
- package/dist/core/structures/PDFCatalog.d.ts +27 -0
- package/dist/core/structures/PDFContentStream.d.ts +15 -0
- package/dist/core/structures/PDFCrossRefStream.d.ts +53 -0
- package/dist/core/structures/PDFFlateStream.d.ts +13 -0
- package/dist/core/structures/PDFObjectStream.d.ts +20 -0
- package/dist/core/structures/PDFPageLeaf.d.ts +54 -0
- package/dist/core/structures/PDFPageTree.d.ts +41 -0
- package/dist/core/syntax/CharCodes.d.ts +61 -0
- package/dist/core/syntax/Delimiters.d.ts +1 -0
- package/dist/core/syntax/Irregular.d.ts +1 -0
- package/dist/core/syntax/Keywords.d.ts +22 -0
- package/dist/core/syntax/Numeric.d.ts +3 -0
- package/dist/core/syntax/Whitespace.d.ts +1 -0
- package/dist/core/writers/PDFStreamWriter.d.ts +19 -0
- package/dist/core/writers/PDFWriter.d.ts +29 -0
- package/dist/index.js +19124 -0
- package/dist/index.js.map +1 -0
- package/dist/types/fontkit.d.ts +597 -0
- package/{src/types/index.ts → dist/types/index.d.ts} +8 -13
- package/{src/types/matrix.ts → dist/types/matrix.d.ts} +1 -2
- package/dist/utils/Cache.d.ts +10 -0
- package/dist/utils/arrays.d.ts +16 -0
- package/dist/utils/async.d.ts +5 -0
- package/dist/utils/base64.d.ts +10 -0
- package/dist/utils/elements/Arc.d.ts +22 -0
- package/dist/utils/elements/Circle.d.ts +14 -0
- package/dist/utils/elements/Ellipse.d.ts +20 -0
- package/dist/utils/elements/GraphElement.d.ts +6 -0
- package/dist/utils/elements/Line.d.ts +23 -0
- package/dist/utils/elements/Plot.d.ts +11 -0
- package/dist/utils/elements/Point.d.ts +18 -0
- package/dist/utils/elements/Rectangle.d.ts +21 -0
- package/dist/utils/elements/Segment.d.ts +19 -0
- package/dist/utils/errors.d.ts +1 -0
- package/dist/utils/intersections.d.ts +9 -0
- package/dist/utils/maths.d.ts +45 -0
- package/dist/utils/numbers.d.ts +23 -0
- package/dist/utils/objects.d.ts +15 -0
- package/dist/utils/pdfDocEncoding.d.ts +7 -0
- package/dist/utils/png.d.ts +17 -0
- package/dist/utils/rng.d.ts +13 -0
- package/dist/utils/strings.d.ts +25 -0
- package/{src/utils/unicode.ts → dist/utils/unicode.d.ts} +8 -195
- package/dist/utils/validators.d.ts +26 -0
- package/package.json +6 -1
- package/__tests__/api/PDFDocument.spec.ts +0 -576
- package/__tests__/api/PDFImage.spec.ts +0 -60
- package/__tests__/api/PDFPage.spec.ts +0 -151
- package/__tests__/api/form/PDFCheckBox.spec.ts +0 -71
- package/__tests__/api/form/PDFDropdown.spec.ts +0 -118
- package/__tests__/api/form/PDFForm.spec.ts +0 -370
- package/__tests__/api/form/PDFOptionList.spec.ts +0 -104
- package/__tests__/api/form/PDFRadioGroup.spec.ts +0 -183
- package/__tests__/api/form/PDFTextField.spec.ts +0 -148
- package/__tests__/api/svgPath.spec.ts +0 -153
- package/__tests__/api/text/layout.spec.ts +0 -166
- package/__tests__/core/PDFContext.spec.ts +0 -194
- package/__tests__/core/PDFObjectCopier.spec.ts +0 -421
- package/__tests__/core/acroform/PDFAcroField.spec.ts +0 -98
- package/__tests__/core/acroform/PDFAcroTerminal.spec.ts +0 -39
- package/__tests__/core/annotation/PDFWidgetAnnotation.spec.ts +0 -40
- package/__tests__/core/document/PDFCrossRefSection.spec.ts +0 -88
- package/__tests__/core/document/PDFHeader.spec.ts +0 -22
- package/__tests__/core/document/PDFTrailer.spec.ts +0 -28
- package/__tests__/core/document/PDFTrailerDict.spec.ts +0 -24
- package/__tests__/core/embedders/CMap.spec.ts +0 -47
- package/__tests__/core/embedders/CustomFontEmbedder.spec.ts +0 -96
- package/__tests__/core/embedders/CustomFontSubsetEmbedder.spec.ts +0 -62
- package/__tests__/core/embedders/FileEmbedder.spec.ts +0 -54
- package/__tests__/core/embedders/JpegEmbedder.spec.ts +0 -67
- package/__tests__/core/embedders/PDFPageEmbedder.spec.ts +0 -65
- package/__tests__/core/embedders/PngEmbedder.spec.ts +0 -87
- package/__tests__/core/embedders/StandardFontEmbedder.spec.ts +0 -79
- package/__tests__/core/embedders/data/SourceHanSerifJP-Regular.otf.cmap +0 -16096
- package/__tests__/core/embedders/data/Ubuntu-R.ttf.cmap +0 -1211
- package/__tests__/core/objects/PDFArray.spec.ts +0 -134
- package/__tests__/core/objects/PDFBool.spec.ts +0 -42
- package/__tests__/core/objects/PDFDict.spec.ts +0 -195
- package/__tests__/core/objects/PDFHexString.spec.ts +0 -168
- package/__tests__/core/objects/PDFInvalidObject.spec.ts +0 -32
- package/__tests__/core/objects/PDFName.spec.ts +0 -122
- package/__tests__/core/objects/PDFNull.spec.ts +0 -30
- package/__tests__/core/objects/PDFNumber.spec.ts +0 -50
- package/__tests__/core/objects/PDFObject.spec.ts +0 -29
- package/__tests__/core/objects/PDFRawStream.spec.ts +0 -45
- package/__tests__/core/objects/PDFRef.spec.ts +0 -60
- package/__tests__/core/objects/PDFString.spec.ts +0 -237
- package/__tests__/core/operators/PDFOperator.spec.ts +0 -77
- package/__tests__/core/parser/PDFObjectParser.spec.ts +0 -730
- package/__tests__/core/parser/PDFObjectStreamParser.spec.ts +0 -158
- package/__tests__/core/parser/PDFParser.spec.ts +0 -398
- package/__tests__/core/parser/PDFXRefStreamParser.spec.ts +0 -187
- package/__tests__/core/parser/data/object-stream-invalid +0 -2
- package/__tests__/core/parser/data/object-stream1 +0 -16
- package/__tests__/core/parser/data/object-stream2 +0 -10
- package/__tests__/core/parser/data/object-stream3 +0 -0
- package/__tests__/core/parser/data/object-stream4 +0 -0
- package/__tests__/core/parser/data/xref-stream1 +0 -0
- package/__tests__/core/parser/data/xref-stream2 +0 -0
- package/__tests__/core/parser/data/xref-stream3 +0 -0
- package/__tests__/core/parser/data/xref-stream4 +0 -0
- package/__tests__/core/streams/Ascii85Stream.spec.ts +0 -20
- package/__tests__/core/streams/AsciiHexStream.spec.ts +0 -20
- package/__tests__/core/streams/FlateStream.spec.ts +0 -20
- package/__tests__/core/streams/LZWStream.spec.ts +0 -20
- package/__tests__/core/streams/RunLengthStream.spec.ts +0 -20
- package/__tests__/core/streams/Stream.spec.ts +0 -128
- package/__tests__/core/streams/data/ascii85/1.decoded +0 -0
- package/__tests__/core/streams/data/ascii85/1.encoded +0 -43
- package/__tests__/core/streams/data/asciihex/1.decoded +0 -1
- package/__tests__/core/streams/data/asciihex/1.encoded +0 -1
- package/__tests__/core/streams/data/asciihex/2.decoded +0 -7
- package/__tests__/core/streams/data/asciihex/2.encoded +0 -1
- package/__tests__/core/streams/data/flate/1.corrupt.encoded +0 -1
- package/__tests__/core/streams/data/flate/1.decoded +0 -0
- package/__tests__/core/streams/data/flate/1.encoded +0 -2
- package/__tests__/core/streams/data/flate/2.decoded +0 -33
- package/__tests__/core/streams/data/flate/2.encoded +0 -0
- package/__tests__/core/streams/data/flate/3.decoded +0 -15
- package/__tests__/core/streams/data/flate/3.encoded +0 -0
- package/__tests__/core/streams/data/flate/4.decoded +0 -16
- package/__tests__/core/streams/data/flate/4.encoded +0 -0
- package/__tests__/core/streams/data/flate/5.decoded +0 -0
- package/__tests__/core/streams/data/flate/5.encoded +0 -0
- package/__tests__/core/streams/data/flate/6.decoded +0 -17
- package/__tests__/core/streams/data/flate/6.encoded +0 -0
- package/__tests__/core/streams/data/flate/7.decoded +0 -20
- package/__tests__/core/streams/data/flate/7.encoded +0 -1
- package/__tests__/core/streams/data/lzw/1.decoded +0 -0
- package/__tests__/core/streams/data/lzw/1.encoded +0 -0
- package/__tests__/core/streams/data/lzw/2.decoded +0 -0
- package/__tests__/core/streams/data/lzw/2.encoded +0 -0
- package/__tests__/core/streams/data/lzw/3.decoded +0 -14
- package/__tests__/core/streams/data/lzw/3.encoded +0 -2
- package/__tests__/core/streams/data/lzw/4.decoded +0 -14
- package/__tests__/core/streams/data/lzw/4.encoded +0 -2
- package/__tests__/core/streams/data/runlength/1.decoded +0 -1
- package/__tests__/core/streams/data/runlength/1.encoded +0 -1
- package/__tests__/core/streams/data/runlength/2.decoded +0 -1
- package/__tests__/core/streams/data/runlength/2.encoded +0 -1
- package/__tests__/core/streams/data/runlength/3.decoded +0 -0
- package/__tests__/core/streams/data/runlength/3.encoded +0 -0
- package/__tests__/core/streams/data/runlength/4.decoded +0 -1
- package/__tests__/core/streams/data/runlength/4.encoded +0 -1
- package/__tests__/core/streams/data/runlength/5.decoded +0 -1
- package/__tests__/core/streams/data/runlength/5.encoded +0 -1
- package/__tests__/core/streams/data/runlength/empty.encoded +0 -1
- package/__tests__/core/structures/PDFCatalog.spec.ts +0 -108
- package/__tests__/core/structures/PDFContentStream.spec.ts +0 -117
- package/__tests__/core/structures/PDFCrossRefStream.spec.ts +0 -145
- package/__tests__/core/structures/PDFObjectStream.spec.ts +0 -138
- package/__tests__/core/structures/PDFPageLeaf.spec.ts +0 -355
- package/__tests__/core/structures/PDFPageTree.spec.ts +0 -592
- package/__tests__/core/writers/PDFStreamWriter.spec.ts +0 -71
- package/__tests__/core/writers/PDFWriter.spec.ts +0 -144
- package/__tests__/core/writers/data/stream-writer-1.pdf +0 -0
- package/__tests__/index.test.ts +0 -12
- package/__tests__/utils/base64.spec.ts +0 -61
- package/__tests__/utils/data/simple.pdf +0 -201
- package/__tests__/utils/data/simple.pdf.base64 +0 -1
- package/__tests__/utils/pdfDocEncoding.spec.ts +0 -82
- package/__tests__/utils/png.spec.ts +0 -53
- package/__tests__/utils/rng.spec.ts +0 -14
- package/__tests__/utils/strings.spec.ts +0 -98
- package/__tests__/utils/unicode.spec.ts +0 -337
- package/assets/fonts/source_hans_jp/SourceHanSerifJP-Regular.otf +0 -0
- package/assets/fonts/ubuntu/Ubuntu-B.ttf +0 -0
- package/assets/fonts/ubuntu/Ubuntu-R.ttf +0 -0
- package/assets/images/cat_riding_unicorn.jpg +0 -0
- package/assets/images/cmyk_colorspace.jpg +0 -0
- package/assets/images/greyscale_bird.png +0 -0
- package/assets/images/minions_banana_alpha.png +0 -0
- package/assets/images/minions_banana_no_alpha.png +0 -0
- package/assets/images/minions_laughing.jpg +0 -0
- package/assets/pdfs/bixby_guide.pdf +0 -0
- package/assets/pdfs/encrypted_new.pdf +0 -0
- package/assets/pdfs/encrypted_old.pdf +0 -0
- package/assets/pdfs/fancy_fields.pdf +0 -0
- package/assets/pdfs/giraffe.pdf +0 -0
- package/assets/pdfs/invalid_root_ref.pdf +0 -0
- package/assets/pdfs/just_metadata.pdf +0 -49
- package/assets/pdfs/missing_endobj_keyword.pdf +0 -70
- package/assets/pdfs/missing_xref_trailer_dict.pdf +0 -141
- package/assets/pdfs/normal.pdf +0 -0
- package/assets/pdfs/pdf20examples/PDF 2.0 with offset start.pdf +0 -179
- package/assets/pdfs/stuff_following_header.pdf +0 -0
- package/assets/pdfs/us_constitution.pdf +0 -0
- package/assets/pdfs/with_comments.pdf +0 -0
- package/assets/pdfs/with_invalid_objects.pdf +0 -53
- package/assets/pdfs/with_invalid_stream_EOL.pdf +0 -0
- package/assets/pdfs/with_null_parent_entry.pdf +0 -0
- package/assets/pdfs/with_signature.pdf +0 -0
- package/assets/pdfs/with_update_sections.pdf +0 -0
- package/assets/pdfs/with_viewer_prefs.pdf +0 -0
- package/assets/pdfs/with_xfa_fields.pdf +0 -0
- package/src/api/PDFDocument.ts +0 -1389
- package/src/api/PDFDocumentOptions.ts +0 -45
- package/src/api/PDFEmbeddedFile.ts +0 -87
- package/src/api/PDFEmbeddedPage.ts +0 -100
- package/src/api/PDFFont.ts +0 -149
- package/src/api/PDFImage.ts +0 -143
- package/src/api/PDFJavaScript.ts +0 -75
- package/src/api/PDFPage.ts +0 -1604
- package/src/api/PDFPageOptions.ts +0 -175
- package/src/api/StandardFonts.ts +0 -16
- package/src/api/colors.ts +0 -109
- package/src/api/errors.ts +0 -110
- package/src/api/form/PDFButton.ts +0 -242
- package/src/api/form/PDFCheckBox.ts +0 -247
- package/src/api/form/PDFDropdown.ts +0 -637
- package/src/api/form/PDFField.ts +0 -491
- package/src/api/form/PDFForm.ts +0 -842
- package/src/api/form/PDFOptionList.ts +0 -555
- package/src/api/form/PDFRadioGroup.ts +0 -455
- package/src/api/form/PDFSignature.ts +0 -44
- package/src/api/form/PDFTextField.ts +0 -811
- package/src/api/form/appearances.ts +0 -655
- package/src/api/image/alignment.ts +0 -5
- package/src/api/objects.ts +0 -10
- package/src/api/operations.ts +0 -873
- package/src/api/operators.ts +0 -335
- package/src/api/rotations.ts +0 -84
- package/src/api/sizes.ts +0 -52
- package/src/api/svg.ts +0 -888
- package/src/api/svgPath.ts +0 -460
- package/src/api/text/alignment.ts +0 -5
- package/src/api/text/layout.ts +0 -328
- package/src/core/PDFContext.ts +0 -274
- package/src/core/PDFObjectCopier.ts +0 -142
- package/src/core/acroform/PDFAcroButton.ts +0 -104
- package/src/core/acroform/PDFAcroCheckBox.ts +0 -48
- package/src/core/acroform/PDFAcroChoice.ts +0 -143
- package/src/core/acroform/PDFAcroComboBox.ts +0 -21
- package/src/core/acroform/PDFAcroField.ts +0 -168
- package/src/core/acroform/PDFAcroForm.ts +0 -96
- package/src/core/acroform/PDFAcroListBox.ts +0 -19
- package/src/core/acroform/PDFAcroNonTerminal.ts +0 -33
- package/src/core/acroform/PDFAcroPushButton.ts +0 -21
- package/src/core/acroform/PDFAcroRadioButton.ts +0 -57
- package/src/core/acroform/PDFAcroTerminal.ts +0 -70
- package/src/core/acroform/PDFAcroText.ts +0 -76
- package/src/core/acroform/flags.ts +0 -162
- package/src/core/acroform/utils.ts +0 -129
- package/src/core/annotation/AppearanceCharacteristics.ts +0 -133
- package/src/core/annotation/BorderStyle.ts +0 -31
- package/src/core/annotation/PDFAnnotation.ts +0 -148
- package/src/core/annotation/PDFWidgetAnnotation.ts +0 -111
- package/src/core/annotation/flags.ts +0 -90
- package/src/core/crypto.ts +0 -1844
- package/src/core/document/PDFCrossRefSection.ts +0 -161
- package/src/core/document/PDFHeader.ts +0 -48
- package/src/core/document/PDFTrailer.ts +0 -48
- package/src/core/document/PDFTrailerDict.ts +0 -39
- package/src/core/embedders/CMap.ts +0 -65
- package/src/core/embedders/CustomFontEmbedder.ts +0 -237
- package/src/core/embedders/CustomFontSubsetEmbedder.ts +0 -89
- package/src/core/embedders/FileEmbedder.ts +0 -77
- package/src/core/embedders/FontFlags.ts +0 -45
- package/src/core/embedders/JavaScriptEmbedder.ts +0 -34
- package/src/core/embedders/JpegEmbedder.ts +0 -118
- package/src/core/embedders/PDFPageEmbedder.ts +0 -139
- package/src/core/embedders/PngEmbedder.ts +0 -69
- package/src/core/embedders/StandardFontEmbedder.ts +0 -121
- package/src/core/errors.ts +0 -226
- package/src/core/interactive/ViewerPreferences.ts +0 -565
- package/src/core/objects/PDFArray.ts +0 -179
- package/src/core/objects/PDFBool.ts +0 -53
- package/src/core/objects/PDFDict.ts +0 -220
- package/src/core/objects/PDFHexString.ts +0 -94
- package/src/core/objects/PDFInvalidObject.ts +0 -34
- package/src/core/objects/PDFName.ts +0 -152
- package/src/core/objects/PDFNull.ts +0 -30
- package/src/core/objects/PDFNumber.ts +0 -44
- package/src/core/objects/PDFObject.ts +0 -22
- package/src/core/objects/PDFRawStream.ts +0 -41
- package/src/core/objects/PDFRef.ts +0 -51
- package/src/core/objects/PDFStream.ts +0 -87
- package/src/core/objects/PDFString.ts +0 -118
- package/src/core/operators/PDFOperator.ts +0 -72
- package/src/core/operators/PDFOperatorNames.ts +0 -92
- package/src/core/parser/BaseParser.ts +0 -119
- package/src/core/parser/ByteStream.ts +0 -76
- package/src/core/parser/PDFObjectParser.ts +0 -302
- package/src/core/parser/PDFObjectStreamParser.ts +0 -65
- package/src/core/parser/PDFParser.ts +0 -363
- package/src/core/parser/PDFXRefStreamParser.ts +0 -129
- package/src/core/streams/Ascii85Stream.ts +0 -97
- package/src/core/streams/AsciiHexStream.ts +0 -77
- package/src/core/streams/DecodeStream.ts +0 -188
- package/src/core/streams/DecryptStream.ts +0 -49
- package/src/core/streams/FlateStream.ts +0 -397
- package/src/core/streams/LZWStream.ts +0 -157
- package/src/core/streams/RunLengthStream.ts +0 -55
- package/src/core/streams/Stream.ts +0 -126
- package/src/core/streams/decode.ts +0 -70
- package/src/core/structures/PDFCatalog.ts +0 -81
- package/src/core/structures/PDFContentStream.ts +0 -58
- package/src/core/structures/PDFCrossRefStream.ts +0 -238
- package/src/core/structures/PDFFlateStream.ts +0 -40
- package/src/core/structures/PDFObjectStream.ts +0 -91
- package/src/core/structures/PDFPageLeaf.ts +0 -244
- package/src/core/structures/PDFPageTree.ts +0 -192
- package/src/core/syntax/CharCodes.ts +0 -62
- package/src/core/syntax/Delimiters.ts +0 -14
- package/src/core/syntax/Irregular.ts +0 -10
- package/src/core/syntax/Keywords.ts +0 -57
- package/src/core/syntax/Numeric.ts +0 -26
- package/src/core/syntax/Whitespace.ts +0 -10
- package/src/core/writers/PDFStreamWriter.ts +0 -114
- package/src/core/writers/PDFWriter.ts +0 -146
- package/src/types/fontkit.ts +0 -643
- package/src/utils/Cache.ts +0 -26
- package/src/utils/arrays.ts +0 -153
- package/src/utils/async.ts +0 -8
- package/src/utils/base64.ts +0 -98
- package/src/utils/elements/Arc.ts +0 -97
- package/src/utils/elements/Circle.ts +0 -47
- package/src/utils/elements/Ellipse.ts +0 -117
- package/src/utils/elements/GraphElement.ts +0 -14
- package/src/utils/elements/Line.ts +0 -83
- package/src/utils/elements/Plot.ts +0 -50
- package/src/utils/elements/Point.ts +0 -37
- package/src/utils/elements/Rectangle.ts +0 -65
- package/src/utils/elements/Segment.ts +0 -81
- package/src/utils/errors.ts +0 -3
- package/src/utils/intersections.ts +0 -237
- package/src/utils/maths.ts +0 -96
- package/src/utils/numbers.ts +0 -55
- package/src/utils/objects.ts +0 -13
- package/src/utils/pdfDocEncoding.ts +0 -69
- package/src/utils/png.ts +0 -100
- package/src/utils/rng.ts +0 -21
- package/src/utils/strings.ts +0 -191
- package/src/utils/validators.ts +0 -192
- package/tsconfig.build.json +0 -14
- package/tsconfig.json +0 -15
- package/vite.config.mts +0 -39
- /package/{src/api/form/index.ts → dist/api/form/index.d.ts} +0 -0
- /package/{src/api/image/index.ts → dist/api/image/index.d.ts} +0 -0
- /package/{src/api/index.ts → dist/api/index.d.ts} +0 -0
- /package/{src/api/text/index.ts → dist/api/text/index.d.ts} +0 -0
- /package/{src/core/acroform/index.ts → dist/core/acroform/index.d.ts} +0 -0
- /package/{src/core/annotation/index.ts → dist/core/annotation/index.d.ts} +0 -0
- /package/{src/index.ts → dist/index.d.ts} +0 -0
- /package/{src/utils/elements/index.ts → dist/utils/elements/index.d.ts} +0 -0
- /package/{src/utils/index.ts → dist/utils/index.d.ts} +0 -0
|
@@ -1,576 +0,0 @@
|
|
|
1
|
-
import fontkit from '@pdf-lib/fontkit';
|
|
2
|
-
import fs from 'fs';
|
|
3
|
-
import {
|
|
4
|
-
EncryptedPDFError,
|
|
5
|
-
ParseSpeeds,
|
|
6
|
-
PDFArray,
|
|
7
|
-
PDFDict,
|
|
8
|
-
PDFDocument,
|
|
9
|
-
PDFHexString,
|
|
10
|
-
PDFName,
|
|
11
|
-
PDFPage,
|
|
12
|
-
Duplex,
|
|
13
|
-
NonFullScreenPageMode,
|
|
14
|
-
PrintScaling,
|
|
15
|
-
ReadingDirection,
|
|
16
|
-
ViewerPreferences,
|
|
17
|
-
} from '../../src/index';
|
|
18
|
-
|
|
19
|
-
const examplePngImage =
|
|
20
|
-
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABhGlDQ1BJQ0MgcHJvZmlsZQAAKJF9kT1Iw0AcxV9TxaoVBzuIdMhQnSyIijhKFYtgobQVWnUwufQLmjQkKS6OgmvBwY/FqoOLs64OroIg+AHi5uak6CIl/i8ptIjx4Lgf7+497t4BQqPCVLNrAlA1y0jFY2I2tyr2vKIfAgLoRVhipp5IL2bgOb7u4ePrXZRneZ/7cwwoeZMBPpF4jumGRbxBPLNp6Zz3iUOsJCnE58TjBl2Q+JHrsstvnIsOCzwzZGRS88QhYrHYwXIHs5KhEk8TRxRVo3wh67LCeYuzWqmx1j35C4N5bSXNdZphxLGEBJIQIaOGMiqwEKVVI8VEivZjHv4Rx58kl0yuMhg5FlCFCsnxg//B727NwtSkmxSMAd0vtv0xCvTsAs26bX8f23bzBPA/A1da219tALOfpNfbWuQIGNwGLq7bmrwHXO4Aw0+6ZEiO5KcpFArA+xl9Uw4YugX61tzeWvs4fQAy1NXyDXBwCIwVKXvd492Bzt7+PdPq7wcdn3KFLu4iBAAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAlFJREFUeNrt289r02AYB/Dvk6Sl4EDKpllTlFKsnUdBHXgUBEHwqHj2IJ72B0zwKHhxJ08i/gDxX/AiRfSkBxELXTcVxTa2s2xTsHNN8ngQbQL70RZqG/Z9b29JnvflkydP37whghG3ZaegoxzfwB5vBCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgwB5rstWPtnP0LqBX/vZNyLF6vVrpN/hucewhb4g+B2AyAwiwY7NGOXijviS9vBeYh6CEP4edBLDADCAAAQhAAAIQgAAEIAABCDAUAFF/GIN1DM+PBYCo/ohMXDQ1WPjoeUZH1mMBEEh0oqLGvsHCy0S4NzWVWotJBogbvZB+brDwQT7UWSmXy5sxyQB9HQEROdVv4HQ+vx+QmS4iXsWmCK7Usu8AhOqAXMzlcn3VgWTbugQgEYrxMkZ/gyUPgnuhe2C6/Stxvdeg2ezMJERvhOuoZ+JBrNYBRuDdBtDuXkDM25nCHLbZSv9X6A4VHU+DpwCcbvbjcetLtTaOANtuirrux08HM0euisjDEMKC7RQuq+C+pVJqpzx3NZ3+eeBza9I0rWJgyHnxg2sAJrqnaHUzFcyN60Jox13hprv8aNopZBS4GcqWWVHM+lAkN0zY7ncgkYBukRoKLPpiXVj9UFkfV4Bdl8Jf60u3IMZZAG/6iLuhkDvaSZ74VqtUx3kp3NN7gUZt8RmA43a2eEY1OCfQ04AcBpAGkAKwpkBLIG8BfQE/eNJsvG/G4VlARj0BfjDBx2ECEIAABCAAAQhAAAIQgAAE+P/tN8YvpvbTDBOlAAAAAElFTkSuQmCC';
|
|
21
|
-
|
|
22
|
-
const unencryptedPdfBytes = fs.readFileSync('assets/pdfs/normal.pdf');
|
|
23
|
-
const oldEncryptedPdfBytes1 = fs.readFileSync('assets/pdfs/encrypted_old.pdf');
|
|
24
|
-
|
|
25
|
-
// Had to remove this file due to DMCA complaint, so commented this line out
|
|
26
|
-
// along with the 2 tests that depend on it. Would be nice to find a new file
|
|
27
|
-
// that we could drop in here, but the tests are for non-critical functionality,
|
|
28
|
-
// so this solution is okay for now.
|
|
29
|
-
// const oldEncryptedPdfBytes2 = fs.readFileSync('pdf_specification.pdf');
|
|
30
|
-
|
|
31
|
-
const newEncryptedPdfBytes = fs.readFileSync('assets/pdfs/encrypted_new.pdf');
|
|
32
|
-
const invalidObjectsPdfBytes = fs.readFileSync(
|
|
33
|
-
'assets/pdfs/with_invalid_objects.pdf',
|
|
34
|
-
);
|
|
35
|
-
const justMetadataPdfbytes = fs.readFileSync('assets/pdfs/just_metadata.pdf');
|
|
36
|
-
const normalPdfBytes = fs.readFileSync('assets/pdfs/normal.pdf');
|
|
37
|
-
const withViewerPrefsPdfBytes = fs.readFileSync(
|
|
38
|
-
'assets/pdfs/with_viewer_prefs.pdf',
|
|
39
|
-
);
|
|
40
|
-
|
|
41
|
-
describe(`PDFDocument`, () => {
|
|
42
|
-
describe(`load() method`, () => {
|
|
43
|
-
const origConsoleWarn = console.warn;
|
|
44
|
-
|
|
45
|
-
beforeAll(() => {
|
|
46
|
-
const ignoredWarnings = [
|
|
47
|
-
'Trying to parse invalid object:',
|
|
48
|
-
'Invalid object ref:',
|
|
49
|
-
];
|
|
50
|
-
console.warn = vi.fn((...args) => {
|
|
51
|
-
const isIgnored = ignoredWarnings.find((iw) => args[0].includes(iw));
|
|
52
|
-
if (!isIgnored) origConsoleWarn(...args);
|
|
53
|
-
});
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
beforeEach(() => {
|
|
57
|
-
vi.clearAllMocks();
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
afterAll(() => {
|
|
61
|
-
console.warn = origConsoleWarn;
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
it(`does not throw an error for unencrypted PDFs`, async () => {
|
|
65
|
-
const pdfDoc = await PDFDocument.load(unencryptedPdfBytes, {
|
|
66
|
-
parseSpeed: ParseSpeeds.Fastest,
|
|
67
|
-
});
|
|
68
|
-
expect(pdfDoc).toBeInstanceOf(PDFDocument);
|
|
69
|
-
expect(pdfDoc.isEncrypted).toBe(false);
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
it(`throws an error for old encrypted PDFs (1)`, async () => {
|
|
73
|
-
await expect(
|
|
74
|
-
PDFDocument.load(oldEncryptedPdfBytes1, {
|
|
75
|
-
parseSpeed: ParseSpeeds.Fastest,
|
|
76
|
-
}),
|
|
77
|
-
).rejects.toThrow(new EncryptedPDFError());
|
|
78
|
-
});
|
|
79
|
-
|
|
80
|
-
// it(`throws an error for old encrypted PDFs (2)`, async () => {
|
|
81
|
-
// await expect(
|
|
82
|
-
// PDFDocument.load(oldEncryptedPdfBytes2, {
|
|
83
|
-
// parseSpeed: ParseSpeeds.Fastest,
|
|
84
|
-
// }),
|
|
85
|
-
// ).rejects.toThrow(new EncryptedPDFError());
|
|
86
|
-
// });
|
|
87
|
-
|
|
88
|
-
it(`throws an error for new encrypted PDFs`, async () => {
|
|
89
|
-
await expect(
|
|
90
|
-
PDFDocument.load(newEncryptedPdfBytes, {
|
|
91
|
-
parseSpeed: ParseSpeeds.Fastest,
|
|
92
|
-
}),
|
|
93
|
-
).rejects.toThrow(new EncryptedPDFError());
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
it(`does not throw an error for old encrypted PDFs when ignoreEncryption=true (1)`, async () => {
|
|
97
|
-
const pdfDoc = await PDFDocument.load(oldEncryptedPdfBytes1, {
|
|
98
|
-
ignoreEncryption: true,
|
|
99
|
-
parseSpeed: ParseSpeeds.Fastest,
|
|
100
|
-
});
|
|
101
|
-
expect(pdfDoc).toBeInstanceOf(PDFDocument);
|
|
102
|
-
expect(pdfDoc.isEncrypted).toBe(true);
|
|
103
|
-
});
|
|
104
|
-
|
|
105
|
-
// it(`does not throw an error for old encrypted PDFs when ignoreEncryption=true (2)`, async () => {
|
|
106
|
-
// const pdfDoc = await PDFDocument.load(oldEncryptedPdfBytes2, {
|
|
107
|
-
// ignoreEncryption: true,
|
|
108
|
-
// parseSpeed: ParseSpeeds.Fastest,
|
|
109
|
-
// });
|
|
110
|
-
// expect(pdfDoc).toBeInstanceOf(PDFDocument);
|
|
111
|
-
// expect(pdfDoc.isEncrypted).toBe(true);
|
|
112
|
-
// });
|
|
113
|
-
|
|
114
|
-
it(`does not throw an error for new encrypted PDFs when ignoreEncryption=true`, async () => {
|
|
115
|
-
const pdfDoc = await PDFDocument.load(newEncryptedPdfBytes, {
|
|
116
|
-
ignoreEncryption: true,
|
|
117
|
-
parseSpeed: ParseSpeeds.Fastest,
|
|
118
|
-
});
|
|
119
|
-
expect(pdfDoc).toBeInstanceOf(PDFDocument);
|
|
120
|
-
expect(pdfDoc.isEncrypted).toBe(true);
|
|
121
|
-
});
|
|
122
|
-
|
|
123
|
-
it(`does not throw an error for invalid PDFs when throwOnInvalidObject=false`, async () => {
|
|
124
|
-
await expect(
|
|
125
|
-
PDFDocument.load(invalidObjectsPdfBytes, {
|
|
126
|
-
ignoreEncryption: true,
|
|
127
|
-
parseSpeed: ParseSpeeds.Fastest,
|
|
128
|
-
throwOnInvalidObject: false,
|
|
129
|
-
}),
|
|
130
|
-
).resolves.toBeInstanceOf(PDFDocument);
|
|
131
|
-
});
|
|
132
|
-
|
|
133
|
-
it(`throws an error for invalid PDFs when throwOnInvalidObject=true`, async () => {
|
|
134
|
-
const expectedError = new Error(
|
|
135
|
-
'Trying to parse invalid object: {"line":20,"column":13,"offset":126})',
|
|
136
|
-
);
|
|
137
|
-
await expect(
|
|
138
|
-
PDFDocument.load(invalidObjectsPdfBytes, {
|
|
139
|
-
ignoreEncryption: true,
|
|
140
|
-
parseSpeed: ParseSpeeds.Fastest,
|
|
141
|
-
throwOnInvalidObject: true,
|
|
142
|
-
}),
|
|
143
|
-
).rejects.toEqual(expectedError);
|
|
144
|
-
});
|
|
145
|
-
});
|
|
146
|
-
|
|
147
|
-
describe(`embedFont() method`, () => {
|
|
148
|
-
it(`serializes the same value on every save`, async () => {
|
|
149
|
-
const customFont = fs.readFileSync('assets/fonts/ubuntu/Ubuntu-B.ttf');
|
|
150
|
-
const pdfDoc1 = await PDFDocument.create({ updateMetadata: false });
|
|
151
|
-
const pdfDoc2 = await PDFDocument.create({ updateMetadata: false });
|
|
152
|
-
|
|
153
|
-
pdfDoc1.registerFontkit(fontkit);
|
|
154
|
-
pdfDoc2.registerFontkit(fontkit);
|
|
155
|
-
|
|
156
|
-
await pdfDoc1.embedFont(customFont);
|
|
157
|
-
await pdfDoc2.embedFont(customFont);
|
|
158
|
-
|
|
159
|
-
const savedDoc1 = await pdfDoc1.save();
|
|
160
|
-
const savedDoc2 = await pdfDoc2.save();
|
|
161
|
-
|
|
162
|
-
expect(savedDoc1).toEqual(savedDoc2);
|
|
163
|
-
});
|
|
164
|
-
});
|
|
165
|
-
|
|
166
|
-
describe(`setLanguage() method`, () => {
|
|
167
|
-
it(`sets the language of the document`, async () => {
|
|
168
|
-
const pdfDoc = await PDFDocument.create();
|
|
169
|
-
expect(pdfDoc.catalog.get(PDFName.of('Lang'))).toBeUndefined();
|
|
170
|
-
|
|
171
|
-
pdfDoc.setLanguage('fr-FR');
|
|
172
|
-
expect(String(pdfDoc.catalog.get(PDFName.of('Lang')))).toBe('(fr-FR)');
|
|
173
|
-
|
|
174
|
-
pdfDoc.setLanguage('en');
|
|
175
|
-
expect(String(pdfDoc.catalog.get(PDFName.of('Lang')))).toBe('(en)');
|
|
176
|
-
|
|
177
|
-
pdfDoc.setLanguage('');
|
|
178
|
-
expect(String(pdfDoc.catalog.get(PDFName.of('Lang')))).toBe('()');
|
|
179
|
-
});
|
|
180
|
-
});
|
|
181
|
-
|
|
182
|
-
describe(`getPageCount() method`, () => {
|
|
183
|
-
let pdfDoc: PDFDocument;
|
|
184
|
-
beforeAll(async () => {
|
|
185
|
-
const parseSpeed = ParseSpeeds.Fastest;
|
|
186
|
-
pdfDoc = await PDFDocument.load(unencryptedPdfBytes, { parseSpeed });
|
|
187
|
-
});
|
|
188
|
-
|
|
189
|
-
it(`returns the initial page count of the document`, () => {
|
|
190
|
-
expect(pdfDoc.getPageCount()).toBe(2);
|
|
191
|
-
});
|
|
192
|
-
|
|
193
|
-
it(`returns the updated page count after adding pages`, () => {
|
|
194
|
-
pdfDoc.addPage();
|
|
195
|
-
pdfDoc.addPage();
|
|
196
|
-
expect(pdfDoc.getPageCount()).toBe(4);
|
|
197
|
-
});
|
|
198
|
-
|
|
199
|
-
it(`returns the updated page count after inserting pages`, () => {
|
|
200
|
-
pdfDoc.insertPage(0);
|
|
201
|
-
pdfDoc.insertPage(4);
|
|
202
|
-
expect(pdfDoc.getPageCount()).toBe(6);
|
|
203
|
-
});
|
|
204
|
-
|
|
205
|
-
it(`returns the updated page count after removing pages`, () => {
|
|
206
|
-
pdfDoc.removePage(5);
|
|
207
|
-
pdfDoc.removePage(0);
|
|
208
|
-
expect(pdfDoc.getPageCount()).toBe(4);
|
|
209
|
-
});
|
|
210
|
-
|
|
211
|
-
it(`returns 0 for brand new documents`, async () => {
|
|
212
|
-
const newDoc = await PDFDocument.create();
|
|
213
|
-
expect(newDoc.getPageCount()).toBe(0);
|
|
214
|
-
});
|
|
215
|
-
});
|
|
216
|
-
|
|
217
|
-
describe(`addPage() method`, () => {
|
|
218
|
-
it(`Can insert pages in brand new documents`, async () => {
|
|
219
|
-
const pdfDoc = await PDFDocument.create();
|
|
220
|
-
expect(pdfDoc.addPage()).toBeInstanceOf(PDFPage);
|
|
221
|
-
});
|
|
222
|
-
});
|
|
223
|
-
|
|
224
|
-
describe(`metadata getter methods`, () => {
|
|
225
|
-
it(`they can retrieve the title, author, subject, producer, creator, keywords, creation date, and modification date from a new document`, async () => {
|
|
226
|
-
const pdfDoc = await PDFDocument.create();
|
|
227
|
-
|
|
228
|
-
// Everything is empty or has its initial value.
|
|
229
|
-
expect(pdfDoc.getTitle()).toBeUndefined();
|
|
230
|
-
expect(pdfDoc.getAuthor()).toBeUndefined();
|
|
231
|
-
expect(pdfDoc.getSubject()).toBeUndefined();
|
|
232
|
-
expect(pdfDoc.getProducer()).toBe(
|
|
233
|
-
'pdf-lib (https://github.com/Hopding/pdf-lib)',
|
|
234
|
-
);
|
|
235
|
-
expect(pdfDoc.getCreator()).toBe(
|
|
236
|
-
'pdf-lib (https://github.com/Hopding/pdf-lib)',
|
|
237
|
-
);
|
|
238
|
-
expect(pdfDoc.getKeywords()).toBeUndefined();
|
|
239
|
-
// Dates can not be tested since they have the current time as value.
|
|
240
|
-
|
|
241
|
-
const title = '🥚 The Life of an Egg 🍳';
|
|
242
|
-
const author = 'Humpty Dumpty';
|
|
243
|
-
const subject = '📘 An Epic Tale of Woe 📖';
|
|
244
|
-
const keywords = ['eggs', 'wall', 'fall', 'king', 'horses', 'men', '🥚'];
|
|
245
|
-
const producer = 'PDF App 9000 🤖';
|
|
246
|
-
const creator = 'PDF App 8000 🤖';
|
|
247
|
-
|
|
248
|
-
// Milliseconds will not get saved, so these dates do not have milliseconds.
|
|
249
|
-
const creationDate = new Date('1997-08-15T01:58:37Z');
|
|
250
|
-
const modificationDate = new Date('2018-12-21T07:00:11Z');
|
|
251
|
-
|
|
252
|
-
pdfDoc.setTitle(title);
|
|
253
|
-
pdfDoc.setAuthor(author);
|
|
254
|
-
pdfDoc.setSubject(subject);
|
|
255
|
-
pdfDoc.setKeywords(keywords);
|
|
256
|
-
pdfDoc.setProducer(producer);
|
|
257
|
-
pdfDoc.setCreator(creator);
|
|
258
|
-
pdfDoc.setCreationDate(creationDate);
|
|
259
|
-
pdfDoc.setModificationDate(modificationDate);
|
|
260
|
-
|
|
261
|
-
expect(pdfDoc.getTitle()).toBe(title);
|
|
262
|
-
expect(pdfDoc.getAuthor()).toBe(author);
|
|
263
|
-
expect(pdfDoc.getSubject()).toBe(subject);
|
|
264
|
-
expect(pdfDoc.getProducer()).toBe(producer);
|
|
265
|
-
expect(pdfDoc.getCreator()).toBe(creator);
|
|
266
|
-
expect(pdfDoc.getKeywords()).toBe(keywords.join(' '));
|
|
267
|
-
expect(pdfDoc.getCreationDate()).toStrictEqual(creationDate);
|
|
268
|
-
expect(pdfDoc.getModificationDate()).toStrictEqual(modificationDate);
|
|
269
|
-
});
|
|
270
|
-
|
|
271
|
-
it(`they can retrieve the title, author, subject, producer, creator, and keywords from an existing document`, async () => {
|
|
272
|
-
const pdfDoc = await PDFDocument.load(justMetadataPdfbytes);
|
|
273
|
-
|
|
274
|
-
expect(pdfDoc.getTitle()).toBe(
|
|
275
|
-
'Title metadata (StringType=HexString, Encoding=PDFDocEncoding) with some weird chars ˘•€',
|
|
276
|
-
);
|
|
277
|
-
expect(pdfDoc.getAuthor()).toBe(
|
|
278
|
-
'Author metadata (StringType=HexString, Encoding=UTF-16BE) with some chinese 你怎么敢',
|
|
279
|
-
);
|
|
280
|
-
expect(pdfDoc.getSubject()).toBe(
|
|
281
|
-
'Subject metadata (StringType=LiteralString, Encoding=UTF-16BE) with some chinese 你怎么敢',
|
|
282
|
-
);
|
|
283
|
-
expect(pdfDoc.getProducer()).toBe(
|
|
284
|
-
'pdf-lib (https://github.com/Hopding/pdf-lib)',
|
|
285
|
-
);
|
|
286
|
-
expect(pdfDoc.getKeywords()).toBe(
|
|
287
|
-
'Keywords metadata (StringType=LiteralString, Encoding=PDFDocEncoding) with some weird chars ˘•€',
|
|
288
|
-
);
|
|
289
|
-
});
|
|
290
|
-
|
|
291
|
-
it(`they can retrieve the creation date and modification date from an existing document`, async () => {
|
|
292
|
-
const pdfDoc = await PDFDocument.load(normalPdfBytes, {
|
|
293
|
-
updateMetadata: false,
|
|
294
|
-
});
|
|
295
|
-
|
|
296
|
-
expect(pdfDoc.getCreationDate()).toEqual(
|
|
297
|
-
new Date('2018-01-04T01:05:06.000Z'),
|
|
298
|
-
);
|
|
299
|
-
expect(pdfDoc.getModificationDate()).toEqual(
|
|
300
|
-
new Date('2018-01-04T01:05:06.000Z'),
|
|
301
|
-
);
|
|
302
|
-
});
|
|
303
|
-
});
|
|
304
|
-
|
|
305
|
-
describe(`ViewerPreferences`, () => {
|
|
306
|
-
it(`defaults to an undefined ViewerPreferences dict`, async () => {
|
|
307
|
-
const pdfDoc = await PDFDocument.create();
|
|
308
|
-
|
|
309
|
-
expect(
|
|
310
|
-
pdfDoc.catalog.lookupMaybe(PDFName.of('ViewerPreferences'), PDFDict),
|
|
311
|
-
).toBeUndefined();
|
|
312
|
-
});
|
|
313
|
-
|
|
314
|
-
it(`can get/set HideToolbar, HideMenubar, HideWindowUI, FitWindow, CenterWindow, DisplayDocTitle, NonFullScreenPageMode, Direction, PrintScaling, Duplex, PickTrayByPDFSize, PrintPageRange, NumCopies from a new document`, async () => {
|
|
315
|
-
const pdfDoc = await PDFDocument.create();
|
|
316
|
-
const viewerPrefs = pdfDoc.catalog.getOrCreateViewerPreferences();
|
|
317
|
-
|
|
318
|
-
// Everything is empty or has its initial value.
|
|
319
|
-
expect(viewerPrefs.getHideToolbar()).toBe(false);
|
|
320
|
-
expect(viewerPrefs.getHideMenubar()).toBe(false);
|
|
321
|
-
expect(viewerPrefs.getHideWindowUI()).toBe(false);
|
|
322
|
-
expect(viewerPrefs.getFitWindow()).toBe(false);
|
|
323
|
-
expect(viewerPrefs.getCenterWindow()).toBe(false);
|
|
324
|
-
expect(viewerPrefs.getDisplayDocTitle()).toBe(false);
|
|
325
|
-
expect(viewerPrefs.getNonFullScreenPageMode()).toBe(
|
|
326
|
-
NonFullScreenPageMode.UseNone,
|
|
327
|
-
);
|
|
328
|
-
expect(viewerPrefs.getReadingDirection()).toBe(ReadingDirection.L2R);
|
|
329
|
-
expect(viewerPrefs.getPrintScaling()).toBe(PrintScaling.AppDefault);
|
|
330
|
-
expect(viewerPrefs.getDuplex()).toBeUndefined();
|
|
331
|
-
expect(viewerPrefs.getPickTrayByPDFSize()).toBeUndefined();
|
|
332
|
-
expect(viewerPrefs.getPrintPageRange()).toEqual([]);
|
|
333
|
-
expect(viewerPrefs.getNumCopies()).toBe(1);
|
|
334
|
-
|
|
335
|
-
const pageRanges = [
|
|
336
|
-
{ start: 0, end: 0 },
|
|
337
|
-
{ start: 2, end: 2 },
|
|
338
|
-
{ start: 4, end: 6 },
|
|
339
|
-
];
|
|
340
|
-
|
|
341
|
-
viewerPrefs.setHideToolbar(true);
|
|
342
|
-
viewerPrefs.setHideMenubar(true);
|
|
343
|
-
viewerPrefs.setHideWindowUI(true);
|
|
344
|
-
viewerPrefs.setFitWindow(true);
|
|
345
|
-
viewerPrefs.setCenterWindow(true);
|
|
346
|
-
viewerPrefs.setDisplayDocTitle(true);
|
|
347
|
-
viewerPrefs.setNonFullScreenPageMode(NonFullScreenPageMode.UseOutlines);
|
|
348
|
-
viewerPrefs.setReadingDirection(ReadingDirection.R2L);
|
|
349
|
-
viewerPrefs.setPrintScaling(PrintScaling.None);
|
|
350
|
-
viewerPrefs.setDuplex(Duplex.DuplexFlipLongEdge);
|
|
351
|
-
viewerPrefs.setPickTrayByPDFSize(true);
|
|
352
|
-
viewerPrefs.setPrintPageRange(pageRanges);
|
|
353
|
-
viewerPrefs.setNumCopies(2);
|
|
354
|
-
|
|
355
|
-
expect(viewerPrefs.getHideToolbar()).toBe(true);
|
|
356
|
-
expect(viewerPrefs.getHideMenubar()).toBe(true);
|
|
357
|
-
expect(viewerPrefs.getHideWindowUI()).toBe(true);
|
|
358
|
-
expect(viewerPrefs.getFitWindow()).toBe(true);
|
|
359
|
-
expect(viewerPrefs.getCenterWindow()).toBe(true);
|
|
360
|
-
expect(viewerPrefs.getDisplayDocTitle()).toBe(true);
|
|
361
|
-
expect(viewerPrefs.getNonFullScreenPageMode()).toBe(
|
|
362
|
-
NonFullScreenPageMode.UseOutlines,
|
|
363
|
-
);
|
|
364
|
-
expect(viewerPrefs.getReadingDirection()).toBe(ReadingDirection.R2L);
|
|
365
|
-
expect(viewerPrefs.getPrintScaling()).toBe(PrintScaling.None);
|
|
366
|
-
expect(viewerPrefs.getDuplex()).toBe(Duplex.DuplexFlipLongEdge);
|
|
367
|
-
expect(viewerPrefs.getPickTrayByPDFSize()).toBe(true);
|
|
368
|
-
expect(viewerPrefs.getPrintPageRange()).toEqual(pageRanges);
|
|
369
|
-
expect(viewerPrefs.getNumCopies()).toBe(2);
|
|
370
|
-
|
|
371
|
-
// Test setting single page range
|
|
372
|
-
const pageRange = { start: 2, end: 4 };
|
|
373
|
-
viewerPrefs.setPrintPageRange(pageRange);
|
|
374
|
-
expect(viewerPrefs.getPrintPageRange()).toEqual([pageRange]);
|
|
375
|
-
});
|
|
376
|
-
|
|
377
|
-
it(`they can be retrieved from an existing document`, async () => {
|
|
378
|
-
const pdfDoc = await PDFDocument.load(withViewerPrefsPdfBytes);
|
|
379
|
-
const viewerPrefs = pdfDoc.catalog.getViewerPreferences()!;
|
|
380
|
-
|
|
381
|
-
expect(viewerPrefs).toBeInstanceOf(ViewerPreferences);
|
|
382
|
-
expect(viewerPrefs.getPrintScaling()).toBe(PrintScaling.None);
|
|
383
|
-
expect(viewerPrefs.getDuplex()).toBe(Duplex.DuplexFlipLongEdge);
|
|
384
|
-
expect(viewerPrefs.getPickTrayByPDFSize()).toBe(true);
|
|
385
|
-
expect(viewerPrefs.getPrintPageRange()).toEqual([
|
|
386
|
-
{ start: 1, end: 1 },
|
|
387
|
-
{ start: 3, end: 4 },
|
|
388
|
-
]);
|
|
389
|
-
expect(viewerPrefs.getNumCopies()).toBe(2);
|
|
390
|
-
|
|
391
|
-
expect(viewerPrefs.getFitWindow()).toBe(true);
|
|
392
|
-
expect(viewerPrefs.getCenterWindow()).toBe(true);
|
|
393
|
-
expect(viewerPrefs.getDisplayDocTitle()).toBe(true);
|
|
394
|
-
expect(viewerPrefs.getHideMenubar()).toBe(true);
|
|
395
|
-
expect(viewerPrefs.getHideToolbar()).toBe(true);
|
|
396
|
-
|
|
397
|
-
/*
|
|
398
|
-
* Other presets not tested, but defined in this PDF doc (Acrobat XI v11):
|
|
399
|
-
* Binding: RightEdge
|
|
400
|
-
* Language: EN-NZ
|
|
401
|
-
*
|
|
402
|
-
* NavigationTab: PageOnly
|
|
403
|
-
* PageLayout: TwoUp (facing)
|
|
404
|
-
* Magnification: 50%
|
|
405
|
-
* OpenToPage: 2
|
|
406
|
-
*
|
|
407
|
-
* PageMode: FullScreen
|
|
408
|
-
*/
|
|
409
|
-
});
|
|
410
|
-
});
|
|
411
|
-
|
|
412
|
-
describe(`setTitle() method with options`, () => {
|
|
413
|
-
it(`does not set the ViewerPreferences dict if the option is not set`, async () => {
|
|
414
|
-
const pdfDoc = await PDFDocument.create();
|
|
415
|
-
|
|
416
|
-
pdfDoc.setTitle('Testing setTitle Title');
|
|
417
|
-
|
|
418
|
-
expect(
|
|
419
|
-
pdfDoc.catalog.lookupMaybe(PDFName.of('ViewerPreferences'), PDFDict),
|
|
420
|
-
).toBeUndefined();
|
|
421
|
-
|
|
422
|
-
expect(pdfDoc.getTitle()).toBe('Testing setTitle Title');
|
|
423
|
-
});
|
|
424
|
-
|
|
425
|
-
it(`creates the ViewerPreferences dict when the option is set`, async () => {
|
|
426
|
-
const pdfDoc = await PDFDocument.create();
|
|
427
|
-
|
|
428
|
-
pdfDoc.setTitle('ViewerPrefs Test Creation', {
|
|
429
|
-
showInWindowTitleBar: true,
|
|
430
|
-
});
|
|
431
|
-
|
|
432
|
-
expect(
|
|
433
|
-
pdfDoc.catalog.lookupMaybe(PDFName.of('ViewerPreferences'), PDFDict),
|
|
434
|
-
);
|
|
435
|
-
});
|
|
436
|
-
});
|
|
437
|
-
|
|
438
|
-
describe(`addJavaScript() method`, () => {
|
|
439
|
-
it(`adds the script to the catalog`, async () => {
|
|
440
|
-
const pdfDoc = await PDFDocument.create();
|
|
441
|
-
pdfDoc.addJavaScript(
|
|
442
|
-
'main',
|
|
443
|
-
'console.show(); console.println("Hello World");',
|
|
444
|
-
);
|
|
445
|
-
await pdfDoc.flush();
|
|
446
|
-
|
|
447
|
-
expect(pdfDoc.catalog.has(PDFName.of('Names')));
|
|
448
|
-
const Names = pdfDoc.catalog.lookup(PDFName.of('Names'), PDFDict);
|
|
449
|
-
expect(Names.has(PDFName.of('JavaScript')));
|
|
450
|
-
const Javascript = Names.lookup(PDFName.of('JavaScript'), PDFDict);
|
|
451
|
-
expect(Javascript.has(PDFName.of('Names')));
|
|
452
|
-
const JSNames = Javascript.lookup(PDFName.of('Names'), PDFArray);
|
|
453
|
-
expect(JSNames.lookup(0, PDFHexString).decodeText()).toEqual('main');
|
|
454
|
-
});
|
|
455
|
-
|
|
456
|
-
it(`does not overwrite scripts`, async () => {
|
|
457
|
-
const pdfDoc = await PDFDocument.create();
|
|
458
|
-
pdfDoc.addJavaScript(
|
|
459
|
-
'first',
|
|
460
|
-
'console.show(); console.println("First");',
|
|
461
|
-
);
|
|
462
|
-
pdfDoc.addJavaScript(
|
|
463
|
-
'second',
|
|
464
|
-
'console.show(); console.println("Second");',
|
|
465
|
-
);
|
|
466
|
-
await pdfDoc.flush();
|
|
467
|
-
|
|
468
|
-
const Names = pdfDoc.catalog.lookup(PDFName.of('Names'), PDFDict);
|
|
469
|
-
const Javascript = Names.lookup(PDFName.of('JavaScript'), PDFDict);
|
|
470
|
-
const JSNames = Javascript.lookup(PDFName.of('Names'), PDFArray);
|
|
471
|
-
expect(JSNames.lookup(0, PDFHexString).decodeText()).toEqual('first');
|
|
472
|
-
expect(JSNames.lookup(2, PDFHexString).decodeText()).toEqual('second');
|
|
473
|
-
});
|
|
474
|
-
});
|
|
475
|
-
|
|
476
|
-
describe(`embedPng() method`, () => {
|
|
477
|
-
it(`does not prevent the PDFDocument from being modified after embedding an image`, async () => {
|
|
478
|
-
const pdfDoc = await PDFDocument.create();
|
|
479
|
-
const pdfPage = pdfDoc.addPage();
|
|
480
|
-
|
|
481
|
-
const noErrorFunc = async () => {
|
|
482
|
-
const embeddedImage = await pdfDoc.embedPng(examplePngImage);
|
|
483
|
-
pdfPage.drawImage(embeddedImage);
|
|
484
|
-
await embeddedImage.embed();
|
|
485
|
-
|
|
486
|
-
const pdfPage2 = pdfDoc.addPage();
|
|
487
|
-
pdfPage2.drawImage(embeddedImage);
|
|
488
|
-
|
|
489
|
-
pdfDoc.setTitle('Unit Test');
|
|
490
|
-
};
|
|
491
|
-
|
|
492
|
-
await expect(noErrorFunc()).resolves.not.toThrow();
|
|
493
|
-
});
|
|
494
|
-
});
|
|
495
|
-
|
|
496
|
-
describe(`save() method`, () => {
|
|
497
|
-
it(`can called multiple times on the same PDFDocument with different changes`, async () => {
|
|
498
|
-
const pdfDoc = await PDFDocument.create();
|
|
499
|
-
const embeddedImage = await pdfDoc.embedPng(examplePngImage);
|
|
500
|
-
|
|
501
|
-
const noErrorFunc = async () => {
|
|
502
|
-
const page1 = pdfDoc.addPage();
|
|
503
|
-
page1.drawImage(embeddedImage);
|
|
504
|
-
|
|
505
|
-
const pdfBytes1 = await pdfDoc.save();
|
|
506
|
-
expect(pdfBytes1.byteLength).toBeGreaterThan(0);
|
|
507
|
-
|
|
508
|
-
const page2 = pdfDoc.addPage();
|
|
509
|
-
page2.drawImage(embeddedImage);
|
|
510
|
-
|
|
511
|
-
pdfDoc.setTitle('Unit Test');
|
|
512
|
-
|
|
513
|
-
const pdfBytes2 = await pdfDoc.save();
|
|
514
|
-
expect(pdfBytes2.byteLength).toBeGreaterThan(0);
|
|
515
|
-
expect(pdfBytes2.byteLength).not.toEqual(pdfBytes1.byteLength);
|
|
516
|
-
|
|
517
|
-
const pdfPage3 = pdfDoc.addPage();
|
|
518
|
-
pdfPage3.drawImage(embeddedImage);
|
|
519
|
-
|
|
520
|
-
pdfDoc.setTitle('Unit Test 2. change');
|
|
521
|
-
|
|
522
|
-
const pdfBytes3 = await pdfDoc.save();
|
|
523
|
-
expect(pdfBytes3.byteLength).toBeGreaterThan(0);
|
|
524
|
-
expect(pdfBytes3.byteLength).not.toEqual(pdfBytes2.byteLength);
|
|
525
|
-
};
|
|
526
|
-
|
|
527
|
-
await expect(noErrorFunc()).resolves.not.toThrow();
|
|
528
|
-
});
|
|
529
|
-
});
|
|
530
|
-
|
|
531
|
-
describe(`copy() method`, () => {
|
|
532
|
-
let pdfDoc: PDFDocument;
|
|
533
|
-
let srcDoc: PDFDocument;
|
|
534
|
-
beforeAll(async () => {
|
|
535
|
-
const parseSpeed = ParseSpeeds.Fastest;
|
|
536
|
-
srcDoc = await PDFDocument.load(unencryptedPdfBytes, { parseSpeed });
|
|
537
|
-
const title = '🥚 The Life of an Egg 🍳';
|
|
538
|
-
const author = 'Humpty Dumpty';
|
|
539
|
-
const subject = '📘 An Epic Tale of Woe 📖';
|
|
540
|
-
const keywords = ['eggs', 'wall', 'fall', 'king', 'horses', 'men', '🥚'];
|
|
541
|
-
const producer = 'PDF App 9000 🤖';
|
|
542
|
-
const creator = 'PDF App 8000 🤖';
|
|
543
|
-
|
|
544
|
-
// Milliseconds will not get saved, so these dates do not have milliseconds.
|
|
545
|
-
const creationDate = new Date('1997-08-15T01:58:37Z');
|
|
546
|
-
const modificationDate = new Date('2018-12-21T07:00:11Z');
|
|
547
|
-
|
|
548
|
-
srcDoc.setTitle(title);
|
|
549
|
-
srcDoc.setAuthor(author);
|
|
550
|
-
srcDoc.setSubject(subject);
|
|
551
|
-
srcDoc.setKeywords(keywords);
|
|
552
|
-
srcDoc.setProducer(producer);
|
|
553
|
-
srcDoc.setCreator(creator);
|
|
554
|
-
srcDoc.setCreationDate(creationDate);
|
|
555
|
-
srcDoc.setModificationDate(modificationDate);
|
|
556
|
-
pdfDoc = await srcDoc.copy();
|
|
557
|
-
});
|
|
558
|
-
|
|
559
|
-
it(`Returns a pdf with the same number of pages`, async () => {
|
|
560
|
-
expect(pdfDoc.getPageCount()).toBe(srcDoc.getPageCount());
|
|
561
|
-
});
|
|
562
|
-
|
|
563
|
-
it(`Can copy author, creationDate, creator, producer, subject, title, defaultWordBreaks`, async () => {
|
|
564
|
-
expect(pdfDoc.getAuthor()).toBe(srcDoc.getAuthor());
|
|
565
|
-
expect(pdfDoc.getCreationDate()).toStrictEqual(srcDoc.getCreationDate());
|
|
566
|
-
expect(pdfDoc.getCreator()).toBe(srcDoc.getCreator());
|
|
567
|
-
expect(pdfDoc.getModificationDate()).toStrictEqual(
|
|
568
|
-
srcDoc.getModificationDate(),
|
|
569
|
-
);
|
|
570
|
-
expect(pdfDoc.getProducer()).toBe(srcDoc.getProducer());
|
|
571
|
-
expect(pdfDoc.getSubject()).toBe(srcDoc.getSubject());
|
|
572
|
-
expect(pdfDoc.getTitle()).toBe(srcDoc.getTitle());
|
|
573
|
-
expect(pdfDoc.defaultWordBreaks).toEqual(srcDoc.defaultWordBreaks);
|
|
574
|
-
});
|
|
575
|
-
});
|
|
576
|
-
});
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { PDFDocument, PDFImage } from '../../src/api';
|
|
2
|
-
import { PngEmbedder } from '../../src/core';
|
|
3
|
-
import { toUint8Array } from '../../src/utils';
|
|
4
|
-
|
|
5
|
-
const examplePngImage =
|
|
6
|
-
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABhGlDQ1BJQ0MgcHJvZmlsZQAAKJF9kT1Iw0AcxV9TxaoVBzuIdMhQnSyIijhKFYtgobQVWnUwufQLmjQkKS6OgmvBwY/FqoOLs64OroIg+AHi5uak6CIl/i8ptIjx4Lgf7+497t4BQqPCVLNrAlA1y0jFY2I2tyr2vKIfAgLoRVhipp5IL2bgOb7u4ePrXZRneZ/7cwwoeZMBPpF4jumGRbxBPLNp6Zz3iUOsJCnE58TjBl2Q+JHrsstvnIsOCzwzZGRS88QhYrHYwXIHs5KhEk8TRxRVo3wh67LCeYuzWqmx1j35C4N5bSXNdZphxLGEBJIQIaOGMiqwEKVVI8VEivZjHv4Rx58kl0yuMhg5FlCFCsnxg//B727NwtSkmxSMAd0vtv0xCvTsAs26bX8f23bzBPA/A1da219tALOfpNfbWuQIGNwGLq7bmrwHXO4Aw0+6ZEiO5KcpFArA+xl9Uw4YugX61tzeWvs4fQAy1NXyDXBwCIwVKXvd492Bzt7+PdPq7wcdn3KFLu4iBAAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAlFJREFUeNrt289r02AYB/Dvk6Sl4EDKpllTlFKsnUdBHXgUBEHwqHj2IJ72B0zwKHhxJ08i/gDxX/AiRfSkBxELXTcVxTa2s2xTsHNN8ngQbQL70RZqG/Z9b29JnvflkydP37whghG3ZaegoxzfwB5vBCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgwB5rstWPtnP0LqBX/vZNyLF6vVrpN/hucewhb4g+B2AyAwiwY7NGOXijviS9vBeYh6CEP4edBLDADCAAAQhAAAIQgAAEIAABCDAUAFF/GIN1DM+PBYCo/ohMXDQ1WPjoeUZH1mMBEEh0oqLGvsHCy0S4NzWVWotJBogbvZB+brDwQT7UWSmXy5sxyQB9HQEROdVv4HQ+vx+QmS4iXsWmCK7Usu8AhOqAXMzlcn3VgWTbugQgEYrxMkZ/gyUPgnuhe2C6/Stxvdeg2ezMJERvhOuoZ+JBrNYBRuDdBtDuXkDM25nCHLbZSv9X6A4VHU+DpwCcbvbjcetLtTaOANtuirrux08HM0euisjDEMKC7RQuq+C+pVJqpzx3NZ3+eeBza9I0rWJgyHnxg2sAJrqnaHUzFcyN60Jox13hprv8aNopZBS4GcqWWVHM+lAkN0zY7ncgkYBukRoKLPpiXVj9UFkfV4Bdl8Jf60u3IMZZAG/6iLuhkDvaSZ74VqtUx3kp3NN7gUZt8RmA43a2eEY1OCfQ04AcBpAGkAKwpkBLIG8BfQE/eNJsvG/G4VlARj0BfjDBx2ECEIAABCAAAQhAAAIQgAAE+P/tN8YvpvbTDBOlAAAAAElFTkSuQmCC';
|
|
7
|
-
|
|
8
|
-
describe(`PDFImage`, () => {
|
|
9
|
-
describe(`embed() method`, () => {
|
|
10
|
-
it(`clears the 'embedder' field after the first call`, async () => {
|
|
11
|
-
const pdfDoc = await PDFDocument.create();
|
|
12
|
-
|
|
13
|
-
const bytes = toUint8Array(examplePngImage);
|
|
14
|
-
const embedder = await PngEmbedder.for(bytes);
|
|
15
|
-
const ref = pdfDoc.context.nextRef();
|
|
16
|
-
const pdfImage = PDFImage.of(ref, pdfDoc, embedder);
|
|
17
|
-
|
|
18
|
-
const embedderVariable = 'embedder';
|
|
19
|
-
expect(pdfImage[embedderVariable]).toBeDefined();
|
|
20
|
-
await pdfImage.embed();
|
|
21
|
-
expect(pdfImage[embedderVariable]).toBeUndefined();
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
it(`may be called multiple times without causing an error`, async () => {
|
|
25
|
-
const pdfDoc = await PDFDocument.create();
|
|
26
|
-
|
|
27
|
-
const bytes = toUint8Array(examplePngImage);
|
|
28
|
-
const embedder = await PngEmbedder.for(bytes);
|
|
29
|
-
const ref = pdfDoc.context.nextRef();
|
|
30
|
-
const pdfImage = PDFImage.of(ref, pdfDoc, embedder);
|
|
31
|
-
|
|
32
|
-
await expect(pdfImage.embed()).resolves.not.toThrow();
|
|
33
|
-
await expect(pdfImage.embed()).resolves.not.toThrow();
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
it(`may be called in parallel without causing an error`, async () => {
|
|
37
|
-
const pdfDoc = await PDFDocument.create();
|
|
38
|
-
|
|
39
|
-
const bytes = toUint8Array(examplePngImage);
|
|
40
|
-
const embedder = await PngEmbedder.for(bytes);
|
|
41
|
-
const ref = pdfDoc.context.nextRef();
|
|
42
|
-
const pdfImage = PDFImage.of(ref, pdfDoc, embedder);
|
|
43
|
-
|
|
44
|
-
// tslint:disable-next-line
|
|
45
|
-
const task = () => pdfImage['embedTask'];
|
|
46
|
-
|
|
47
|
-
expect(task()).toBeUndefined();
|
|
48
|
-
|
|
49
|
-
const task1 = pdfImage.embed();
|
|
50
|
-
const firstTask = task();
|
|
51
|
-
|
|
52
|
-
const task2 = pdfImage.embed();
|
|
53
|
-
const secondTask = task();
|
|
54
|
-
|
|
55
|
-
await Promise.all([task1, task2]);
|
|
56
|
-
|
|
57
|
-
expect(firstTask).toEqual(secondTask);
|
|
58
|
-
});
|
|
59
|
-
});
|
|
60
|
-
});
|