@pdfme/pdf-lib 5.4.0-dev.59 → 5.4.0-dev.65
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/dist/cjs/src/api/PDFDocument.js +3 -11
- package/dist/cjs/src/api/PDFDocument.js.map +1 -1
- package/dist/cjs/src/api/PDFEmbeddedFile.js.map +1 -1
- package/dist/cjs/src/api/PDFEmbeddedPage.js.map +1 -1
- package/dist/cjs/src/api/PDFFont.js.map +1 -1
- package/dist/cjs/src/api/PDFJavaScript.js.map +1 -1
- package/dist/cjs/src/api/PDFPage.js +16 -42
- package/dist/cjs/src/api/PDFPage.js.map +1 -1
- package/dist/cjs/src/api/colors.js.map +1 -1
- package/dist/cjs/src/api/errors.js.map +1 -1
- package/dist/cjs/src/api/form/PDFButton.js +1 -3
- package/dist/cjs/src/api/form/PDFButton.js.map +1 -1
- package/dist/cjs/src/api/form/PDFCheckBox.js +1 -3
- package/dist/cjs/src/api/form/PDFCheckBox.js.map +1 -1
- package/dist/cjs/src/api/form/PDFDropdown.js +1 -3
- package/dist/cjs/src/api/form/PDFDropdown.js.map +1 -1
- package/dist/cjs/src/api/form/PDFField.js +4 -10
- package/dist/cjs/src/api/form/PDFField.js.map +1 -1
- package/dist/cjs/src/api/form/PDFForm.js +1 -3
- package/dist/cjs/src/api/form/PDFForm.js.map +1 -1
- package/dist/cjs/src/api/form/PDFOptionList.js.map +1 -1
- package/dist/cjs/src/api/form/PDFRadioGroup.js +1 -3
- package/dist/cjs/src/api/form/PDFRadioGroup.js.map +1 -1
- package/dist/cjs/src/api/form/PDFSignature.js +1 -3
- package/dist/cjs/src/api/form/PDFSignature.js.map +1 -1
- package/dist/cjs/src/api/form/PDFTextField.js.map +1 -1
- package/dist/cjs/src/api/form/appearances.js.map +1 -1
- package/dist/cjs/src/api/operations.js.map +1 -1
- package/dist/cjs/src/api/operators.js +1 -5
- package/dist/cjs/src/api/operators.js.map +1 -1
- package/dist/cjs/src/api/rotations.js.map +1 -1
- package/dist/cjs/src/api/svg.js +25 -23
- package/dist/cjs/src/api/svg.js.map +1 -1
- package/dist/cjs/src/api/svgPath.js +1 -2
- package/dist/cjs/src/api/svgPath.js.map +1 -1
- package/dist/cjs/src/api/text/layout.js.map +1 -1
- package/dist/cjs/src/core/PDFContext.js.map +1 -1
- package/dist/cjs/src/core/PDFObjectCopier.js.map +1 -1
- package/dist/cjs/src/core/acroform/PDFAcroButton.js +1 -2
- package/dist/cjs/src/core/acroform/PDFAcroButton.js.map +1 -1
- package/dist/cjs/src/core/acroform/PDFAcroCheckBox.js.map +1 -1
- package/dist/cjs/src/core/acroform/PDFAcroChoice.js.map +1 -1
- package/dist/cjs/src/core/acroform/PDFAcroComboBox.js.map +1 -1
- package/dist/cjs/src/core/acroform/PDFAcroField.js.map +1 -1
- package/dist/cjs/src/core/acroform/PDFAcroForm.js.map +1 -1
- package/dist/cjs/src/core/acroform/PDFAcroListBox.js.map +1 -1
- package/dist/cjs/src/core/acroform/PDFAcroNonTerminal.js.map +1 -1
- package/dist/cjs/src/core/acroform/PDFAcroPushButton.js.map +1 -1
- package/dist/cjs/src/core/acroform/PDFAcroRadioButton.js.map +1 -1
- package/dist/cjs/src/core/acroform/PDFAcroSignature.js.map +1 -1
- package/dist/cjs/src/core/acroform/PDFAcroTerminal.js.map +1 -1
- package/dist/cjs/src/core/acroform/utils.js.map +1 -1
- package/dist/cjs/src/core/annotation/PDFWidgetAnnotation.js.map +1 -1
- package/dist/cjs/src/core/crypto.js +122 -179
- package/dist/cjs/src/core/crypto.js.map +1 -1
- package/dist/cjs/src/core/document/PDFCrossRefSection.js.map +1 -1
- package/dist/cjs/src/core/document/PDFHeader.js.map +1 -1
- package/dist/cjs/src/core/document/PDFTrailer.js.map +1 -1
- package/dist/cjs/src/core/embedders/CMap.js.map +1 -1
- package/dist/cjs/src/core/embedders/CustomFontEmbedder.js +1 -2
- package/dist/cjs/src/core/embedders/CustomFontEmbedder.js.map +1 -1
- package/dist/cjs/src/core/embedders/CustomFontSubsetEmbedder.js.map +1 -1
- package/dist/cjs/src/core/embedders/FileEmbedder.js +3 -7
- package/dist/cjs/src/core/embedders/FileEmbedder.js.map +1 -1
- package/dist/cjs/src/core/embedders/JpegEmbedder.js +1 -3
- package/dist/cjs/src/core/embedders/JpegEmbedder.js.map +1 -1
- package/dist/cjs/src/core/embedders/PDFPageEmbedder.js +11 -7
- package/dist/cjs/src/core/embedders/PDFPageEmbedder.js.map +1 -1
- package/dist/cjs/src/core/embedders/StandardFontEmbedder.js.map +1 -1
- package/dist/cjs/src/core/errors.js +1 -3
- package/dist/cjs/src/core/errors.js.map +1 -1
- package/dist/cjs/src/core/index.js.map +1 -1
- package/dist/cjs/src/core/interactive/ViewerPreferences.js.map +1 -1
- package/dist/cjs/src/core/objects/PDFArray.js.map +1 -1
- package/dist/cjs/src/core/objects/PDFDict.js.map +1 -1
- package/dist/cjs/src/core/objects/PDFName.js +1 -3
- package/dist/cjs/src/core/objects/PDFName.js.map +1 -1
- package/dist/cjs/src/core/objects/PDFRawStream.js.map +1 -1
- package/dist/cjs/src/core/objects/PDFRef.js.map +1 -1
- package/dist/cjs/src/core/objects/PDFStream.js.map +1 -1
- package/dist/cjs/src/core/operators/PDFOperator.js.map +1 -1
- package/dist/cjs/src/core/parser/PDFObjectParser.js +1 -2
- package/dist/cjs/src/core/parser/PDFObjectParser.js.map +1 -1
- package/dist/cjs/src/core/parser/PDFObjectStreamParser.js.map +1 -1
- package/dist/cjs/src/core/parser/PDFParser.js +1 -2
- package/dist/cjs/src/core/parser/PDFParser.js.map +1 -1
- package/dist/cjs/src/core/parser/PDFXRefStreamParser.js.map +1 -1
- package/dist/cjs/src/core/streams/Ascii85Stream.js.map +1 -1
- package/dist/cjs/src/core/streams/DecryptStream.js.map +1 -1
- package/dist/cjs/src/core/streams/FlateStream.js.map +1 -1
- package/dist/cjs/src/core/streams/LZWStream.js.map +1 -1
- package/dist/cjs/src/core/streams/Stream.js.map +1 -1
- package/dist/cjs/src/core/streams/decode.js +1 -1
- package/dist/cjs/src/core/streams/decode.js.map +1 -1
- package/dist/cjs/src/core/structures/PDFCatalog.js.map +1 -1
- package/dist/cjs/src/core/structures/PDFCrossRefStream.js.map +1 -1
- package/dist/cjs/src/core/structures/PDFFlateStream.js.map +1 -1
- package/dist/cjs/src/core/structures/PDFObjectStream.js +1 -4
- package/dist/cjs/src/core/structures/PDFObjectStream.js.map +1 -1
- package/dist/cjs/src/core/structures/PDFPageLeaf.js +1 -6
- package/dist/cjs/src/core/structures/PDFPageLeaf.js.map +1 -1
- package/dist/cjs/src/core/structures/PDFPageTree.js +1 -1
- package/dist/cjs/src/core/structures/PDFPageTree.js.map +1 -1
- package/dist/cjs/src/core/syntax/Keywords.js +4 -30
- package/dist/cjs/src/core/syntax/Keywords.js.map +1 -1
- package/dist/cjs/src/core/writers/PDFStreamWriter.js.map +1 -1
- package/dist/cjs/src/core/writers/PDFWriter.js.map +1 -1
- package/dist/cjs/src/types/matrix.js.map +1 -1
- package/dist/cjs/src/utils/arrays.js +2 -5
- package/dist/cjs/src/utils/arrays.js.map +1 -1
- package/dist/cjs/src/utils/base64.js.map +1 -1
- package/dist/cjs/src/utils/elements/Arc.js +3 -6
- package/dist/cjs/src/utils/elements/Arc.js.map +1 -1
- package/dist/cjs/src/utils/elements/Circle.js.map +1 -1
- package/dist/cjs/src/utils/elements/Ellipse.js +1 -1
- package/dist/cjs/src/utils/elements/Ellipse.js.map +1 -1
- package/dist/cjs/src/utils/elements/Line.js +1 -3
- package/dist/cjs/src/utils/elements/Line.js.map +1 -1
- package/dist/cjs/src/utils/elements/Segment.js +1 -2
- package/dist/cjs/src/utils/elements/Segment.js.map +1 -1
- package/dist/cjs/src/utils/intersections.js.map +1 -1
- package/dist/cjs/src/utils/maths.js.map +1 -1
- package/dist/cjs/src/utils/strings.js.map +1 -1
- package/dist/cjs/src/utils/unicode.js.map +1 -1
- package/dist/cjs/src/utils/validators.js.map +1 -1
- package/dist/esm/src/api/PDFDocument.js +3 -11
- package/dist/esm/src/api/PDFDocument.js.map +1 -1
- package/dist/esm/src/api/PDFEmbeddedFile.js.map +1 -1
- package/dist/esm/src/api/PDFEmbeddedPage.js.map +1 -1
- package/dist/esm/src/api/PDFFont.js +1 -1
- package/dist/esm/src/api/PDFFont.js.map +1 -1
- package/dist/esm/src/api/PDFJavaScript.js.map +1 -1
- package/dist/esm/src/api/PDFPage.js +16 -42
- package/dist/esm/src/api/PDFPage.js.map +1 -1
- package/dist/esm/src/api/colors.js.map +1 -1
- package/dist/esm/src/api/errors.js.map +1 -1
- package/dist/esm/src/api/form/PDFButton.js +3 -5
- package/dist/esm/src/api/form/PDFButton.js.map +1 -1
- package/dist/esm/src/api/form/PDFCheckBox.js +3 -5
- package/dist/esm/src/api/form/PDFCheckBox.js.map +1 -1
- package/dist/esm/src/api/form/PDFDropdown.js +2 -4
- package/dist/esm/src/api/form/PDFDropdown.js.map +1 -1
- package/dist/esm/src/api/form/PDFField.js +4 -10
- package/dist/esm/src/api/form/PDFField.js.map +1 -1
- package/dist/esm/src/api/form/PDFForm.js +2 -4
- package/dist/esm/src/api/form/PDFForm.js.map +1 -1
- package/dist/esm/src/api/form/PDFOptionList.js +2 -2
- package/dist/esm/src/api/form/PDFOptionList.js.map +1 -1
- package/dist/esm/src/api/form/PDFRadioGroup.js +2 -4
- package/dist/esm/src/api/form/PDFRadioGroup.js.map +1 -1
- package/dist/esm/src/api/form/PDFSignature.js +1 -3
- package/dist/esm/src/api/form/PDFSignature.js.map +1 -1
- package/dist/esm/src/api/form/PDFTextField.js +2 -2
- package/dist/esm/src/api/form/PDFTextField.js.map +1 -1
- package/dist/esm/src/api/form/appearances.js +1 -1
- package/dist/esm/src/api/form/appearances.js.map +1 -1
- package/dist/esm/src/api/operations.js.map +1 -1
- package/dist/esm/src/api/operators.js +2 -6
- package/dist/esm/src/api/operators.js.map +1 -1
- package/dist/esm/src/api/rotations.js.map +1 -1
- package/dist/esm/src/api/svg.js +26 -24
- package/dist/esm/src/api/svg.js.map +1 -1
- package/dist/esm/src/api/svgPath.js +2 -3
- package/dist/esm/src/api/svgPath.js.map +1 -1
- package/dist/esm/src/api/text/layout.js +1 -1
- package/dist/esm/src/api/text/layout.js.map +1 -1
- package/dist/esm/src/core/PDFContext.js.map +1 -1
- package/dist/esm/src/core/PDFObjectCopier.js.map +1 -1
- package/dist/esm/src/core/acroform/PDFAcroButton.js +1 -2
- package/dist/esm/src/core/acroform/PDFAcroButton.js.map +1 -1
- package/dist/esm/src/core/acroform/PDFAcroCheckBox.js.map +1 -1
- package/dist/esm/src/core/acroform/PDFAcroChoice.js.map +1 -1
- package/dist/esm/src/core/acroform/PDFAcroComboBox.js.map +1 -1
- package/dist/esm/src/core/acroform/PDFAcroField.js.map +1 -1
- package/dist/esm/src/core/acroform/PDFAcroForm.js.map +1 -1
- package/dist/esm/src/core/acroform/PDFAcroListBox.js.map +1 -1
- package/dist/esm/src/core/acroform/PDFAcroNonTerminal.js.map +1 -1
- package/dist/esm/src/core/acroform/PDFAcroPushButton.js.map +1 -1
- package/dist/esm/src/core/acroform/PDFAcroRadioButton.js.map +1 -1
- package/dist/esm/src/core/acroform/PDFAcroSignature.js.map +1 -1
- package/dist/esm/src/core/acroform/PDFAcroTerminal.js.map +1 -1
- package/dist/esm/src/core/acroform/utils.js.map +1 -1
- package/dist/esm/src/core/annotation/PDFWidgetAnnotation.js.map +1 -1
- package/dist/esm/src/core/crypto.js +122 -179
- package/dist/esm/src/core/crypto.js.map +1 -1
- package/dist/esm/src/core/document/PDFCrossRefSection.js.map +1 -1
- package/dist/esm/src/core/document/PDFHeader.js.map +1 -1
- package/dist/esm/src/core/document/PDFTrailer.js.map +1 -1
- package/dist/esm/src/core/embedders/CMap.js +1 -1
- package/dist/esm/src/core/embedders/CMap.js.map +1 -1
- package/dist/esm/src/core/embedders/CustomFontEmbedder.js +2 -3
- package/dist/esm/src/core/embedders/CustomFontEmbedder.js.map +1 -1
- package/dist/esm/src/core/embedders/CustomFontSubsetEmbedder.js.map +1 -1
- package/dist/esm/src/core/embedders/FileEmbedder.js +3 -7
- package/dist/esm/src/core/embedders/FileEmbedder.js.map +1 -1
- package/dist/esm/src/core/embedders/JpegEmbedder.js +1 -3
- package/dist/esm/src/core/embedders/JpegEmbedder.js.map +1 -1
- package/dist/esm/src/core/embedders/PDFPageEmbedder.js +12 -8
- package/dist/esm/src/core/embedders/PDFPageEmbedder.js.map +1 -1
- package/dist/esm/src/core/embedders/StandardFontEmbedder.js +1 -1
- package/dist/esm/src/core/embedders/StandardFontEmbedder.js.map +1 -1
- package/dist/esm/src/core/errors.js +1 -3
- package/dist/esm/src/core/errors.js.map +1 -1
- package/dist/esm/src/core/index.js +2 -2
- package/dist/esm/src/core/index.js.map +1 -1
- package/dist/esm/src/core/interactive/ViewerPreferences.js +1 -1
- package/dist/esm/src/core/interactive/ViewerPreferences.js.map +1 -1
- package/dist/esm/src/core/objects/PDFArray.js.map +1 -1
- package/dist/esm/src/core/objects/PDFDict.js.map +1 -1
- package/dist/esm/src/core/objects/PDFName.js +2 -4
- package/dist/esm/src/core/objects/PDFName.js.map +1 -1
- package/dist/esm/src/core/objects/PDFRawStream.js.map +1 -1
- package/dist/esm/src/core/objects/PDFRef.js.map +1 -1
- package/dist/esm/src/core/objects/PDFStream.js.map +1 -1
- package/dist/esm/src/core/operators/PDFOperator.js.map +1 -1
- package/dist/esm/src/core/parser/PDFObjectParser.js +1 -2
- package/dist/esm/src/core/parser/PDFObjectParser.js.map +1 -1
- package/dist/esm/src/core/parser/PDFObjectStreamParser.js.map +1 -1
- package/dist/esm/src/core/parser/PDFParser.js +1 -2
- package/dist/esm/src/core/parser/PDFParser.js.map +1 -1
- package/dist/esm/src/core/parser/PDFXRefStreamParser.js.map +1 -1
- package/dist/esm/src/core/streams/Ascii85Stream.js.map +1 -1
- package/dist/esm/src/core/streams/DecryptStream.js.map +1 -1
- package/dist/esm/src/core/streams/FlateStream.js.map +1 -1
- package/dist/esm/src/core/streams/LZWStream.js.map +1 -1
- package/dist/esm/src/core/streams/Stream.js.map +1 -1
- package/dist/esm/src/core/streams/decode.js +1 -1
- package/dist/esm/src/core/streams/decode.js.map +1 -1
- package/dist/esm/src/core/structures/PDFCatalog.js.map +1 -1
- package/dist/esm/src/core/structures/PDFCrossRefStream.js.map +1 -1
- package/dist/esm/src/core/structures/PDFFlateStream.js.map +1 -1
- package/dist/esm/src/core/structures/PDFObjectStream.js +1 -4
- package/dist/esm/src/core/structures/PDFObjectStream.js.map +1 -1
- package/dist/esm/src/core/structures/PDFPageLeaf.js +1 -6
- package/dist/esm/src/core/structures/PDFPageLeaf.js.map +1 -1
- package/dist/esm/src/core/structures/PDFPageTree.js +1 -1
- package/dist/esm/src/core/structures/PDFPageTree.js.map +1 -1
- package/dist/esm/src/core/syntax/Keywords.js +4 -30
- package/dist/esm/src/core/syntax/Keywords.js.map +1 -1
- package/dist/esm/src/core/writers/PDFStreamWriter.js.map +1 -1
- package/dist/esm/src/core/writers/PDFWriter.js.map +1 -1
- package/dist/esm/src/types/matrix.js.map +1 -1
- package/dist/esm/src/utils/arrays.js +2 -5
- package/dist/esm/src/utils/arrays.js.map +1 -1
- package/dist/esm/src/utils/base64.js.map +1 -1
- package/dist/esm/src/utils/elements/Arc.js +3 -6
- package/dist/esm/src/utils/elements/Arc.js.map +1 -1
- package/dist/esm/src/utils/elements/Circle.js +1 -1
- package/dist/esm/src/utils/elements/Circle.js.map +1 -1
- package/dist/esm/src/utils/elements/Ellipse.js +1 -1
- package/dist/esm/src/utils/elements/Ellipse.js.map +1 -1
- package/dist/esm/src/utils/elements/Line.js +1 -3
- package/dist/esm/src/utils/elements/Line.js.map +1 -1
- package/dist/esm/src/utils/elements/Segment.js +2 -3
- package/dist/esm/src/utils/elements/Segment.js.map +1 -1
- package/dist/esm/src/utils/intersections.js.map +1 -1
- package/dist/esm/src/utils/maths.js.map +1 -1
- package/dist/esm/src/utils/strings.js.map +1 -1
- package/dist/esm/src/utils/unicode.js.map +1 -1
- package/dist/esm/src/utils/validators.js.map +1 -1
- package/dist/node/src/api/PDFDocument.js +3 -11
- package/dist/node/src/api/PDFDocument.js.map +1 -1
- package/dist/node/src/api/PDFEmbeddedFile.js.map +1 -1
- package/dist/node/src/api/PDFEmbeddedPage.js.map +1 -1
- package/dist/node/src/api/PDFFont.js.map +1 -1
- package/dist/node/src/api/PDFJavaScript.js.map +1 -1
- package/dist/node/src/api/PDFPage.js +16 -42
- package/dist/node/src/api/PDFPage.js.map +1 -1
- package/dist/node/src/api/colors.js.map +1 -1
- package/dist/node/src/api/errors.js.map +1 -1
- package/dist/node/src/api/form/PDFButton.js +1 -3
- package/dist/node/src/api/form/PDFButton.js.map +1 -1
- package/dist/node/src/api/form/PDFCheckBox.js +1 -3
- package/dist/node/src/api/form/PDFCheckBox.js.map +1 -1
- package/dist/node/src/api/form/PDFDropdown.js +1 -3
- package/dist/node/src/api/form/PDFDropdown.js.map +1 -1
- package/dist/node/src/api/form/PDFField.js +4 -10
- package/dist/node/src/api/form/PDFField.js.map +1 -1
- package/dist/node/src/api/form/PDFForm.js +1 -3
- package/dist/node/src/api/form/PDFForm.js.map +1 -1
- package/dist/node/src/api/form/PDFOptionList.js.map +1 -1
- package/dist/node/src/api/form/PDFRadioGroup.js +1 -3
- package/dist/node/src/api/form/PDFRadioGroup.js.map +1 -1
- package/dist/node/src/api/form/PDFSignature.js +1 -3
- package/dist/node/src/api/form/PDFSignature.js.map +1 -1
- package/dist/node/src/api/form/PDFTextField.js.map +1 -1
- package/dist/node/src/api/form/appearances.js.map +1 -1
- package/dist/node/src/api/operations.js.map +1 -1
- package/dist/node/src/api/operators.js +1 -5
- package/dist/node/src/api/operators.js.map +1 -1
- package/dist/node/src/api/rotations.js.map +1 -1
- package/dist/node/src/api/svg.js +25 -23
- package/dist/node/src/api/svg.js.map +1 -1
- package/dist/node/src/api/svgPath.js +1 -2
- package/dist/node/src/api/svgPath.js.map +1 -1
- package/dist/node/src/api/text/layout.js.map +1 -1
- package/dist/node/src/core/PDFContext.js.map +1 -1
- package/dist/node/src/core/PDFObjectCopier.js.map +1 -1
- package/dist/node/src/core/acroform/PDFAcroButton.js +1 -2
- package/dist/node/src/core/acroform/PDFAcroButton.js.map +1 -1
- package/dist/node/src/core/acroform/PDFAcroCheckBox.js.map +1 -1
- package/dist/node/src/core/acroform/PDFAcroChoice.js.map +1 -1
- package/dist/node/src/core/acroform/PDFAcroComboBox.js.map +1 -1
- package/dist/node/src/core/acroform/PDFAcroField.js.map +1 -1
- package/dist/node/src/core/acroform/PDFAcroForm.js.map +1 -1
- package/dist/node/src/core/acroform/PDFAcroListBox.js.map +1 -1
- package/dist/node/src/core/acroform/PDFAcroNonTerminal.js.map +1 -1
- package/dist/node/src/core/acroform/PDFAcroPushButton.js.map +1 -1
- package/dist/node/src/core/acroform/PDFAcroRadioButton.js.map +1 -1
- package/dist/node/src/core/acroform/PDFAcroSignature.js.map +1 -1
- package/dist/node/src/core/acroform/PDFAcroTerminal.js.map +1 -1
- package/dist/node/src/core/acroform/utils.js.map +1 -1
- package/dist/node/src/core/annotation/PDFWidgetAnnotation.js.map +1 -1
- package/dist/node/src/core/crypto.js +122 -179
- package/dist/node/src/core/crypto.js.map +1 -1
- package/dist/node/src/core/document/PDFCrossRefSection.js.map +1 -1
- package/dist/node/src/core/document/PDFHeader.js.map +1 -1
- package/dist/node/src/core/document/PDFTrailer.js.map +1 -1
- package/dist/node/src/core/embedders/CMap.js.map +1 -1
- package/dist/node/src/core/embedders/CustomFontEmbedder.js +1 -2
- package/dist/node/src/core/embedders/CustomFontEmbedder.js.map +1 -1
- package/dist/node/src/core/embedders/CustomFontSubsetEmbedder.js.map +1 -1
- package/dist/node/src/core/embedders/FileEmbedder.js +3 -7
- package/dist/node/src/core/embedders/FileEmbedder.js.map +1 -1
- package/dist/node/src/core/embedders/JpegEmbedder.js +1 -3
- package/dist/node/src/core/embedders/JpegEmbedder.js.map +1 -1
- package/dist/node/src/core/embedders/PDFPageEmbedder.js +11 -7
- package/dist/node/src/core/embedders/PDFPageEmbedder.js.map +1 -1
- package/dist/node/src/core/embedders/StandardFontEmbedder.js.map +1 -1
- package/dist/node/src/core/errors.js +1 -3
- package/dist/node/src/core/errors.js.map +1 -1
- package/dist/node/src/core/index.js.map +1 -1
- package/dist/node/src/core/interactive/ViewerPreferences.js.map +1 -1
- package/dist/node/src/core/objects/PDFArray.js.map +1 -1
- package/dist/node/src/core/objects/PDFDict.js.map +1 -1
- package/dist/node/src/core/objects/PDFName.js +1 -3
- package/dist/node/src/core/objects/PDFName.js.map +1 -1
- package/dist/node/src/core/objects/PDFRawStream.js.map +1 -1
- package/dist/node/src/core/objects/PDFRef.js.map +1 -1
- package/dist/node/src/core/objects/PDFStream.js.map +1 -1
- package/dist/node/src/core/operators/PDFOperator.js.map +1 -1
- package/dist/node/src/core/parser/PDFObjectParser.js +1 -2
- package/dist/node/src/core/parser/PDFObjectParser.js.map +1 -1
- package/dist/node/src/core/parser/PDFObjectStreamParser.js.map +1 -1
- package/dist/node/src/core/parser/PDFParser.js +1 -2
- package/dist/node/src/core/parser/PDFParser.js.map +1 -1
- package/dist/node/src/core/parser/PDFXRefStreamParser.js.map +1 -1
- package/dist/node/src/core/streams/Ascii85Stream.js.map +1 -1
- package/dist/node/src/core/streams/DecryptStream.js.map +1 -1
- package/dist/node/src/core/streams/FlateStream.js.map +1 -1
- package/dist/node/src/core/streams/LZWStream.js.map +1 -1
- package/dist/node/src/core/streams/Stream.js.map +1 -1
- package/dist/node/src/core/streams/decode.js +1 -1
- package/dist/node/src/core/streams/decode.js.map +1 -1
- package/dist/node/src/core/structures/PDFCatalog.js.map +1 -1
- package/dist/node/src/core/structures/PDFCrossRefStream.js.map +1 -1
- package/dist/node/src/core/structures/PDFFlateStream.js.map +1 -1
- package/dist/node/src/core/structures/PDFObjectStream.js +1 -4
- package/dist/node/src/core/structures/PDFObjectStream.js.map +1 -1
- package/dist/node/src/core/structures/PDFPageLeaf.js +1 -6
- package/dist/node/src/core/structures/PDFPageLeaf.js.map +1 -1
- package/dist/node/src/core/structures/PDFPageTree.js +1 -1
- package/dist/node/src/core/structures/PDFPageTree.js.map +1 -1
- package/dist/node/src/core/syntax/Keywords.js +4 -30
- package/dist/node/src/core/syntax/Keywords.js.map +1 -1
- package/dist/node/src/core/writers/PDFStreamWriter.js.map +1 -1
- package/dist/node/src/core/writers/PDFWriter.js.map +1 -1
- package/dist/node/src/types/matrix.js.map +1 -1
- package/dist/node/src/utils/arrays.js +2 -5
- package/dist/node/src/utils/arrays.js.map +1 -1
- package/dist/node/src/utils/base64.js.map +1 -1
- package/dist/node/src/utils/elements/Arc.js +3 -6
- package/dist/node/src/utils/elements/Arc.js.map +1 -1
- package/dist/node/src/utils/elements/Circle.js.map +1 -1
- package/dist/node/src/utils/elements/Ellipse.js +1 -1
- package/dist/node/src/utils/elements/Ellipse.js.map +1 -1
- package/dist/node/src/utils/elements/Line.js +1 -3
- package/dist/node/src/utils/elements/Line.js.map +1 -1
- package/dist/node/src/utils/elements/Segment.js +1 -2
- package/dist/node/src/utils/elements/Segment.js.map +1 -1
- package/dist/node/src/utils/intersections.js.map +1 -1
- package/dist/node/src/utils/maths.js.map +1 -1
- package/dist/node/src/utils/strings.js.map +1 -1
- package/dist/node/src/utils/unicode.js.map +1 -1
- package/dist/node/src/utils/validators.js.map +1 -1
- package/dist/types/src/api/form/PDFField.d.ts +1 -1
- package/dist/types/src/core/index.d.ts +2 -2
- package/dist/types/src/core/streams/decode.d.ts +1 -1
- package/dist/types/src/core/writers/PDFWriter.d.ts +1 -4
- package/dist/types/src/types/matrix.d.ts +1 -8
- package/package.json +1 -1
- package/src/api/PDFDocument.ts +11 -44
- package/src/api/PDFEmbeddedFile.ts +1 -4
- package/src/api/PDFEmbeddedPage.ts +1 -5
- package/src/api/PDFFont.ts +1 -6
- package/src/api/PDFJavaScript.ts +2 -9
- package/src/api/PDFPage.ts +26 -93
- package/src/api/PDFPageOptions.ts +4 -4
- package/src/api/colors.ts +1 -6
- package/src/api/errors.ts +1 -2
- package/src/api/form/PDFButton.ts +9 -34
- package/src/api/form/PDFCheckBox.ts +4 -19
- package/src/api/form/PDFDropdown.ts +6 -21
- package/src/api/form/PDFField.ts +11 -41
- package/src/api/form/PDFForm.ts +11 -29
- package/src/api/form/PDFOptionList.ts +5 -21
- package/src/api/form/PDFRadioGroup.ts +6 -22
- package/src/api/form/PDFSignature.ts +4 -13
- package/src/api/form/PDFTextField.ts +5 -20
- package/src/api/form/appearances.ts +33 -33
- package/src/api/operations.ts +23 -25
- package/src/api/operators.ts +11 -43
- package/src/api/rotations.ts +1 -4
- package/src/api/svg.ts +145 -195
- package/src/api/svgPath.ts +5 -32
- package/src/api/text/layout.ts +3 -18
- package/src/core/PDFContext.ts +10 -36
- package/src/core/PDFObjectCopier.ts +1 -2
- package/src/core/acroform/PDFAcroButton.ts +3 -13
- package/src/core/acroform/PDFAcroCheckBox.ts +1 -2
- package/src/core/acroform/PDFAcroChoice.ts +2 -9
- package/src/core/acroform/PDFAcroComboBox.ts +1 -2
- package/src/core/acroform/PDFAcroField.ts +1 -2
- package/src/core/acroform/PDFAcroForm.ts +2 -5
- package/src/core/acroform/PDFAcroListBox.ts +1 -2
- package/src/core/acroform/PDFAcroNonTerminal.ts +1 -2
- package/src/core/acroform/PDFAcroPushButton.ts +1 -2
- package/src/core/acroform/PDFAcroRadioButton.ts +1 -2
- package/src/core/acroform/PDFAcroSignature.ts +1 -2
- package/src/core/acroform/PDFAcroTerminal.ts +1 -2
- package/src/core/acroform/utils.ts +3 -9
- package/src/core/annotation/PDFWidgetAnnotation.ts +1 -2
- package/src/core/crypto.ts +143 -287
- package/src/core/document/PDFCrossRefSection.ts +3 -15
- package/src/core/document/PDFHeader.ts +1 -2
- package/src/core/document/PDFTrailer.ts +1 -2
- package/src/core/embedders/CMap.ts +1 -6
- package/src/core/embedders/CustomFontEmbedder.ts +4 -16
- package/src/core/embedders/CustomFontSubsetEmbedder.ts +2 -13
- package/src/core/embedders/FileEmbedder.ts +5 -23
- package/src/core/embedders/JpegEmbedder.ts +2 -11
- package/src/core/embedders/PDFPageEmbedder.ts +12 -14
- package/src/core/embedders/StandardFontEmbedder.ts +3 -12
- package/src/core/errors.ts +1 -3
- package/src/core/index.ts +2 -8
- package/src/core/interactive/ViewerPreferences.ts +4 -18
- package/src/core/objects/PDFArray.ts +2 -8
- package/src/core/objects/PDFDict.ts +3 -11
- package/src/core/objects/PDFName.ts +2 -9
- package/src/core/objects/PDFRawStream.ts +3 -10
- package/src/core/objects/PDFRef.ts +1 -5
- package/src/core/objects/PDFStream.ts +2 -8
- package/src/core/operators/PDFOperator.ts +2 -9
- package/src/core/parser/PDFObjectParser.ts +5 -14
- package/src/core/parser/PDFObjectStreamParser.ts +2 -4
- package/src/core/parser/PDFParser.ts +5 -21
- package/src/core/parser/PDFXRefStreamParser.ts +1 -2
- package/src/core/streams/Ascii85Stream.ts +1 -2
- package/src/core/streams/DecryptStream.ts +2 -9
- package/src/core/streams/FlateStream.ts +4 -14
- package/src/core/streams/LZWStream.ts +2 -9
- package/src/core/streams/Stream.ts +2 -8
- package/src/core/streams/decode.ts +2 -10
- package/src/core/structures/PDFCatalog.ts +2 -6
- package/src/core/structures/PDFCrossRefStream.ts +2 -10
- package/src/core/structures/PDFFlateStream.ts +1 -4
- package/src/core/structures/PDFObjectStream.ts +4 -14
- package/src/core/structures/PDFPageLeaf.ts +9 -28
- package/src/core/structures/PDFPageTree.ts +2 -5
- package/src/core/syntax/Keywords.ts +4 -30
- package/src/core/writers/PDFStreamWriter.ts +2 -11
- package/src/core/writers/PDFWriter.ts +2 -6
- package/src/types/fontkit.ts +3 -16
- package/src/types/index.ts +6 -14
- package/src/types/matrix.ts +1 -8
- package/src/utils/arrays.ts +3 -8
- package/src/utils/base64.ts +2 -4
- package/src/utils/elements/Arc.ts +5 -15
- package/src/utils/elements/Circle.ts +1 -9
- package/src/utils/elements/Ellipse.ts +6 -24
- package/src/utils/elements/Line.ts +1 -3
- package/src/utils/elements/Segment.ts +3 -14
- package/src/utils/intersections.ts +20 -65
- package/src/utils/maths.ts +10 -22
- package/src/utils/strings.ts +6 -16
- package/src/utils/unicode.ts +9 -22
- package/src/utils/validators.ts +9 -45
package/src/api/svg.ts
CHANGED
|
@@ -6,15 +6,12 @@ import {
|
|
|
6
6
|
NodeType,
|
|
7
7
|
} from 'node-html-better-parser';
|
|
8
8
|
import { Color, colorString } from './colors';
|
|
9
|
-
import {
|
|
10
|
-
Degrees,
|
|
11
|
-
degreesToRadians,
|
|
12
|
-
} from './rotations';
|
|
9
|
+
import { Degrees, degreesToRadians } from './rotations';
|
|
13
10
|
import PDFFont from './PDFFont';
|
|
14
11
|
import PDFPage from './PDFPage';
|
|
15
12
|
import { PDFPageDrawSVGElementOptions } from './PDFPageOptions';
|
|
16
13
|
import { LineCapStyle, LineJoinStyle, FillRule } from './operators';
|
|
17
|
-
import { TransformationMatrix,
|
|
14
|
+
import { TransformationMatrix, identityMatrix } from '../types/matrix';
|
|
18
15
|
import { Coordinates, Space } from '../types';
|
|
19
16
|
|
|
20
17
|
interface Position {
|
|
@@ -77,9 +74,9 @@ type SVGAttributes = {
|
|
|
77
74
|
};
|
|
78
75
|
|
|
79
76
|
type TransformAttributes = {
|
|
80
|
-
matrix: TransformationMatrix
|
|
81
|
-
clipSpaces: Space[]
|
|
82
|
-
}
|
|
77
|
+
matrix: TransformationMatrix;
|
|
78
|
+
clipSpaces: Space[];
|
|
79
|
+
};
|
|
83
80
|
|
|
84
81
|
export type SVGElement = HTMLElement & {
|
|
85
82
|
svgAttributes: InheritedAttributes & SVGAttributes & TransformAttributes;
|
|
@@ -91,7 +88,7 @@ interface SVGElementToDrawMap {
|
|
|
91
88
|
|
|
92
89
|
const combineMatrix = (
|
|
93
90
|
[a, b, c, d, e, f]: TransformationMatrix,
|
|
94
|
-
[a2, b2, c2, d2, e2, f2]: TransformationMatrix
|
|
91
|
+
[a2, b2, c2, d2, e2, f2]: TransformationMatrix,
|
|
95
92
|
): TransformationMatrix => [
|
|
96
93
|
a * a2 + c * b2,
|
|
97
94
|
b * a2 + d * b2,
|
|
@@ -99,66 +96,89 @@ const combineMatrix = (
|
|
|
99
96
|
b * c2 + d * d2,
|
|
100
97
|
a * e2 + c * f2 + e,
|
|
101
98
|
b * e2 + d * f2 + f,
|
|
102
|
-
]
|
|
99
|
+
];
|
|
103
100
|
|
|
104
|
-
const applyTransformation = (
|
|
101
|
+
const applyTransformation = (
|
|
102
|
+
[a, b, c, d, e, f]: TransformationMatrix,
|
|
103
|
+
{ x, y }: Coordinates,
|
|
104
|
+
): Coordinates => ({
|
|
105
105
|
x: a * x + c * y + e,
|
|
106
|
-
y: b * x + d * y + f
|
|
107
|
-
})
|
|
108
|
-
|
|
106
|
+
y: b * x + d * y + f,
|
|
107
|
+
});
|
|
109
108
|
|
|
110
|
-
type TransformationName =
|
|
111
|
-
|
|
109
|
+
type TransformationName =
|
|
110
|
+
| 'scale'
|
|
111
|
+
| 'scaleX'
|
|
112
|
+
| 'scaleY'
|
|
113
|
+
| 'translate'
|
|
114
|
+
| 'translateX'
|
|
115
|
+
| 'translateY'
|
|
116
|
+
| 'rotate'
|
|
117
|
+
| 'skewX'
|
|
118
|
+
| 'skewY'
|
|
119
|
+
| 'matrix';
|
|
120
|
+
const transformationToMatrix = (name: TransformationName, args: number[]): TransformationMatrix => {
|
|
112
121
|
switch (name) {
|
|
113
122
|
case 'scale':
|
|
114
123
|
case 'scaleX':
|
|
115
124
|
case 'scaleY': {
|
|
116
125
|
// [sx 0 0 sy 0 0]
|
|
117
|
-
const [sx, sy = sx] = args
|
|
118
|
-
return [name === 'scaleY' ? 1 : sx, 0, 0, name === 'scaleX' ? 1 : sy, 0, 0]
|
|
126
|
+
const [sx, sy = sx] = args;
|
|
127
|
+
return [name === 'scaleY' ? 1 : sx, 0, 0, name === 'scaleX' ? 1 : sy, 0, 0];
|
|
119
128
|
}
|
|
120
129
|
case 'translate':
|
|
121
130
|
case 'translateX':
|
|
122
131
|
case 'translateY': {
|
|
123
132
|
// [1 0 0 1 tx ty]
|
|
124
|
-
const [tx, ty = tx] = args
|
|
133
|
+
const [tx, ty = tx] = args;
|
|
125
134
|
// -ty is necessary because the pdf's y axis is inverted
|
|
126
|
-
return [1, 0, 0, 1, name === 'translateY' ? 0 : tx, name === 'translateX' ? 0 : -ty]
|
|
135
|
+
return [1, 0, 0, 1, name === 'translateY' ? 0 : tx, name === 'translateX' ? 0 : -ty];
|
|
127
136
|
}
|
|
128
137
|
case 'rotate': {
|
|
129
138
|
// [cos(a) sin(a) -sin(a) cos(a) 0 0]
|
|
130
|
-
const [a, x = 0, y = 0] = args
|
|
131
|
-
const t1 = transformationToMatrix('translate', [x, y])
|
|
132
|
-
const t2 = transformationToMatrix('translate', [-x, -y])
|
|
139
|
+
const [a, x = 0, y = 0] = args;
|
|
140
|
+
const t1 = transformationToMatrix('translate', [x, y]);
|
|
141
|
+
const t2 = transformationToMatrix('translate', [-x, -y]);
|
|
133
142
|
// -args[0] -> the '-' operator is necessary because the pdf rotation system is inverted
|
|
134
|
-
const aRadians = degreesToRadians(-a)
|
|
135
|
-
const r: TransformationMatrix = [
|
|
143
|
+
const aRadians = degreesToRadians(-a);
|
|
144
|
+
const r: TransformationMatrix = [
|
|
145
|
+
Math.cos(aRadians),
|
|
146
|
+
Math.sin(aRadians),
|
|
147
|
+
-Math.sin(aRadians),
|
|
148
|
+
Math.cos(aRadians),
|
|
149
|
+
0,
|
|
150
|
+
0,
|
|
151
|
+
];
|
|
136
152
|
// rotation around a point is the combination of: translate * rotate * (-translate)
|
|
137
|
-
return combineMatrix(combineMatrix(t1, r), t2)
|
|
153
|
+
return combineMatrix(combineMatrix(t1, r), t2);
|
|
138
154
|
}
|
|
139
155
|
case 'skewY':
|
|
140
156
|
case 'skewX': {
|
|
141
157
|
// [1 tan(a) 0 1 0 0]
|
|
142
158
|
// [1 0 tan(a) 1 0 0]
|
|
143
159
|
// -args[0] -> the '-' operator is necessary because the pdf rotation system is inverted
|
|
144
|
-
const a = degreesToRadians(-args[0])
|
|
145
|
-
const skew = Math.tan(a)
|
|
146
|
-
const skewX = name === 'skewX' ? skew : 0
|
|
147
|
-
const skewY = name === 'skewY' ? skew : 0
|
|
148
|
-
return [1, skewY, skewX, 1, 0, 0]
|
|
160
|
+
const a = degreesToRadians(-args[0]);
|
|
161
|
+
const skew = Math.tan(a);
|
|
162
|
+
const skewX = name === 'skewX' ? skew : 0;
|
|
163
|
+
const skewY = name === 'skewY' ? skew : 0;
|
|
164
|
+
return [1, skewY, skewX, 1, 0, 0];
|
|
149
165
|
}
|
|
150
166
|
case 'matrix': {
|
|
151
|
-
const [a, b, c, d, e, f] = args
|
|
152
|
-
const r = transformationToMatrix('scale', [1, -1])
|
|
153
|
-
const m: TransformationMatrix = [a, b, c, d, e, f]
|
|
154
|
-
return combineMatrix(combineMatrix(r, m), r)
|
|
167
|
+
const [a, b, c, d, e, f] = args;
|
|
168
|
+
const r = transformationToMatrix('scale', [1, -1]);
|
|
169
|
+
const m: TransformationMatrix = [a, b, c, d, e, f];
|
|
170
|
+
return combineMatrix(combineMatrix(r, m), r);
|
|
155
171
|
}
|
|
156
172
|
default:
|
|
157
|
-
return identityMatrix
|
|
173
|
+
return identityMatrix;
|
|
158
174
|
}
|
|
159
|
-
}
|
|
175
|
+
};
|
|
160
176
|
|
|
161
|
-
const combineTransformation = (
|
|
177
|
+
const combineTransformation = (
|
|
178
|
+
matrix: TransformationMatrix,
|
|
179
|
+
name: TransformationName,
|
|
180
|
+
args: number[],
|
|
181
|
+
) => combineMatrix(matrix, transformationToMatrix(name, args));
|
|
162
182
|
|
|
163
183
|
const StrokeLineCapMap: Record<string, LineCapStyle> = {
|
|
164
184
|
butt: LineCapStyle.Butt,
|
|
@@ -168,7 +188,7 @@ const StrokeLineCapMap: Record<string, LineCapStyle> = {
|
|
|
168
188
|
|
|
169
189
|
const FillRuleMap: Record<string, FillRule> = {
|
|
170
190
|
evenodd: FillRule.EvenOdd,
|
|
171
|
-
nonzero: FillRule.NonZero
|
|
191
|
+
nonzero: FillRule.NonZero,
|
|
172
192
|
};
|
|
173
193
|
|
|
174
194
|
const StrokeLineJoinMap: Record<string, LineJoinStyle> = {
|
|
@@ -184,20 +204,16 @@ const runnersToPage = (
|
|
|
184
204
|
options: PDFPageDrawSVGElementOptions,
|
|
185
205
|
): SVGElementToDrawMap => ({
|
|
186
206
|
async text(element) {
|
|
187
|
-
const anchor = element.svgAttributes.textAnchor;
|
|
188
|
-
const dominantBaseline = element.svgAttributes.dominantBaseline
|
|
207
|
+
const anchor = element.svgAttributes.textAnchor;
|
|
208
|
+
const dominantBaseline = element.svgAttributes.dominantBaseline;
|
|
189
209
|
const text = element.text.trim().replace(/\s/g, ' ');
|
|
190
210
|
const fontSize = element.svgAttributes.fontSize || 12;
|
|
191
211
|
|
|
192
212
|
/** This will find the best font for the provided style in the list */
|
|
193
|
-
function getBestFont(
|
|
194
|
-
style: InheritedAttributes,
|
|
195
|
-
fonts: { [fontName: string]: PDFFont },
|
|
196
|
-
) {
|
|
213
|
+
function getBestFont(style: InheritedAttributes, fonts: { [fontName: string]: PDFFont }) {
|
|
197
214
|
const family = style.fontFamily;
|
|
198
215
|
if (!family) return undefined;
|
|
199
|
-
const isBold =
|
|
200
|
-
style.fontWeight === 'bold' || Number(style.fontWeight) >= 700;
|
|
216
|
+
const isBold = style.fontWeight === 'bold' || Number(style.fontWeight) >= 700;
|
|
201
217
|
const isItalic = style.fontStyle === 'italic';
|
|
202
218
|
const getFont = (bold: boolean, italic: boolean, family: string) =>
|
|
203
219
|
fonts[family + (bold ? '_bold' : '') + (italic ? '_italic' : '')];
|
|
@@ -210,25 +226,20 @@ const anchor = element.svgAttributes.textAnchor;
|
|
|
210
226
|
);
|
|
211
227
|
}
|
|
212
228
|
|
|
213
|
-
const font =
|
|
214
|
-
|
|
215
|
-
const textWidth = (font || page.getFont()[0]).widthOfTextAtSize(
|
|
216
|
-
text,
|
|
217
|
-
fontSize,
|
|
218
|
-
);
|
|
229
|
+
const font = options.fonts && getBestFont(element.svgAttributes, options.fonts);
|
|
230
|
+
const textWidth = (font || page.getFont()[0]).widthOfTextAtSize(text, fontSize);
|
|
219
231
|
|
|
220
|
-
const textHeight = (font || page.getFont()[0]).heightAtSize(fontSize)
|
|
221
|
-
const offsetX =
|
|
222
|
-
anchor === 'middle' ? textWidth / 2 : anchor === 'end' ? textWidth : 0;
|
|
232
|
+
const textHeight = (font || page.getFont()[0]).heightAtSize(fontSize);
|
|
233
|
+
const offsetX = anchor === 'middle' ? textWidth / 2 : anchor === 'end' ? textWidth : 0;
|
|
223
234
|
|
|
224
235
|
const offsetY =
|
|
225
236
|
dominantBaseline === 'text-before-edge'
|
|
226
237
|
? textHeight
|
|
227
238
|
: dominantBaseline === 'text-after-edge'
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
239
|
+
? -textHeight
|
|
240
|
+
: dominantBaseline === 'middle'
|
|
241
|
+
? textHeight / 2
|
|
242
|
+
: 0;
|
|
232
243
|
|
|
233
244
|
page.drawText(text, {
|
|
234
245
|
x: -offsetX,
|
|
@@ -261,7 +272,7 @@ const textWidth = (font || page.getFont()[0]).widthOfTextAtSize(
|
|
|
261
272
|
});
|
|
262
273
|
},
|
|
263
274
|
async path(element) {
|
|
264
|
-
if (!element.svgAttributes.d) return
|
|
275
|
+
if (!element.svgAttributes.d) return;
|
|
265
276
|
// See https://jsbin.com/kawifomupa/edit?html,output and
|
|
266
277
|
page.drawSvgPath(element.svgAttributes.d, {
|
|
267
278
|
x: 0,
|
|
@@ -281,9 +292,7 @@ const textWidth = (font || page.getFont()[0]).widthOfTextAtSize(
|
|
|
281
292
|
const { src } = element.svgAttributes;
|
|
282
293
|
if (!src) return;
|
|
283
294
|
const isPng = src.match(/\.png(\?|$)|^data:image\/png;base64/gim);
|
|
284
|
-
const img = isPng
|
|
285
|
-
? await page.doc.embedPng(src)
|
|
286
|
-
: await page.doc.embedJpg(src);
|
|
295
|
+
const img = isPng ? await page.doc.embedPng(src) : await page.doc.embedJpg(src);
|
|
287
296
|
|
|
288
297
|
const { x, y, width, height } = getFittingRectangle(
|
|
289
298
|
img.width,
|
|
@@ -396,26 +405,10 @@ const parseAttributes = (
|
|
|
396
405
|
const fillOpacityRaw = styleOrAttribute(attributes, style, 'fill-opacity');
|
|
397
406
|
const opacityRaw = styleOrAttribute(attributes, style, 'opacity');
|
|
398
407
|
const strokeRaw = parseColor(styleOrAttribute(attributes, style, 'stroke'));
|
|
399
|
-
const strokeOpacityRaw = styleOrAttribute(
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
);
|
|
404
|
-
const strokeLineCapRaw = styleOrAttribute(
|
|
405
|
-
attributes,
|
|
406
|
-
style,
|
|
407
|
-
'stroke-linecap',
|
|
408
|
-
);
|
|
409
|
-
const strokeLineJoinRaw = styleOrAttribute(
|
|
410
|
-
attributes,
|
|
411
|
-
style,
|
|
412
|
-
'stroke-linejoin',
|
|
413
|
-
);
|
|
414
|
-
const fillRuleRaw = styleOrAttribute(
|
|
415
|
-
attributes,
|
|
416
|
-
style,
|
|
417
|
-
'fill-rule',
|
|
418
|
-
);
|
|
408
|
+
const strokeOpacityRaw = styleOrAttribute(attributes, style, 'stroke-opacity');
|
|
409
|
+
const strokeLineCapRaw = styleOrAttribute(attributes, style, 'stroke-linecap');
|
|
410
|
+
const strokeLineJoinRaw = styleOrAttribute(attributes, style, 'stroke-linejoin');
|
|
411
|
+
const fillRuleRaw = styleOrAttribute(attributes, style, 'fill-rule');
|
|
419
412
|
const strokeWidthRaw = styleOrAttribute(attributes, style, 'stroke-width');
|
|
420
413
|
const fontFamilyRaw = styleOrAttribute(attributes, style, 'font-family');
|
|
421
414
|
const fontStyleRaw = styleOrAttribute(attributes, style, 'font-style');
|
|
@@ -442,18 +435,15 @@ const parseAttributes = (
|
|
|
442
435
|
fontSize: parseFloatValue(fontSizeRaw) ?? inherited.fontSize,
|
|
443
436
|
fill: fillRaw?.rgb || inherited.fill,
|
|
444
437
|
fillOpacity:
|
|
445
|
-
parseFloatValue(fillOpacityRaw || opacityRaw || fillRaw?.alpha) ??
|
|
446
|
-
inherited.fillOpacity,
|
|
438
|
+
parseFloatValue(fillOpacityRaw || opacityRaw || fillRaw?.alpha) ?? inherited.fillOpacity,
|
|
447
439
|
fillRule: FillRuleMap[fillRuleRaw] || inherited.fillRule,
|
|
448
440
|
stroke: strokeRaw?.rgb || inherited.stroke,
|
|
449
441
|
strokeWidth: parseFloatValue(strokeWidthRaw) ?? inherited.strokeWidth,
|
|
450
442
|
strokeOpacity:
|
|
451
443
|
parseFloatValue(strokeOpacityRaw || opacityRaw || strokeRaw?.alpha) ??
|
|
452
444
|
inherited.strokeOpacity,
|
|
453
|
-
strokeLineCap:
|
|
454
|
-
|
|
455
|
-
strokeLineJoin:
|
|
456
|
-
StrokeLineJoinMap[strokeLineJoinRaw] || inherited.strokeLineJoin,
|
|
445
|
+
strokeLineCap: StrokeLineCapMap[strokeLineCapRaw] || inherited.strokeLineCap,
|
|
446
|
+
strokeLineJoin: StrokeLineJoinMap[strokeLineJoinRaw] || inherited.strokeLineJoin,
|
|
457
447
|
width: width || inherited.width,
|
|
458
448
|
height: height || inherited.height,
|
|
459
449
|
rotation: inherited.rotation,
|
|
@@ -493,7 +483,7 @@ const parseAttributes = (
|
|
|
493
483
|
if (x || y) {
|
|
494
484
|
transformList = transformList + `translate(${x || 0} ${y || 0}) `;
|
|
495
485
|
}
|
|
496
|
-
let newMatrix = matrix
|
|
486
|
+
let newMatrix = matrix;
|
|
497
487
|
// Apply the transformations
|
|
498
488
|
if (transformList) {
|
|
499
489
|
const regexTransform = /(\w+)\((.+?)\)/g;
|
|
@@ -504,7 +494,7 @@ const parseAttributes = (
|
|
|
504
494
|
.split(/\s*,\s*|\s+/)
|
|
505
495
|
.filter((value) => value.length > 0)
|
|
506
496
|
.map((value) => parseFloat(value));
|
|
507
|
-
newMatrix = combineTransformation(newMatrix, name as TransformationName, args)
|
|
497
|
+
newMatrix = combineTransformation(newMatrix, name as TransformationName, args);
|
|
508
498
|
parsed = regexTransform.exec(transformList);
|
|
509
499
|
}
|
|
510
500
|
}
|
|
@@ -529,17 +519,17 @@ const parseAttributes = (
|
|
|
529
519
|
svgAttributes.y2 = y2;
|
|
530
520
|
}
|
|
531
521
|
if (attributes.width || attributes.height) {
|
|
532
|
-
svgAttributes.width = width ?? inherited.width
|
|
533
|
-
svgAttributes.height = height ?? inherited.height
|
|
522
|
+
svgAttributes.width = width ?? inherited.width;
|
|
523
|
+
svgAttributes.height = height ?? inherited.height;
|
|
534
524
|
}
|
|
535
525
|
|
|
536
526
|
if (attributes.d) {
|
|
537
|
-
newMatrix = combineTransformation(newMatrix, 'scale', [1, -1])
|
|
538
|
-
svgAttributes.d = attributes.d
|
|
527
|
+
newMatrix = combineTransformation(newMatrix, 'scale', [1, -1]);
|
|
528
|
+
svgAttributes.d = attributes.d;
|
|
539
529
|
}
|
|
540
530
|
|
|
541
531
|
if (fontSizeRaw && newInherited.fontSize) {
|
|
542
|
-
newInherited.fontSize = newInherited.fontSize
|
|
532
|
+
newInherited.fontSize = newInherited.fontSize;
|
|
543
533
|
}
|
|
544
534
|
if (newInherited.fontFamily) {
|
|
545
535
|
// Handle complex fontFamily like `"Linux Libertine O", serif`
|
|
@@ -548,7 +538,7 @@ const parseAttributes = (
|
|
|
548
538
|
}
|
|
549
539
|
|
|
550
540
|
if (newInherited.strokeWidth) {
|
|
551
|
-
svgAttributes.strokeWidth = newInherited.strokeWidth
|
|
541
|
+
svgAttributes.strokeWidth = newInherited.strokeWidth;
|
|
552
542
|
}
|
|
553
543
|
|
|
554
544
|
return {
|
|
@@ -571,10 +561,8 @@ const getFittingRectangle = (
|
|
|
571
561
|
}
|
|
572
562
|
const originalRatio = originalWidth / originalHeight;
|
|
573
563
|
const targetRatio = targetWidth / targetHeight;
|
|
574
|
-
const width =
|
|
575
|
-
|
|
576
|
-
const height =
|
|
577
|
-
targetRatio >= originalRatio ? targetHeight : targetWidth / originalRatio;
|
|
564
|
+
const width = targetRatio > originalRatio ? originalRatio * targetHeight : targetWidth;
|
|
565
|
+
const height = targetRatio >= originalRatio ? targetHeight : targetWidth / originalRatio;
|
|
578
566
|
const dx = targetWidth - width;
|
|
579
567
|
const dy = targetHeight - height;
|
|
580
568
|
const [x, y] = (() => {
|
|
@@ -611,30 +599,22 @@ const getAspectRatioTransformation = (
|
|
|
611
599
|
targetHeight: number,
|
|
612
600
|
preserveAspectRatio?: string,
|
|
613
601
|
): {
|
|
614
|
-
clipBox: TransformationMatrix
|
|
615
|
-
content: TransformationMatrix
|
|
602
|
+
clipBox: TransformationMatrix;
|
|
603
|
+
content: TransformationMatrix;
|
|
616
604
|
} => {
|
|
617
|
-
const scaleX = targetWidth / originalWidth
|
|
618
|
-
const scaleY = targetHeight / originalHeight
|
|
619
|
-
const boxScale = combineTransformation(
|
|
620
|
-
matrix,
|
|
621
|
-
'scale',
|
|
622
|
-
[
|
|
623
|
-
scaleX,
|
|
624
|
-
scaleY
|
|
625
|
-
]
|
|
626
|
-
)
|
|
605
|
+
const scaleX = targetWidth / originalWidth;
|
|
606
|
+
const scaleY = targetHeight / originalHeight;
|
|
607
|
+
const boxScale = combineTransformation(matrix, 'scale', [scaleX, scaleY]);
|
|
627
608
|
if (preserveAspectRatio === 'none') {
|
|
628
609
|
return {
|
|
629
610
|
clipBox: boxScale,
|
|
630
|
-
content: boxScale
|
|
631
|
-
}
|
|
611
|
+
content: boxScale,
|
|
612
|
+
};
|
|
632
613
|
}
|
|
633
614
|
// TODO: the following code works for the 'meet' param but not for the 'slice'
|
|
634
|
-
const scale =
|
|
635
|
-
|
|
636
|
-
const
|
|
637
|
-
const dy = targetHeight - (originalHeight * scale)
|
|
615
|
+
const scale = targetWidth > targetHeight ? scaleY : scaleX;
|
|
616
|
+
const dx = targetWidth - originalWidth * scale;
|
|
617
|
+
const dy = targetHeight - originalHeight * scale;
|
|
638
618
|
const [x, y] = (() => {
|
|
639
619
|
switch (preserveAspectRatio) {
|
|
640
620
|
case 'xMinYMin':
|
|
@@ -660,23 +640,17 @@ const getAspectRatioTransformation = (
|
|
|
660
640
|
})();
|
|
661
641
|
|
|
662
642
|
const contentTransform = combineTransformation(
|
|
663
|
-
combineTransformation(
|
|
664
|
-
matrix,
|
|
665
|
-
'translate',
|
|
666
|
-
[x, y]
|
|
667
|
-
),
|
|
643
|
+
combineTransformation(matrix, 'translate', [x, y]),
|
|
668
644
|
'scale',
|
|
669
|
-
[scale]
|
|
670
|
-
)
|
|
645
|
+
[scale],
|
|
646
|
+
);
|
|
671
647
|
|
|
672
648
|
return {
|
|
673
649
|
clipBox: boxScale,
|
|
674
|
-
content: contentTransform
|
|
675
|
-
}
|
|
676
|
-
|
|
650
|
+
content: contentTransform,
|
|
651
|
+
};
|
|
677
652
|
};
|
|
678
653
|
|
|
679
|
-
|
|
680
654
|
const parseHTMLNode = (
|
|
681
655
|
node: Node,
|
|
682
656
|
inherited: InheritedAttributes,
|
|
@@ -686,19 +660,9 @@ const parseHTMLNode = (
|
|
|
686
660
|
if (node.nodeType === NodeType.COMMENT_NODE) return [];
|
|
687
661
|
else if (node.nodeType === NodeType.TEXT_NODE) return [];
|
|
688
662
|
else if (node.tagName === 'g') {
|
|
689
|
-
return parseGroupNode(
|
|
690
|
-
node as HTMLElement & { tagName: 'g' },
|
|
691
|
-
inherited,
|
|
692
|
-
matrix,
|
|
693
|
-
clipSpaces,
|
|
694
|
-
);
|
|
663
|
+
return parseGroupNode(node as HTMLElement & { tagName: 'g' }, inherited, matrix, clipSpaces);
|
|
695
664
|
} else if (node.tagName === 'svg') {
|
|
696
|
-
return parseSvgNode(
|
|
697
|
-
node as HTMLElement & { tagName: 'svg' },
|
|
698
|
-
inherited,
|
|
699
|
-
matrix,
|
|
700
|
-
clipSpaces,
|
|
701
|
-
);
|
|
665
|
+
return parseSvgNode(node as HTMLElement & { tagName: 'svg' }, inherited, matrix, clipSpaces);
|
|
702
666
|
} else {
|
|
703
667
|
if (node.tagName === 'polygon') {
|
|
704
668
|
node.tagName = 'path';
|
|
@@ -710,7 +674,7 @@ const parseHTMLNode = (
|
|
|
710
674
|
...attributes.inherited,
|
|
711
675
|
...attributes.svgAttributes,
|
|
712
676
|
matrix: attributes.matrix,
|
|
713
|
-
clipSpaces
|
|
677
|
+
clipSpaces,
|
|
714
678
|
};
|
|
715
679
|
Object.assign(node, { svgAttributes });
|
|
716
680
|
return [node as SVGElement];
|
|
@@ -724,10 +688,8 @@ const parseSvgNode = (
|
|
|
724
688
|
clipSpaces: Space[],
|
|
725
689
|
): SVGElement[] => {
|
|
726
690
|
// if the width/height aren't set, the svg will have the same dimension as the current drawing space
|
|
727
|
-
node.attributes.width ??
|
|
728
|
-
|
|
729
|
-
node.attributes.height ??
|
|
730
|
-
node.setAttribute('height', inherited.viewBox.height + '');
|
|
691
|
+
node.attributes.width ?? node.setAttribute('width', inherited.viewBox.width + '');
|
|
692
|
+
node.attributes.height ?? node.setAttribute('height', inherited.viewBox.height + '');
|
|
731
693
|
const attributes = parseAttributes(node, inherited, matrix);
|
|
732
694
|
const result: SVGElement[] = [];
|
|
733
695
|
const viewBox = node.attributes.viewBox
|
|
@@ -735,59 +697,56 @@ const parseSvgNode = (
|
|
|
735
697
|
: node.attributes.width && node.attributes.height
|
|
736
698
|
? parseViewBox(`0 0 ${node.attributes.width} ${node.attributes.height}`)!
|
|
737
699
|
: inherited.viewBox;
|
|
738
|
-
const x = parseFloat(node.attributes.x) || 0
|
|
739
|
-
const y = parseFloat(node.attributes.y) || 0
|
|
740
|
-
|
|
741
|
-
let newMatrix = combineTransformation(matrix, 'translate', [x, y])
|
|
742
|
-
|
|
743
|
-
const { clipBox: clipBoxTransform, content: contentTransform } =
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
)
|
|
700
|
+
const x = parseFloat(node.attributes.x) || 0;
|
|
701
|
+
const y = parseFloat(node.attributes.y) || 0;
|
|
702
|
+
|
|
703
|
+
let newMatrix = combineTransformation(matrix, 'translate', [x, y]);
|
|
704
|
+
|
|
705
|
+
const { clipBox: clipBoxTransform, content: contentTransform } = getAspectRatioTransformation(
|
|
706
|
+
newMatrix,
|
|
707
|
+
viewBox.width,
|
|
708
|
+
viewBox.height,
|
|
709
|
+
parseFloat(node.attributes.width),
|
|
710
|
+
parseFloat(node.attributes.height),
|
|
711
|
+
node.attributes.preserveAspectRatio || 'xMidYMid',
|
|
712
|
+
);
|
|
752
713
|
|
|
753
714
|
const topLeft = applyTransformation(clipBoxTransform, {
|
|
754
715
|
x: 0,
|
|
755
716
|
y: 0,
|
|
756
|
-
})
|
|
757
|
-
|
|
717
|
+
});
|
|
718
|
+
|
|
758
719
|
const topRight = applyTransformation(clipBoxTransform, {
|
|
759
720
|
x: viewBox.width,
|
|
760
721
|
y: 0,
|
|
761
|
-
})
|
|
762
|
-
|
|
722
|
+
});
|
|
723
|
+
|
|
763
724
|
const bottomRight = applyTransformation(clipBoxTransform, {
|
|
764
725
|
x: viewBox.width,
|
|
765
726
|
y: -viewBox.height,
|
|
766
|
-
})
|
|
727
|
+
});
|
|
767
728
|
|
|
768
729
|
const bottomLeft = applyTransformation(clipBoxTransform, {
|
|
769
730
|
x: 0,
|
|
770
731
|
y: -viewBox.height,
|
|
771
|
-
})
|
|
732
|
+
});
|
|
772
733
|
|
|
773
734
|
const baseClipSpace: Space = {
|
|
774
735
|
topLeft,
|
|
775
736
|
topRight,
|
|
776
737
|
bottomRight,
|
|
777
|
-
bottomLeft
|
|
778
|
-
}
|
|
738
|
+
bottomLeft,
|
|
739
|
+
};
|
|
779
740
|
|
|
780
741
|
// TODO: maybe this is the correct transformation
|
|
781
742
|
// newMatrix = combineTransformation(newMatrix, 'translate', [-baseClipSpace.xMin, -baseClipSpace.yMin])
|
|
782
|
-
newMatrix = combineTransformation(contentTransform, 'translate', [-viewBox.x, -viewBox.y])
|
|
743
|
+
newMatrix = combineTransformation(contentTransform, 'translate', [-viewBox.x, -viewBox.y]);
|
|
783
744
|
|
|
784
745
|
node.childNodes.forEach((child) => {
|
|
785
|
-
const parsedNodes = parseHTMLNode(
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
[...clipSpaces, baseClipSpace],
|
|
790
|
-
)
|
|
746
|
+
const parsedNodes = parseHTMLNode(child, { ...attributes.inherited, viewBox }, newMatrix, [
|
|
747
|
+
...clipSpaces,
|
|
748
|
+
baseClipSpace,
|
|
749
|
+
]);
|
|
791
750
|
result.push(...parsedNodes);
|
|
792
751
|
});
|
|
793
752
|
return result;
|
|
@@ -802,9 +761,7 @@ const parseGroupNode = (
|
|
|
802
761
|
const attributes = parseAttributes(node, inherited, matrix);
|
|
803
762
|
const result: SVGElement[] = [];
|
|
804
763
|
node.childNodes.forEach((child) => {
|
|
805
|
-
result.push(
|
|
806
|
-
...parseHTMLNode(child, attributes.inherited, attributes.matrix, clipSpaces),
|
|
807
|
-
);
|
|
764
|
+
result.push(...parseHTMLNode(child, attributes.inherited, attributes.matrix, clipSpaces));
|
|
808
765
|
});
|
|
809
766
|
return result;
|
|
810
767
|
};
|
|
@@ -819,9 +776,7 @@ const parseFloatValue = (value?: string, reference = 1) => {
|
|
|
819
776
|
|
|
820
777
|
const parseViewBox = (viewBox?: string): Box | undefined => {
|
|
821
778
|
if (!viewBox) return;
|
|
822
|
-
const [xViewBox = 0, yViewBox = 0, widthViewBox = 1, heightViewBox = 1] = (
|
|
823
|
-
viewBox || ''
|
|
824
|
-
)
|
|
779
|
+
const [xViewBox = 0, yViewBox = 0, widthViewBox = 1, heightViewBox = 1] = (viewBox || '')
|
|
825
780
|
.split(' ')
|
|
826
781
|
.map((val) => parseFloatValue(val));
|
|
827
782
|
return {
|
|
@@ -836,7 +791,7 @@ const parse = (
|
|
|
836
791
|
svg: string,
|
|
837
792
|
{ width, height, fontSize }: PDFPageDrawSVGElementOptions,
|
|
838
793
|
size: Size,
|
|
839
|
-
matrix: TransformationMatrix
|
|
794
|
+
matrix: TransformationMatrix,
|
|
840
795
|
): SVGElement[] => {
|
|
841
796
|
const htmlElement = parseHtml(svg).firstChild as HTMLElement;
|
|
842
797
|
if (width) htmlElement.setAttribute('width', width + '');
|
|
@@ -850,7 +805,7 @@ const parse = (
|
|
|
850
805
|
viewBox: parseViewBox(htmlElement.attributes.viewBox || '0 0 1 1')!,
|
|
851
806
|
},
|
|
852
807
|
matrix,
|
|
853
|
-
[]
|
|
808
|
+
[],
|
|
854
809
|
);
|
|
855
810
|
};
|
|
856
811
|
|
|
@@ -869,17 +824,12 @@ export const drawSvg = async (
|
|
|
869
824
|
const widthRaw = styleOrAttribute(attributes, style, 'width', '');
|
|
870
825
|
const heightRaw = styleOrAttribute(attributes, style, 'height', '');
|
|
871
826
|
|
|
872
|
-
const width =
|
|
873
|
-
|
|
874
|
-
const height =
|
|
875
|
-
options.height !== undefined ? options.height : parseFloat(heightRaw);
|
|
827
|
+
const width = options.width !== undefined ? options.width : parseFloat(widthRaw);
|
|
828
|
+
const height = options.height !== undefined ? options.height : parseFloat(heightRaw);
|
|
876
829
|
|
|
877
830
|
// it's important to add the viewBox to allow svg resizing through the options
|
|
878
831
|
if (!attributes.viewBox) {
|
|
879
|
-
firstChild.setAttribute(
|
|
880
|
-
'viewBox',
|
|
881
|
-
`0 0 ${widthRaw || width} ${heightRaw || height}`,
|
|
882
|
-
);
|
|
832
|
+
firstChild.setAttribute('viewBox', `0 0 ${widthRaw || width} ${heightRaw || height}`);
|
|
883
833
|
}
|
|
884
834
|
|
|
885
835
|
if (options.width || options.height) {
|
|
@@ -895,7 +845,7 @@ export const drawSvg = async (
|
|
|
895
845
|
);
|
|
896
846
|
}
|
|
897
847
|
|
|
898
|
-
const baseTransformation: TransformationMatrix = [1, 0, 0, 1, options.x ||
|
|
848
|
+
const baseTransformation: TransformationMatrix = [1, 0, 0, 1, options.x || 0, options.y || 0];
|
|
899
849
|
|
|
900
850
|
const runners = runnersToPage(page, options);
|
|
901
851
|
const elements = parse(firstChild.outerHTML, options, size, baseTransformation);
|
|
@@ -934,4 +884,4 @@ export const drawSvg = async (
|
|
|
934
884
|
// })
|
|
935
885
|
return runners[elt.tagName]?.(elt);
|
|
936
886
|
}, Promise.resolve());
|
|
937
|
-
};
|
|
887
|
+
};
|