@pdfme/pdf-lib 1.18.1 → 1.18.4
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/README.md +11 -2
- package/cjs/api/PDFDocument.js +195 -225
- package/cjs/api/PDFDocument.js.map +1 -1
- package/cjs/api/PDFEmbeddedFile.js +30 -33
- package/cjs/api/PDFEmbeddedFile.js.map +1 -1
- package/cjs/api/PDFEmbeddedPage.js +5 -7
- package/cjs/api/PDFEmbeddedPage.js.map +1 -1
- package/cjs/api/PDFFont.js +6 -8
- package/cjs/api/PDFFont.js.map +1 -1
- package/cjs/api/PDFImage.js +14 -16
- package/cjs/api/PDFImage.js.map +1 -1
- package/cjs/api/PDFJavaScript.js +19 -22
- package/cjs/api/PDFJavaScript.js.map +1 -1
- package/cjs/api/PDFPage.d.ts +1 -0
- package/cjs/api/PDFPage.d.ts.map +1 -1
- package/cjs/api/PDFPage.js +30 -17
- package/cjs/api/PDFPage.js.map +1 -1
- package/cjs/api/PDFPageOptions.d.ts +15 -8
- package/cjs/api/PDFPageOptions.d.ts.map +1 -1
- package/cjs/api/PDFPageOptions.js.map +1 -1
- package/cjs/api/form/PDFField.js +1 -1
- package/cjs/api/form/PDFField.js.map +1 -1
- package/cjs/api/form/PDFForm.js +1 -1
- package/cjs/api/form/PDFForm.js.map +1 -1
- package/cjs/api/form/appearances.js +56 -16
- package/cjs/api/form/appearances.js.map +1 -1
- package/cjs/api/operations.d.ts +16 -0
- package/cjs/api/operations.d.ts.map +1 -1
- package/cjs/api/operations.js +53 -5
- package/cjs/api/operations.js.map +1 -1
- package/cjs/api/svg.d.ts +7 -1
- package/cjs/api/svg.d.ts.map +1 -1
- package/cjs/api/svg.js +332 -1016
- package/cjs/api/svg.js.map +1 -1
- package/cjs/core/PDFContext.js +11 -2
- package/cjs/core/PDFContext.js.map +1 -1
- package/cjs/core/embedders/CustomFontEmbedder.js +62 -74
- package/cjs/core/embedders/CustomFontEmbedder.js.map +1 -1
- package/cjs/core/embedders/CustomFontSubsetEmbedder.js +3 -5
- package/cjs/core/embedders/CustomFontSubsetEmbedder.js.map +1 -1
- package/cjs/core/embedders/FileEmbedder.js +30 -32
- package/cjs/core/embedders/FileEmbedder.js.map +1 -1
- package/cjs/core/embedders/JavaScriptEmbedder.js +12 -14
- package/cjs/core/embedders/JavaScriptEmbedder.js.map +1 -1
- package/cjs/core/embedders/JpegEmbedder.js +54 -59
- package/cjs/core/embedders/JpegEmbedder.js.map +1 -1
- package/cjs/core/embedders/PDFPageEmbedder.js +22 -26
- package/cjs/core/embedders/PDFPageEmbedder.js.map +1 -1
- package/cjs/core/embedders/PngEmbedder.js +20 -25
- package/cjs/core/embedders/PngEmbedder.js.map +1 -1
- package/cjs/core/parser/PDFObjectStreamParser.js +15 -17
- package/cjs/core/parser/PDFObjectStreamParser.js.map +1 -1
- package/cjs/core/parser/PDFParser.js +66 -74
- package/cjs/core/parser/PDFParser.js.map +1 -1
- package/cjs/core/writers/PDFStreamWriter.js +53 -55
- package/cjs/core/writers/PDFStreamWriter.js.map +1 -1
- package/cjs/core/writers/PDFWriter.js +62 -66
- package/cjs/core/writers/PDFWriter.js.map +1 -1
- package/cjs/types/index.d.ts +4 -4
- package/cjs/types/index.d.ts.map +1 -1
- package/dist/pdf-lib.esm.js +1153 -2590
- package/dist/pdf-lib.esm.js.map +1 -1
- package/dist/pdf-lib.esm.min.js +1 -15
- package/dist/pdf-lib.esm.min.js.map +1 -1
- package/dist/pdf-lib.js +1153 -2590
- package/dist/pdf-lib.js.map +1 -1
- package/dist/pdf-lib.min.js +1 -15
- package/dist/pdf-lib.min.js.map +1 -1
- package/es/api/PDFDocument.js +195 -226
- package/es/api/PDFDocument.js.map +1 -1
- package/es/api/PDFEmbeddedFile.js +30 -33
- package/es/api/PDFEmbeddedFile.js.map +1 -1
- package/es/api/PDFEmbeddedPage.js +5 -8
- package/es/api/PDFEmbeddedPage.js.map +1 -1
- package/es/api/PDFFont.js +6 -9
- package/es/api/PDFFont.js.map +1 -1
- package/es/api/PDFImage.js +14 -17
- package/es/api/PDFImage.js.map +1 -1
- package/es/api/PDFJavaScript.js +19 -22
- package/es/api/PDFJavaScript.js.map +1 -1
- package/es/api/PDFPage.d.ts +1 -0
- package/es/api/PDFPage.d.ts.map +1 -1
- package/es/api/PDFPage.js +30 -18
- package/es/api/PDFPage.js.map +1 -1
- package/es/api/PDFPageOptions.d.ts +15 -8
- package/es/api/PDFPageOptions.d.ts.map +1 -1
- package/es/api/PDFPageOptions.js.map +1 -1
- package/es/api/form/PDFField.js +1 -1
- package/es/api/form/PDFField.js.map +1 -1
- package/es/api/form/PDFForm.js +1 -1
- package/es/api/form/PDFForm.js.map +1 -1
- package/es/api/form/appearances.js +56 -16
- package/es/api/form/appearances.js.map +1 -1
- package/es/api/operations.d.ts +16 -0
- package/es/api/operations.d.ts.map +1 -1
- package/es/api/operations.js +54 -6
- package/es/api/operations.js.map +1 -1
- package/es/api/svg.d.ts +7 -1
- package/es/api/svg.d.ts.map +1 -1
- package/es/api/svg.js +333 -1017
- package/es/api/svg.js.map +1 -1
- package/es/core/PDFContext.js +11 -2
- package/es/core/PDFContext.js.map +1 -1
- package/es/core/embedders/CustomFontEmbedder.js +62 -75
- package/es/core/embedders/CustomFontEmbedder.js.map +1 -1
- package/es/core/embedders/CustomFontSubsetEmbedder.js +3 -6
- package/es/core/embedders/CustomFontSubsetEmbedder.js.map +1 -1
- package/es/core/embedders/FileEmbedder.js +30 -33
- package/es/core/embedders/FileEmbedder.js.map +1 -1
- package/es/core/embedders/JavaScriptEmbedder.js +12 -15
- package/es/core/embedders/JavaScriptEmbedder.js.map +1 -1
- package/es/core/embedders/JpegEmbedder.js +54 -59
- package/es/core/embedders/JpegEmbedder.js.map +1 -1
- package/es/core/embedders/PDFPageEmbedder.js +22 -27
- package/es/core/embedders/PDFPageEmbedder.js.map +1 -1
- package/es/core/embedders/PngEmbedder.js +20 -25
- package/es/core/embedders/PngEmbedder.js.map +1 -1
- package/es/core/parser/PDFObjectStreamParser.js +15 -18
- package/es/core/parser/PDFObjectStreamParser.js.map +1 -1
- package/es/core/parser/PDFParser.js +66 -75
- package/es/core/parser/PDFParser.js.map +1 -1
- package/es/core/writers/PDFStreamWriter.js +53 -56
- package/es/core/writers/PDFStreamWriter.js.map +1 -1
- package/es/core/writers/PDFWriter.js +62 -67
- package/es/core/writers/PDFWriter.js.map +1 -1
- package/es/types/index.d.ts +4 -4
- package/es/types/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/api/PDFPage.ts +15 -0
- package/src/api/PDFPageOptions.ts +15 -8
- package/src/api/operations.ts +82 -8
- package/src/api/svg.ts +305 -1086
- package/src/types/index.ts +6 -1
- package/ts3.4/cjs/api/PDFPage.d.ts +1 -0
- package/ts3.4/cjs/api/PDFPageOptions.d.ts +15 -8
- package/ts3.4/cjs/api/operations.d.ts +16 -0
- package/ts3.4/cjs/api/svg.d.ts +7 -1
- package/ts3.4/cjs/types/index.d.ts +4 -4
- package/ts3.4/es/api/PDFPage.d.ts +1 -0
- package/ts3.4/es/api/PDFPageOptions.d.ts +15 -8
- package/ts3.4/es/api/operations.d.ts +16 -0
- package/ts3.4/es/api/svg.d.ts +7 -1
- package/ts3.4/es/types/index.d.ts +4 -4
package/src/api/operations.ts
CHANGED
|
@@ -33,11 +33,13 @@ import {
|
|
|
33
33
|
appendBezierCurve,
|
|
34
34
|
FillRule,
|
|
35
35
|
fillEvenOdd,
|
|
36
|
+
concatTransformationMatrix,
|
|
36
37
|
} from './operators';
|
|
37
38
|
import { Rotation, degrees, toRadians } from './rotations';
|
|
38
39
|
import { svgPathToOperators } from './svgPath';
|
|
39
40
|
import { PDFHexString, PDFName, PDFNumber, PDFOperator } from '../core';
|
|
40
41
|
import { asNumber } from './objects';
|
|
42
|
+
import type { Space, TransformationMatrix } from '../types'
|
|
41
43
|
|
|
42
44
|
export interface DrawTextOptions {
|
|
43
45
|
color: Color;
|
|
@@ -49,8 +51,27 @@ export interface DrawTextOptions {
|
|
|
49
51
|
x: number | PDFNumber;
|
|
50
52
|
y: number | PDFNumber;
|
|
51
53
|
graphicsState?: string | PDFName;
|
|
54
|
+
matrix?: TransformationMatrix;
|
|
55
|
+
clipSpaces?: Space[];
|
|
52
56
|
}
|
|
53
57
|
|
|
58
|
+
const clipSpace = ({
|
|
59
|
+
topLeft,
|
|
60
|
+
topRight,
|
|
61
|
+
bottomRight,
|
|
62
|
+
bottomLeft
|
|
63
|
+
}: Space) =>
|
|
64
|
+
[
|
|
65
|
+
moveTo(topLeft.x, topLeft.y),
|
|
66
|
+
lineTo(topRight.x, topRight.y),
|
|
67
|
+
lineTo(bottomRight.x, bottomRight.y),
|
|
68
|
+
lineTo(bottomLeft.x, bottomLeft.y),
|
|
69
|
+
closePath(),
|
|
70
|
+
clip(),
|
|
71
|
+
endPath(),
|
|
72
|
+
]
|
|
73
|
+
const clipSpaces = (spaces: Space[]) => spaces.flatMap(clipSpace)
|
|
74
|
+
|
|
54
75
|
export const drawText = (
|
|
55
76
|
line: PDFHexString,
|
|
56
77
|
options: DrawTextOptions,
|
|
@@ -84,6 +105,8 @@ export const drawLinesOfText = (
|
|
|
84
105
|
const operators = [
|
|
85
106
|
pushGraphicsState(),
|
|
86
107
|
options.graphicsState && setGraphicsState(options.graphicsState),
|
|
108
|
+
...(options.clipSpaces ? clipSpaces(options.clipSpaces) : []),
|
|
109
|
+
options.matrix && concatTransformationMatrix(...options.matrix),
|
|
87
110
|
beginText(),
|
|
88
111
|
setFillingColor(options.color),
|
|
89
112
|
setFontAndSize(options.font, options.size),
|
|
@@ -116,11 +139,15 @@ export const drawImage = (
|
|
|
116
139
|
xSkew: Rotation;
|
|
117
140
|
ySkew: Rotation;
|
|
118
141
|
graphicsState?: string | PDFName;
|
|
142
|
+
matrix?: TransformationMatrix;
|
|
143
|
+
clipSpaces?: Space[];
|
|
119
144
|
},
|
|
120
145
|
): PDFOperator[] =>
|
|
121
146
|
[
|
|
122
147
|
pushGraphicsState(),
|
|
123
148
|
options.graphicsState && setGraphicsState(options.graphicsState),
|
|
149
|
+
...(options.clipSpaces ? clipSpaces(options.clipSpaces) : []),
|
|
150
|
+
options.matrix && concatTransformationMatrix(...options.matrix),
|
|
124
151
|
translate(options.x, options.y),
|
|
125
152
|
rotateRadians(toRadians(options.rotate)),
|
|
126
153
|
scale(options.width, options.height),
|
|
@@ -162,10 +189,14 @@ export const drawLine = (options: {
|
|
|
162
189
|
dashPhase?: number | PDFNumber;
|
|
163
190
|
lineCap?: LineCapStyle;
|
|
164
191
|
graphicsState?: string | PDFName;
|
|
192
|
+
matrix?: TransformationMatrix;
|
|
193
|
+
clipSpaces?: Space[];
|
|
165
194
|
}) =>
|
|
166
195
|
[
|
|
167
196
|
pushGraphicsState(),
|
|
168
197
|
options.graphicsState && setGraphicsState(options.graphicsState),
|
|
198
|
+
...(options.clipSpaces ? clipSpaces(options.clipSpaces) : []),
|
|
199
|
+
options.matrix && concatTransformationMatrix(...options.matrix),
|
|
169
200
|
options.color && setStrokingColor(options.color),
|
|
170
201
|
setLineWidth(options.thickness),
|
|
171
202
|
setDashPattern(options.dashArray ?? [], options.dashPhase ?? 0),
|
|
@@ -192,8 +223,43 @@ export const drawRectangle = (options: {
|
|
|
192
223
|
borderDashArray?: (number | PDFNumber)[];
|
|
193
224
|
borderDashPhase?: number | PDFNumber;
|
|
194
225
|
graphicsState?: string | PDFName;
|
|
195
|
-
|
|
196
|
-
[
|
|
226
|
+
matrix?: TransformationMatrix;
|
|
227
|
+
clipSpaces?: Space[];
|
|
228
|
+
radius?: number | PDFNumber;
|
|
229
|
+
}) => {
|
|
230
|
+
let ops = [];
|
|
231
|
+
|
|
232
|
+
if (!options.radius || asNumber(options.radius) <= 0) {
|
|
233
|
+
ops = [
|
|
234
|
+
moveTo(0, 0),
|
|
235
|
+
lineTo(0, options.height),
|
|
236
|
+
lineTo(options.width, options.height),
|
|
237
|
+
lineTo(options.width, 0),
|
|
238
|
+
closePath(),
|
|
239
|
+
];
|
|
240
|
+
} else {
|
|
241
|
+
let radius = asNumber(options.radius);
|
|
242
|
+
const width = asNumber(options.width);
|
|
243
|
+
const height = asNumber(options.height);
|
|
244
|
+
|
|
245
|
+
if (radius > width / 2.0 || radius > height / 2.0) {
|
|
246
|
+
radius = Math.min(width / 2.0, height / 2.0);
|
|
247
|
+
}
|
|
248
|
+
const offset = KAPPA * radius;
|
|
249
|
+
ops = [
|
|
250
|
+
moveTo(0, radius),
|
|
251
|
+
appendBezierCurve(0, radius - offset, radius - offset, 0, radius, 0),
|
|
252
|
+
lineTo(width - radius, 0),
|
|
253
|
+
appendBezierCurve(width - radius + offset, 0, width, radius - offset, width, radius),
|
|
254
|
+
lineTo(width, height - radius),
|
|
255
|
+
appendBezierCurve(width, height - radius + offset, width - radius + offset, height, width - radius, height),
|
|
256
|
+
lineTo(radius, height),
|
|
257
|
+
appendBezierCurve(radius - offset, height, 0, height - radius + offset, 0, height - radius),
|
|
258
|
+
closePath(),
|
|
259
|
+
];
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
return [
|
|
197
263
|
pushGraphicsState(),
|
|
198
264
|
options.graphicsState && setGraphicsState(options.graphicsState),
|
|
199
265
|
options.color && setFillingColor(options.color),
|
|
@@ -201,14 +267,13 @@ export const drawRectangle = (options: {
|
|
|
201
267
|
setLineWidth(options.borderWidth),
|
|
202
268
|
options.borderLineCap && setLineCap(options.borderLineCap),
|
|
203
269
|
setDashPattern(options.borderDashArray ?? [], options.borderDashPhase ?? 0),
|
|
270
|
+
...(options.clipSpaces ? clipSpaces(options.clipSpaces) : []),
|
|
271
|
+
options.matrix && concatTransformationMatrix(...options.matrix),
|
|
204
272
|
translate(options.x, options.y),
|
|
205
273
|
rotateRadians(toRadians(options.rotate)),
|
|
206
274
|
skewRadians(toRadians(options.xSkew), toRadians(options.ySkew)),
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
lineTo(options.width, options.height),
|
|
210
|
-
lineTo(options.width, 0),
|
|
211
|
-
closePath(),
|
|
275
|
+
|
|
276
|
+
...ops,
|
|
212
277
|
|
|
213
278
|
// prettier-ignore
|
|
214
279
|
options.color && options.borderWidth ? fillAndStroke()
|
|
@@ -218,6 +283,7 @@ export const drawRectangle = (options: {
|
|
|
218
283
|
|
|
219
284
|
popGraphicsState(),
|
|
220
285
|
].filter(Boolean) as PDFOperator[];
|
|
286
|
+
}
|
|
221
287
|
|
|
222
288
|
const KAPPA = 4.0 * ((Math.sqrt(2) - 1.0) / 3.0);
|
|
223
289
|
|
|
@@ -300,12 +366,16 @@ export const drawEllipse = (options: {
|
|
|
300
366
|
borderDashPhase?: number | PDFNumber;
|
|
301
367
|
graphicsState?: string | PDFName;
|
|
302
368
|
borderLineCap?: LineCapStyle;
|
|
369
|
+
matrix?: TransformationMatrix;
|
|
370
|
+
clipSpaces?: Space[];
|
|
303
371
|
}) =>
|
|
304
372
|
[
|
|
305
373
|
pushGraphicsState(),
|
|
306
374
|
options.graphicsState && setGraphicsState(options.graphicsState),
|
|
307
375
|
options.color && setFillingColor(options.color),
|
|
308
376
|
options.borderColor && setStrokingColor(options.borderColor),
|
|
377
|
+
...(options.clipSpaces ? clipSpaces(options.clipSpaces) : []),
|
|
378
|
+
options.matrix && concatTransformationMatrix(...options.matrix),
|
|
309
379
|
setLineWidth(options.borderWidth),
|
|
310
380
|
options.borderLineCap && setLineCap(options.borderLineCap),
|
|
311
381
|
setDashPattern(options.borderDashArray ?? [], options.borderDashPhase ?? 0),
|
|
@@ -350,12 +420,16 @@ export const drawSvgPath = (
|
|
|
350
420
|
borderDashPhase?: number | PDFNumber;
|
|
351
421
|
borderLineCap?: LineCapStyle;
|
|
352
422
|
graphicsState?: string | PDFName;
|
|
353
|
-
fillRule?: FillRule
|
|
423
|
+
fillRule?: FillRule;
|
|
424
|
+
matrix?: TransformationMatrix;
|
|
425
|
+
clipSpaces?: Space[];
|
|
354
426
|
},
|
|
355
427
|
) =>
|
|
356
428
|
[
|
|
357
429
|
pushGraphicsState(),
|
|
358
430
|
options.graphicsState && setGraphicsState(options.graphicsState),
|
|
431
|
+
...(options.clipSpaces ? clipSpaces(options.clipSpaces) : []),
|
|
432
|
+
options.matrix && concatTransformationMatrix(...options.matrix),
|
|
359
433
|
|
|
360
434
|
translate(options.x, options.y),
|
|
361
435
|
rotateRadians(toRadians(options.rotate ?? degrees(0))),
|