@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.
Files changed (143) hide show
  1. package/README.md +11 -2
  2. package/cjs/api/PDFDocument.js +195 -225
  3. package/cjs/api/PDFDocument.js.map +1 -1
  4. package/cjs/api/PDFEmbeddedFile.js +30 -33
  5. package/cjs/api/PDFEmbeddedFile.js.map +1 -1
  6. package/cjs/api/PDFEmbeddedPage.js +5 -7
  7. package/cjs/api/PDFEmbeddedPage.js.map +1 -1
  8. package/cjs/api/PDFFont.js +6 -8
  9. package/cjs/api/PDFFont.js.map +1 -1
  10. package/cjs/api/PDFImage.js +14 -16
  11. package/cjs/api/PDFImage.js.map +1 -1
  12. package/cjs/api/PDFJavaScript.js +19 -22
  13. package/cjs/api/PDFJavaScript.js.map +1 -1
  14. package/cjs/api/PDFPage.d.ts +1 -0
  15. package/cjs/api/PDFPage.d.ts.map +1 -1
  16. package/cjs/api/PDFPage.js +30 -17
  17. package/cjs/api/PDFPage.js.map +1 -1
  18. package/cjs/api/PDFPageOptions.d.ts +15 -8
  19. package/cjs/api/PDFPageOptions.d.ts.map +1 -1
  20. package/cjs/api/PDFPageOptions.js.map +1 -1
  21. package/cjs/api/form/PDFField.js +1 -1
  22. package/cjs/api/form/PDFField.js.map +1 -1
  23. package/cjs/api/form/PDFForm.js +1 -1
  24. package/cjs/api/form/PDFForm.js.map +1 -1
  25. package/cjs/api/form/appearances.js +56 -16
  26. package/cjs/api/form/appearances.js.map +1 -1
  27. package/cjs/api/operations.d.ts +16 -0
  28. package/cjs/api/operations.d.ts.map +1 -1
  29. package/cjs/api/operations.js +53 -5
  30. package/cjs/api/operations.js.map +1 -1
  31. package/cjs/api/svg.d.ts +7 -1
  32. package/cjs/api/svg.d.ts.map +1 -1
  33. package/cjs/api/svg.js +332 -1016
  34. package/cjs/api/svg.js.map +1 -1
  35. package/cjs/core/PDFContext.js +11 -2
  36. package/cjs/core/PDFContext.js.map +1 -1
  37. package/cjs/core/embedders/CustomFontEmbedder.js +62 -74
  38. package/cjs/core/embedders/CustomFontEmbedder.js.map +1 -1
  39. package/cjs/core/embedders/CustomFontSubsetEmbedder.js +3 -5
  40. package/cjs/core/embedders/CustomFontSubsetEmbedder.js.map +1 -1
  41. package/cjs/core/embedders/FileEmbedder.js +30 -32
  42. package/cjs/core/embedders/FileEmbedder.js.map +1 -1
  43. package/cjs/core/embedders/JavaScriptEmbedder.js +12 -14
  44. package/cjs/core/embedders/JavaScriptEmbedder.js.map +1 -1
  45. package/cjs/core/embedders/JpegEmbedder.js +54 -59
  46. package/cjs/core/embedders/JpegEmbedder.js.map +1 -1
  47. package/cjs/core/embedders/PDFPageEmbedder.js +22 -26
  48. package/cjs/core/embedders/PDFPageEmbedder.js.map +1 -1
  49. package/cjs/core/embedders/PngEmbedder.js +20 -25
  50. package/cjs/core/embedders/PngEmbedder.js.map +1 -1
  51. package/cjs/core/parser/PDFObjectStreamParser.js +15 -17
  52. package/cjs/core/parser/PDFObjectStreamParser.js.map +1 -1
  53. package/cjs/core/parser/PDFParser.js +66 -74
  54. package/cjs/core/parser/PDFParser.js.map +1 -1
  55. package/cjs/core/writers/PDFStreamWriter.js +53 -55
  56. package/cjs/core/writers/PDFStreamWriter.js.map +1 -1
  57. package/cjs/core/writers/PDFWriter.js +62 -66
  58. package/cjs/core/writers/PDFWriter.js.map +1 -1
  59. package/cjs/types/index.d.ts +4 -4
  60. package/cjs/types/index.d.ts.map +1 -1
  61. package/dist/pdf-lib.esm.js +1153 -2590
  62. package/dist/pdf-lib.esm.js.map +1 -1
  63. package/dist/pdf-lib.esm.min.js +1 -15
  64. package/dist/pdf-lib.esm.min.js.map +1 -1
  65. package/dist/pdf-lib.js +1153 -2590
  66. package/dist/pdf-lib.js.map +1 -1
  67. package/dist/pdf-lib.min.js +1 -15
  68. package/dist/pdf-lib.min.js.map +1 -1
  69. package/es/api/PDFDocument.js +195 -226
  70. package/es/api/PDFDocument.js.map +1 -1
  71. package/es/api/PDFEmbeddedFile.js +30 -33
  72. package/es/api/PDFEmbeddedFile.js.map +1 -1
  73. package/es/api/PDFEmbeddedPage.js +5 -8
  74. package/es/api/PDFEmbeddedPage.js.map +1 -1
  75. package/es/api/PDFFont.js +6 -9
  76. package/es/api/PDFFont.js.map +1 -1
  77. package/es/api/PDFImage.js +14 -17
  78. package/es/api/PDFImage.js.map +1 -1
  79. package/es/api/PDFJavaScript.js +19 -22
  80. package/es/api/PDFJavaScript.js.map +1 -1
  81. package/es/api/PDFPage.d.ts +1 -0
  82. package/es/api/PDFPage.d.ts.map +1 -1
  83. package/es/api/PDFPage.js +30 -18
  84. package/es/api/PDFPage.js.map +1 -1
  85. package/es/api/PDFPageOptions.d.ts +15 -8
  86. package/es/api/PDFPageOptions.d.ts.map +1 -1
  87. package/es/api/PDFPageOptions.js.map +1 -1
  88. package/es/api/form/PDFField.js +1 -1
  89. package/es/api/form/PDFField.js.map +1 -1
  90. package/es/api/form/PDFForm.js +1 -1
  91. package/es/api/form/PDFForm.js.map +1 -1
  92. package/es/api/form/appearances.js +56 -16
  93. package/es/api/form/appearances.js.map +1 -1
  94. package/es/api/operations.d.ts +16 -0
  95. package/es/api/operations.d.ts.map +1 -1
  96. package/es/api/operations.js +54 -6
  97. package/es/api/operations.js.map +1 -1
  98. package/es/api/svg.d.ts +7 -1
  99. package/es/api/svg.d.ts.map +1 -1
  100. package/es/api/svg.js +333 -1017
  101. package/es/api/svg.js.map +1 -1
  102. package/es/core/PDFContext.js +11 -2
  103. package/es/core/PDFContext.js.map +1 -1
  104. package/es/core/embedders/CustomFontEmbedder.js +62 -75
  105. package/es/core/embedders/CustomFontEmbedder.js.map +1 -1
  106. package/es/core/embedders/CustomFontSubsetEmbedder.js +3 -6
  107. package/es/core/embedders/CustomFontSubsetEmbedder.js.map +1 -1
  108. package/es/core/embedders/FileEmbedder.js +30 -33
  109. package/es/core/embedders/FileEmbedder.js.map +1 -1
  110. package/es/core/embedders/JavaScriptEmbedder.js +12 -15
  111. package/es/core/embedders/JavaScriptEmbedder.js.map +1 -1
  112. package/es/core/embedders/JpegEmbedder.js +54 -59
  113. package/es/core/embedders/JpegEmbedder.js.map +1 -1
  114. package/es/core/embedders/PDFPageEmbedder.js +22 -27
  115. package/es/core/embedders/PDFPageEmbedder.js.map +1 -1
  116. package/es/core/embedders/PngEmbedder.js +20 -25
  117. package/es/core/embedders/PngEmbedder.js.map +1 -1
  118. package/es/core/parser/PDFObjectStreamParser.js +15 -18
  119. package/es/core/parser/PDFObjectStreamParser.js.map +1 -1
  120. package/es/core/parser/PDFParser.js +66 -75
  121. package/es/core/parser/PDFParser.js.map +1 -1
  122. package/es/core/writers/PDFStreamWriter.js +53 -56
  123. package/es/core/writers/PDFStreamWriter.js.map +1 -1
  124. package/es/core/writers/PDFWriter.js +62 -67
  125. package/es/core/writers/PDFWriter.js.map +1 -1
  126. package/es/types/index.d.ts +4 -4
  127. package/es/types/index.d.ts.map +1 -1
  128. package/package.json +1 -1
  129. package/src/api/PDFPage.ts +15 -0
  130. package/src/api/PDFPageOptions.ts +15 -8
  131. package/src/api/operations.ts +82 -8
  132. package/src/api/svg.ts +305 -1086
  133. package/src/types/index.ts +6 -1
  134. package/ts3.4/cjs/api/PDFPage.d.ts +1 -0
  135. package/ts3.4/cjs/api/PDFPageOptions.d.ts +15 -8
  136. package/ts3.4/cjs/api/operations.d.ts +16 -0
  137. package/ts3.4/cjs/api/svg.d.ts +7 -1
  138. package/ts3.4/cjs/types/index.d.ts +4 -4
  139. package/ts3.4/es/api/PDFPage.d.ts +1 -0
  140. package/ts3.4/es/api/PDFPageOptions.d.ts +15 -8
  141. package/ts3.4/es/api/operations.d.ts +16 -0
  142. package/ts3.4/es/api/svg.d.ts +7 -1
  143. package/ts3.4/es/types/index.d.ts +4 -4
@@ -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
- moveTo(0, 0),
208
- lineTo(0, options.height),
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))),