postext-pdf 1.4.2 → 1.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. package/README.md +3 -3
  2. package/dist/__tests__/accessibility.test.js +66 -0
  3. package/dist/__tests__/accessibility.test.js.map +1 -1
  4. package/dist/__tests__/alpha.test.d.ts +2 -0
  5. package/dist/__tests__/alpha.test.d.ts.map +1 -0
  6. package/dist/__tests__/alpha.test.js +164 -0
  7. package/dist/__tests__/alpha.test.js.map +1 -0
  8. package/dist/__tests__/bleedClip.test.d.ts +2 -0
  9. package/dist/__tests__/bleedClip.test.d.ts.map +1 -0
  10. package/dist/__tests__/bleedClip.test.js +83 -0
  11. package/dist/__tests__/bleedClip.test.js.map +1 -0
  12. package/dist/__tests__/boxBorderInside.test.d.ts +2 -0
  13. package/dist/__tests__/boxBorderInside.test.d.ts.map +1 -0
  14. package/dist/__tests__/boxBorderInside.test.js +63 -0
  15. package/dist/__tests__/boxBorderInside.test.js.map +1 -0
  16. package/dist/__tests__/calloutRuntTracking.test.d.ts +2 -0
  17. package/dist/__tests__/calloutRuntTracking.test.d.ts.map +1 -0
  18. package/dist/__tests__/calloutRuntTracking.test.js +72 -0
  19. package/dist/__tests__/calloutRuntTracking.test.js.map +1 -0
  20. package/dist/__tests__/calloutStripeRadius.test.d.ts +2 -0
  21. package/dist/__tests__/calloutStripeRadius.test.d.ts.map +1 -0
  22. package/dist/__tests__/calloutStripeRadius.test.js +90 -0
  23. package/dist/__tests__/calloutStripeRadius.test.js.map +1 -0
  24. package/dist/__tests__/chipVerticalPadding.test.d.ts +2 -0
  25. package/dist/__tests__/chipVerticalPadding.test.d.ts.map +1 -0
  26. package/dist/__tests__/chipVerticalPadding.test.js +71 -0
  27. package/dist/__tests__/chipVerticalPadding.test.js.map +1 -0
  28. package/dist/__tests__/chips.test.js +20 -3
  29. package/dist/__tests__/chips.test.js.map +1 -1
  30. package/dist/__tests__/documentLanguage.test.d.ts +2 -0
  31. package/dist/__tests__/documentLanguage.test.d.ts.map +1 -0
  32. package/dist/__tests__/documentLanguage.test.js +44 -0
  33. package/dist/__tests__/documentLanguage.test.js.map +1 -0
  34. package/dist/__tests__/fallbackSpaces.test.d.ts +2 -0
  35. package/dist/__tests__/fallbackSpaces.test.d.ts.map +1 -0
  36. package/dist/__tests__/fallbackSpaces.test.js +156 -0
  37. package/dist/__tests__/fallbackSpaces.test.js.map +1 -0
  38. package/dist/__tests__/floatReadingOrder.test.d.ts +2 -0
  39. package/dist/__tests__/floatReadingOrder.test.d.ts.map +1 -0
  40. package/dist/__tests__/floatReadingOrder.test.js +208 -0
  41. package/dist/__tests__/floatReadingOrder.test.js.map +1 -0
  42. package/dist/__tests__/fontEmbedding.test.d.ts +2 -0
  43. package/dist/__tests__/fontEmbedding.test.d.ts.map +1 -0
  44. package/dist/__tests__/fontEmbedding.test.js +118 -0
  45. package/dist/__tests__/fontEmbedding.test.js.map +1 -0
  46. package/dist/__tests__/fontFaces.test.d.ts +2 -0
  47. package/dist/__tests__/fontFaces.test.d.ts.map +1 -0
  48. package/dist/__tests__/fontFaces.test.js +193 -0
  49. package/dist/__tests__/fontFaces.test.js.map +1 -0
  50. package/dist/__tests__/fontStack.test.d.ts +2 -0
  51. package/dist/__tests__/fontStack.test.d.ts.map +1 -0
  52. package/dist/__tests__/fontStack.test.js +48 -0
  53. package/dist/__tests__/fontStack.test.js.map +1 -0
  54. package/dist/__tests__/headerFooter.test.js +83 -1
  55. package/dist/__tests__/headerFooter.test.js.map +1 -1
  56. package/dist/__tests__/headingAlign.test.d.ts +2 -0
  57. package/dist/__tests__/headingAlign.test.d.ts.map +1 -0
  58. package/dist/__tests__/headingAlign.test.js +66 -0
  59. package/dist/__tests__/headingAlign.test.js.map +1 -0
  60. package/dist/__tests__/hiddenHeadings.test.d.ts +2 -0
  61. package/dist/__tests__/hiddenHeadings.test.d.ts.map +1 -0
  62. package/dist/__tests__/hiddenHeadings.test.js +96 -0
  63. package/dist/__tests__/hiddenHeadings.test.js.map +1 -0
  64. package/dist/__tests__/lineTracking.test.d.ts +2 -0
  65. package/dist/__tests__/lineTracking.test.d.ts.map +1 -0
  66. package/dist/__tests__/lineTracking.test.js +80 -0
  67. package/dist/__tests__/lineTracking.test.js.map +1 -0
  68. package/dist/__tests__/measuredLines.test.d.ts +2 -0
  69. package/dist/__tests__/measuredLines.test.d.ts.map +1 -0
  70. package/dist/__tests__/measuredLines.test.js +255 -0
  71. package/dist/__tests__/measuredLines.test.js.map +1 -0
  72. package/dist/__tests__/metadata.test.d.ts +2 -0
  73. package/dist/__tests__/metadata.test.d.ts.map +1 -0
  74. package/dist/__tests__/metadata.test.js +51 -0
  75. package/dist/__tests__/metadata.test.js.map +1 -0
  76. package/dist/__tests__/outlineTitles.test.d.ts +2 -0
  77. package/dist/__tests__/outlineTitles.test.d.ts.map +1 -0
  78. package/dist/__tests__/outlineTitles.test.js +59 -0
  79. package/dist/__tests__/outlineTitles.test.js.map +1 -0
  80. package/dist/__tests__/pdfGenerationConfig.test.d.ts +2 -0
  81. package/dist/__tests__/pdfGenerationConfig.test.d.ts.map +1 -0
  82. package/dist/__tests__/pdfGenerationConfig.test.js +76 -0
  83. package/dist/__tests__/pdfGenerationConfig.test.js.map +1 -0
  84. package/dist/__tests__/pdfWorker.test.d.ts +2 -0
  85. package/dist/__tests__/pdfWorker.test.d.ts.map +1 -0
  86. package/dist/__tests__/pdfWorker.test.js +123 -0
  87. package/dist/__tests__/pdfWorker.test.js.map +1 -0
  88. package/dist/__tests__/printMarks.test.d.ts +2 -0
  89. package/dist/__tests__/printMarks.test.d.ts.map +1 -0
  90. package/dist/__tests__/printMarks.test.js +170 -0
  91. package/dist/__tests__/printMarks.test.js.map +1 -0
  92. package/dist/__tests__/printMaster.test.d.ts +2 -0
  93. package/dist/__tests__/printMaster.test.d.ts.map +1 -0
  94. package/dist/__tests__/printMaster.test.js +161 -0
  95. package/dist/__tests__/printMaster.test.js.map +1 -0
  96. package/dist/__tests__/renderWarnings.test.d.ts +2 -0
  97. package/dist/__tests__/renderWarnings.test.d.ts.map +1 -0
  98. package/dist/__tests__/renderWarnings.test.js +89 -0
  99. package/dist/__tests__/renderWarnings.test.js.map +1 -0
  100. package/dist/__tests__/repeatedHyphen.test.d.ts +2 -0
  101. package/dist/__tests__/repeatedHyphen.test.d.ts.map +1 -0
  102. package/dist/__tests__/repeatedHyphen.test.js +125 -0
  103. package/dist/__tests__/repeatedHyphen.test.js.map +1 -0
  104. package/dist/__tests__/scriptStacking.test.d.ts +2 -0
  105. package/dist/__tests__/scriptStacking.test.d.ts.map +1 -0
  106. package/dist/__tests__/scriptStacking.test.js +66 -0
  107. package/dist/__tests__/scriptStacking.test.js.map +1 -0
  108. package/dist/__tests__/sectionColumnRule.test.d.ts +2 -0
  109. package/dist/__tests__/sectionColumnRule.test.d.ts.map +1 -0
  110. package/dist/__tests__/sectionColumnRule.test.js +144 -0
  111. package/dist/__tests__/sectionColumnRule.test.js.map +1 -0
  112. package/dist/__tests__/svgFormReuse.test.d.ts +2 -0
  113. package/dist/__tests__/svgFormReuse.test.d.ts.map +1 -0
  114. package/dist/__tests__/svgFormReuse.test.js +102 -0
  115. package/dist/__tests__/svgFormReuse.test.js.map +1 -0
  116. package/dist/__tests__/svgVector.test.js +85 -11
  117. package/dist/__tests__/svgVector.test.js.map +1 -1
  118. package/dist/__tests__/tableFillSeams.test.d.ts +2 -0
  119. package/dist/__tests__/tableFillSeams.test.d.ts.map +1 -0
  120. package/dist/__tests__/tableFillSeams.test.js +72 -0
  121. package/dist/__tests__/tableFillSeams.test.js.map +1 -0
  122. package/dist/__tests__/tocLeaderKerning.test.d.ts +2 -0
  123. package/dist/__tests__/tocLeaderKerning.test.d.ts.map +1 -0
  124. package/dist/__tests__/tocLeaderKerning.test.js +84 -0
  125. package/dist/__tests__/tocLeaderKerning.test.js.map +1 -0
  126. package/dist/__tests__/tocNumberBaseline.test.d.ts +2 -0
  127. package/dist/__tests__/tocNumberBaseline.test.d.ts.map +1 -0
  128. package/dist/__tests__/tocNumberBaseline.test.js +72 -0
  129. package/dist/__tests__/tocNumberBaseline.test.js.map +1 -0
  130. package/dist/__tests__/tocTagging.test.d.ts +2 -0
  131. package/dist/__tests__/tocTagging.test.d.ts.map +1 -0
  132. package/dist/__tests__/tocTagging.test.js +120 -0
  133. package/dist/__tests__/tocTagging.test.js.map +1 -0
  134. package/dist/__tests__/trackedLineAlign.test.d.ts +2 -0
  135. package/dist/__tests__/trackedLineAlign.test.d.ts.map +1 -0
  136. package/dist/__tests__/trackedLineAlign.test.js +73 -0
  137. package/dist/__tests__/trackedLineAlign.test.js.map +1 -0
  138. package/dist/__tests__/uriLinks.test.d.ts +2 -0
  139. package/dist/__tests__/uriLinks.test.d.ts.map +1 -0
  140. package/dist/__tests__/uriLinks.test.js +103 -0
  141. package/dist/__tests__/uriLinks.test.js.map +1 -0
  142. package/dist/colors.d.ts +18 -3
  143. package/dist/colors.d.ts.map +1 -1
  144. package/dist/colors.js +77 -25
  145. package/dist/colors.js.map +1 -1
  146. package/dist/fontCache.d.ts +67 -4
  147. package/dist/fontCache.d.ts.map +1 -1
  148. package/dist/fontCache.js +200 -23
  149. package/dist/fontCache.js.map +1 -1
  150. package/dist/index.d.ts +1 -1
  151. package/dist/index.d.ts.map +1 -1
  152. package/dist/pdf-backend/blockRender.d.ts.map +1 -1
  153. package/dist/pdf-backend/blockRender.js +127 -28
  154. package/dist/pdf-backend/blockRender.js.map +1 -1
  155. package/dist/pdf-backend/fallbackSpaces.d.ts +37 -0
  156. package/dist/pdf-backend/fallbackSpaces.d.ts.map +1 -0
  157. package/dist/pdf-backend/fallbackSpaces.js +119 -0
  158. package/dist/pdf-backend/fallbackSpaces.js.map +1 -0
  159. package/dist/pdf-backend/fontHelpers.d.ts +10 -1
  160. package/dist/pdf-backend/fontHelpers.d.ts.map +1 -1
  161. package/dist/pdf-backend/fontHelpers.js +111 -65
  162. package/dist/pdf-backend/fontHelpers.js.map +1 -1
  163. package/dist/pdf-backend/headerFooter.d.ts +4 -2
  164. package/dist/pdf-backend/headerFooter.d.ts.map +1 -1
  165. package/dist/pdf-backend/headerFooter.js +105 -48
  166. package/dist/pdf-backend/headerFooter.js.map +1 -1
  167. package/dist/pdf-backend/index.d.ts +55 -6
  168. package/dist/pdf-backend/index.d.ts.map +1 -1
  169. package/dist/pdf-backend/index.js +135 -35
  170. package/dist/pdf-backend/index.js.map +1 -1
  171. package/dist/pdf-backend/links.d.ts +82 -1
  172. package/dist/pdf-backend/links.d.ts.map +1 -1
  173. package/dist/pdf-backend/links.js +141 -3
  174. package/dist/pdf-backend/links.js.map +1 -1
  175. package/dist/pdf-backend/outlines.d.ts.map +1 -1
  176. package/dist/pdf-backend/outlines.js +7 -0
  177. package/dist/pdf-backend/outlines.js.map +1 -1
  178. package/dist/pdf-backend/pageDecorations.d.ts.map +1 -1
  179. package/dist/pdf-backend/pageDecorations.js +42 -26
  180. package/dist/pdf-backend/pageDecorations.js.map +1 -1
  181. package/dist/pdf-backend/primitives.d.ts +61 -1
  182. package/dist/pdf-backend/primitives.d.ts.map +1 -1
  183. package/dist/pdf-backend/primitives.js +318 -18
  184. package/dist/pdf-backend/primitives.js.map +1 -1
  185. package/dist/pdf-backend/renderResourceBlock.d.ts +3 -1
  186. package/dist/pdf-backend/renderResourceBlock.d.ts.map +1 -1
  187. package/dist/pdf-backend/renderResourceBlock.js +97 -19
  188. package/dist/pdf-backend/renderResourceBlock.js.map +1 -1
  189. package/dist/pdf-backend/structureFlow.d.ts +70 -3
  190. package/dist/pdf-backend/structureFlow.d.ts.map +1 -1
  191. package/dist/pdf-backend/structureFlow.js +209 -27
  192. package/dist/pdf-backend/structureFlow.js.map +1 -1
  193. package/dist/pdf-backend/svgVector.d.ts +7 -2
  194. package/dist/pdf-backend/svgVector.d.ts.map +1 -1
  195. package/dist/pdf-backend/svgVector.js +157 -72
  196. package/dist/pdf-backend/svgVector.js.map +1 -1
  197. package/dist/pdf-backend/tagging.d.ts +1 -1
  198. package/dist/pdf-backend/tagging.d.ts.map +1 -1
  199. package/dist/pdf-backend/tagging.js.map +1 -1
  200. package/dist/worker/client.d.ts +1 -1
  201. package/dist/worker/client.d.ts.map +1 -1
  202. package/dist/worker/client.js +8 -0
  203. package/dist/worker/client.js.map +1 -1
  204. package/dist/worker/pdf.worker.js +1 -0
  205. package/dist/worker/pdf.worker.js.map +1 -1
  206. package/dist/worker/protocol.d.ts +8 -1
  207. package/dist/worker/protocol.d.ts.map +1 -1
  208. package/package.json +3 -3
@@ -1,43 +1,85 @@
1
1
  import { setCharacterSpacing } from 'pdf-lib';
2
2
  import { drawEmbeddedResource } from './renderResourceBlock';
3
3
  import { tagArtifact, tagContent } from './tagging';
4
- function tagSlotText(ctx, mark) {
4
+ function tagSlotText(ctx, mark, block) {
5
5
  if (!mark)
6
6
  return;
7
- if (mark.text)
7
+ if (mark.text && !block.artifact)
8
8
  tagContent(ctx, mark.text());
9
9
  else
10
10
  tagArtifact(ctx, mark.artifact);
11
11
  }
12
12
  import { parseFontString } from '../fontString';
13
- import { colorFromHex, drawTextPx, fillRectPx, pushClipRect, popClip, } from './primitives';
13
+ import { alphaOf, colorFromHex, drawTextPx, fillRectPx, pushClipOutline, pushClipRect, popClip, } from './primitives';
14
+ /** pdf-lib drawing options for a translucent fill / stroke (none when opaque). */
15
+ const opacity = (alpha) => (alpha < 1 ? { opacity: alpha } : {});
16
+ const borderOpacity = (alpha) => (alpha < 1 ? { borderOpacity: alpha } : {});
17
+ /** A rounded rectangle (px, top-down) as an SVG path in top-down points,
18
+ * for `drawSvgPath` anchored at the page's top-left corner. Clockwise on
19
+ * the page, or counter-clockwise with `reverse`, so that a filled path
20
+ * holding both leaves the inner one empty. A radius of 0 gives no arcs. */
21
+ function roundedRectSvgPath(ctx, xPx, yPx, wPx, hPx, radiusPx, reverse = false) {
22
+ const { scale } = ctx;
23
+ const r = Math.max(0, Math.min(radiusPx, wPx / 2, hPx / 2)) * scale;
24
+ const sx = xPx * scale;
25
+ const sy = yPx * scale;
26
+ const width = wPx * scale;
27
+ const height = hPx * scale;
28
+ const arc = (x, y) => (r > 0 ? ` A ${r} ${r} 0 0 ${reverse ? 0 : 1} ${x} ${y}` : '');
29
+ if (reverse) {
30
+ return (`M ${sx + r} ${sy}` +
31
+ arc(sx, sy + r) +
32
+ ` L ${sx} ${sy + height - r}` +
33
+ arc(sx + r, sy + height) +
34
+ ` L ${sx + width - r} ${sy + height}` +
35
+ arc(sx + width, sy + height - r) +
36
+ ` L ${sx + width} ${sy + r}` +
37
+ arc(sx + width - r, sy) +
38
+ ' Z');
39
+ }
40
+ return (`M ${sx + r} ${sy}` +
41
+ ` L ${sx + width - r} ${sy}` +
42
+ arc(sx + width, sy + r) +
43
+ ` L ${sx + width} ${sy + height - r}` +
44
+ arc(sx + width - r, sy + height) +
45
+ ` L ${sx + r} ${sy + height}` +
46
+ arc(sx, sy + height - r) +
47
+ ` L ${sx} ${sy + r}` +
48
+ arc(sx + r, sy) +
49
+ ' Z');
50
+ }
51
+ /**
52
+ * A box's fill, then its border inside the box (EF-131), as the canvas
53
+ * backend and the HTML output (`box-sizing: border-box`) draw it: the
54
+ * border's outer edge runs along the box edge. A square border is stroked
55
+ * on a path half its width in. A rounded one is filled as the ring between
56
+ * the box's outline and the same outline inset by the border width, its
57
+ * radius less that width and at least 0 (CSS's inner border edge), so the
58
+ * outer corner keeps the box's radius even where that is under half the
59
+ * border width. A border as wide as the box fills it. Up to postext 1.4 the
60
+ * stroke was centred on the edge.
61
+ */
14
62
  function drawRoundedBox(ctx, xPx, yPx, wPx, hPx, style) {
15
63
  if (wPx <= 0 || hPx <= 0)
16
64
  return;
17
65
  const { scale, pageHeightPt } = ctx;
18
66
  const radius = Math.max(0, Math.min(style.borderRadiusPx, wPx / 2, hPx / 2));
19
- const width = wPx * scale;
20
- const height = hPx * scale;
67
+ const bw = style.borderColor ? Math.max(0, style.borderWidthPx) : 0;
68
+ const solid = bw > 0 && (bw >= wPx || bw >= hPx);
69
+ const fillHex = solid ? style.borderColor : style.backgroundColor;
21
70
  if (radius <= 0) {
22
- const x = xPx * scale;
23
- const y = pageHeightPt - (yPx + hPx) * scale;
24
- if (style.backgroundColor) {
25
- ctx.page.drawRectangle({
26
- x,
27
- y,
28
- width,
29
- height,
30
- color: colorFromHex(style.backgroundColor, ctx.colorSpace),
31
- });
71
+ const rect = (x, y, w, h) => ({ x: x * scale, y: pageHeightPt - (y + h) * scale, width: w * scale, height: h * scale });
72
+ if (fillHex) {
73
+ const color = colorFromHex(fillHex, ctx.colorSpace);
74
+ ctx.page.drawRectangle({ ...rect(xPx, yPx, wPx, hPx), color, ...opacity(alphaOf(color)) });
32
75
  }
33
- if (style.borderColor && style.borderWidthPx > 0) {
76
+ if (bw > 0 && !solid) {
77
+ const borderColor = colorFromHex(style.borderColor, ctx.colorSpace);
34
78
  ctx.page.drawRectangle({
35
- x,
36
- y,
37
- width,
38
- height,
39
- borderColor: colorFromHex(style.borderColor, ctx.colorSpace),
40
- borderWidth: style.borderWidthPx * scale,
79
+ ...rect(xPx + bw / 2, yPx + bw / 2, wPx - bw, hPx - bw),
80
+ borderColor,
81
+ borderWidth: bw * scale,
82
+ ...borderOpacity(alphaOf(borderColor)),
41
83
  });
42
84
  }
43
85
  return;
@@ -46,31 +88,19 @@ function drawRoundedBox(ctx, xPx, yPx, wPx, hPx, style) {
46
88
  // SVG path. `drawSvgPath` interprets the path in SVG space (y grows
47
89
  // downwards) from the origin passed as `x`/`y`, so anchor it at the top-left
48
90
  // corner of the page and express the corners in top-down points.
49
- const r = radius * scale;
50
- const sx = xPx * scale;
51
- const sy = yPx * scale;
52
- const path = `M ${sx + r} ${sy}` +
53
- ` L ${sx + width - r} ${sy}` +
54
- ` A ${r} ${r} 0 0 1 ${sx + width} ${sy + r}` +
55
- ` L ${sx + width} ${sy + height - r}` +
56
- ` A ${r} ${r} 0 0 1 ${sx + width - r} ${sy + height}` +
57
- ` L ${sx + r} ${sy + height}` +
58
- ` A ${r} ${r} 0 0 1 ${sx} ${sy + height - r}` +
59
- ` L ${sx} ${sy + r}` +
60
- ` A ${r} ${r} 0 0 1 ${sx + r} ${sy} Z`;
61
91
  const origin = { x: 0, y: pageHeightPt };
62
- if (style.backgroundColor) {
63
- ctx.page.drawSvgPath(path, {
64
- ...origin,
65
- color: colorFromHex(style.backgroundColor, ctx.colorSpace),
66
- });
92
+ if (fillHex) {
93
+ const color = colorFromHex(fillHex, ctx.colorSpace);
94
+ ctx.page.drawSvgPath(roundedRectSvgPath(ctx, xPx, yPx, wPx, hPx, radius), { ...origin, color, ...opacity(alphaOf(color)) });
67
95
  }
68
- if (style.borderColor && style.borderWidthPx > 0) {
69
- ctx.page.drawSvgPath(path, {
70
- ...origin,
71
- borderColor: colorFromHex(style.borderColor, ctx.colorSpace),
72
- borderWidth: style.borderWidthPx * scale,
73
- });
96
+ if (bw > 0 && !solid) {
97
+ const color = colorFromHex(style.borderColor, ctx.colorSpace);
98
+ // drawSvgPath fills by the nonzero rule: the inner outline runs the
99
+ // other way round and stays empty.
100
+ let path = roundedRectSvgPath(ctx, xPx, yPx, wPx, hPx, radius);
101
+ if (wPx > 2 * bw && hPx > 2 * bw)
102
+ path += ` ${roundedRectSvgPath(ctx, xPx + bw, yPx + bw, wPx - 2 * bw, hPx - 2 * bw, radius - bw, true)}`;
103
+ ctx.page.drawSvgPath(path, { ...origin, color, ...opacity(alphaOf(color)) });
74
104
  }
75
105
  }
76
106
  function renderTextBlock(ctx, block, fontCache, mark) {
@@ -88,12 +118,27 @@ function renderTextBlock(ctx, block, fontCache, mark) {
88
118
  if (clip) {
89
119
  pushClipRect(ctx, block.bbox.x, block.bbox.y, block.bbox.width, block.bbox.height);
90
120
  }
91
- const tracked = block.letterSpacingPx !== undefined && block.letterSpacingPx > 0;
121
+ // Negative tracking tightens the letters (EF-82).
122
+ const tracked = block.letterSpacingPx !== undefined && block.letterSpacingPx !== 0;
92
123
  if (tracked)
93
124
  ctx.page.pushOperators(setCharacterSpacing(block.letterSpacingPx * ctx.scale));
94
- tagSlotText(ctx, mark);
125
+ const outline = block.stroke && block.stroke.widthPx > 0
126
+ ? { color: colorFromHex(block.stroke.color, ctx.colorSpace), widthPx: block.stroke.widthPx, hollow: block.stroke.hollow }
127
+ : undefined;
128
+ tagSlotText(ctx, mark, block);
95
129
  for (const line of block.lines) {
96
- drawTextPx(ctx, line.text, block.bbox.x + line.xOffset, line.baselineY, font, size, color);
130
+ if (!line.runs) {
131
+ drawTextPx(ctx, line.text, block.bbox.x + line.xOffset, line.baselineY, font, size, color, outline);
132
+ continue;
133
+ }
134
+ // Inline marks: each run in its own font, one after another.
135
+ let x = block.bbox.x + line.xOffset;
136
+ for (const run of line.runs) {
137
+ const runFont = fontCache.get(run.fontString) ?? font;
138
+ const runSize = parseFontString(run.fontString)?.sizePx ?? size;
139
+ drawTextPx(ctx, run.text, x, line.baselineY + (run.baselineShift ?? 0), runFont, runSize, color, outline);
140
+ x += run.width;
141
+ }
97
142
  }
98
143
  if (tracked)
99
144
  ctx.page.pushOperators(setCharacterSpacing(0));
@@ -123,6 +168,7 @@ function renderImageBlock(ctx, block, images) {
123
168
  drawEmbeddedResource(ctx, embedded, x, y, width, height);
124
169
  }
125
170
  else {
171
+ ctx.onMissingImage?.(block.fileId);
126
172
  fillRectPx(ctx, x, y, width, height, colorFromHex('#e8e8e8', ctx.colorSpace));
127
173
  }
128
174
  }
@@ -132,6 +178,17 @@ export function renderHeaderFooterSlot(ctx, slot, fontCache, images, mark) {
132
178
  renderTextBlock(ctx, block, fontCache, mark);
133
179
  continue;
134
180
  }
181
+ if (block.kind === 'box' && block.clip) {
182
+ // A callout stripe on a rounded frame, clipped to the frame's
183
+ // outline. The clip's graphics state opens first: a marked-content
184
+ // sequence must nest inside it, so the artifact opens after it.
185
+ pushClipOutline(ctx, block.clip);
186
+ if (mark)
187
+ tagArtifact(ctx, mark.artifact);
188
+ renderBoxBlock(ctx, block);
189
+ popClip(ctx);
190
+ continue;
191
+ }
135
192
  if (mark)
136
193
  tagArtifact(ctx, mark.artifact);
137
194
  if (block.kind === 'rule')
@@ -1 +1 @@
1
- {"version":3,"file":"headerFooter.js","sourceRoot":"","sources":["../../src/pdf-backend/headerFooter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"headerFooter.js","sourceRoot":"","sources":["../../src/pdf-backend/headerFooter.ts"],"names":[],"mappings":"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"}
@@ -1,25 +1,36 @@
1
1
  import type { SvgRasterizer } from './renderResourceBlock';
2
- import type { PdfColorSpace, VDTDocument } from 'postext';
2
+ import type { PdfColorSpace, RenderWarning, VDTDocument } from 'postext';
3
3
  import { type PdfFontProvider } from '../fontCache';
4
4
  import { type ResourceBytesProvider } from './renderResourceBlock';
5
5
  export interface RenderToPdfOptions {
6
6
  fontProvider: PdfFontProvider;
7
7
  pageNegative?: boolean;
8
8
  /** Emit a PDF outline tree (bookmarks) so readers can jump between
9
- * headings. Defaults to true. */
9
+ * headings. When omitted, the first document's
10
+ * `config.pdfGeneration.outlines`, else true. */
10
11
  outlines?: boolean;
11
12
  /** Force every colour in the rendered output through the given PDF colour
12
- * space. Defaults to `'rgb'` (pdf-lib's native output). */
13
+ * space. When omitted, the first document's `config.pdfGeneration`
14
+ * (`colorSpace`, while its `forceColorSpace` is on), else `'rgb'`
15
+ * (pdf-lib's native output). In `'cmyk'`, crop marks are painted in
16
+ * registration colour (the `/All` separation), so they print on every
17
+ * plate. */
13
18
  colorSpace?: PdfColorSpace;
14
19
  /** Resolver for resource binary bytes by `fileId`. The bytes are sniffed:
15
20
  * bitmaps embed as images, SVG markup is emitted as vector paths (or
16
21
  * rasterised in the browser when it uses unsupported features), and a
17
- * single-page PDF (`Resource.svg.pdfFileId` print masters) is embedded
18
- * verbatim. When omitted, resource images are drawn as placeholders. */
22
+ * single-page PDF is embedded verbatim. An SVG with a print master
23
+ * (`Resource.svg.pdfFileId`) is asked for by the master's id first,
24
+ * wherever it is drawn (a figure, a table cell, a design image, a box
25
+ * icon) — its first page is embedded in place of the SVG unless
26
+ * `diagramStyle.singleInk` is on — and by the SVG's own id when the
27
+ * master is missing or does not decode. When omitted, resource images
28
+ * are drawn as placeholders. */
19
29
  resourceBytes?: ResourceBytesProvider;
20
30
  /** Emit an accessible, tagged PDF (PDF/UA-1 oriented): logical structure
21
31
  * tree, alt text on figures, document language and title, decoration
22
- * flagged as artifacts. Defaults to true. */
32
+ * flagged as artifacts. When omitted, the first document's
33
+ * `config.pdfGeneration.accessible`, else true. */
23
34
  accessible?: boolean;
24
35
  /** Called as the render advances: after the fonts and resources are
25
36
  * embedded, after every page, and before the file is written. */
@@ -27,7 +38,45 @@ export interface RenderToPdfOptions {
27
38
  /** Rasterises an SVG the vector subset cannot draw. Defaults to the
28
39
  * document's `Image` + canvas; a worker must supply one (its host's). */
29
40
  rasterizeSvg?: SvgRasterizer;
41
+ /** Called for each non-fatal problem met while rendering (see
42
+ * {@link PdfWarning}): a face the font provider rejected and another cut
43
+ * of its family embedded instead (`fontFallback`), and an image with no
44
+ * bytes from `resourceBytes` (or bytes that did not decode), drawn as a
45
+ * placeholder and reported once per `fileId` as a `missingImage` warning
46
+ * carrying the page and the index of its document in `input`. Without
47
+ * it, a `fontFallback` goes to `console.warn` with its `message`, and a
48
+ * `missingImage` is not reported. */
49
+ onWarning?: (warning: PdfWarning) => void;
30
50
  }
51
+ /** A face set in another cut of its family. The render goes on; the text
52
+ * keeps its layout but is drawn in the substitute face. */
53
+ export interface PdfFontFallbackWarning {
54
+ /** `fontFallback`: the font provider rejected a face the pages use, and
55
+ * another face of the same family is embedded in its place — the first
56
+ * that loads among the nine standard weights in CSS font-matching order,
57
+ * in the same style first and then in the other (italic ↔ upright). The
58
+ * text keeps its layout (positions come from the VDT) but is drawn in
59
+ * the substitute face. */
60
+ kind: 'fontFallback';
61
+ family: string;
62
+ weight: number;
63
+ style: 'normal' | 'italic';
64
+ /** The face embedded instead. */
65
+ fallback: {
66
+ weight: number;
67
+ style: 'normal' | 'italic';
68
+ };
69
+ /** The provider's error message for the rejected face. */
70
+ reason: string;
71
+ /** A one-line English description, for logs. */
72
+ message: string;
73
+ }
74
+ /** A non-fatal problem met while rendering a PDF. The render goes on; the
75
+ * output differs from what the document asked for in the way described:
76
+ * a font fallback ({@link PdfFontFallbackWarning}), or one of the engine's
77
+ * render warnings (`RenderWarning`: an image painted as a placeholder,
78
+ * `formatWarning` describes it). Narrow on `kind`. */
79
+ export type PdfWarning = PdfFontFallbackWarning | RenderWarning;
31
80
  export interface RenderProgress {
32
81
  phase: 'prepare' | 'pages' | 'save';
33
82
  /** Pages rendered so far, and how many there are. */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pdf-backend/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAoB,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE7E,OAAO,KAAK,EAAqB,aAAa,EAAY,WAAW,EAAW,MAAM,SAAS,CAAC;AAEhG,OAAO,EAAa,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAqB/D,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,uBAAuB,CAAC;AAK/B,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,eAAe,CAAC;IAC9B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;sCACkC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;gEAC4D;IAC5D,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B;;;;6EAIyE;IACzE,aAAa,CAAC,EAAE,qBAAqB,CAAC;IACtC;;kDAE8C;IAC9C,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;sEACkE;IAClE,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAC;IAChD;8EAC0E;IAC1E,YAAY,CAAC,EAAE,aAAa,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;IACpC,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,YAAY,EAAE,eAAe,EAAE,CAAC;AAChC,YAAY,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAsLnE;;;;;;GAMG;AACH,wBAAsB,WAAW,CAC/B,KAAK,EAAE,WAAW,GAAG,WAAW,EAAE,EAClC,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,UAAU,CAAC,CA6ErB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pdf-backend/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAoB,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE7E,OAAO,KAAK,EAAqB,aAAa,EAAE,aAAa,EAAY,WAAW,EAAW,MAAM,SAAS,CAAC;AAE/G,OAAO,EAAgC,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAqBlF,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,uBAAuB,CAAC;AAK/B,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,eAAe,CAAC;IAC9B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;sDAEkD;IAClD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;iBAKa;IACb,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B;;;;;;;;;qCASiC;IACjC,aAAa,CAAC,EAAE,qBAAqB,CAAC;IACtC;;;wDAGoD;IACpD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;sEACkE;IAClE,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAC;IAChD;8EAC0E;IAC1E,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B;;;;;;;0CAOsC;IACtC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,IAAI,CAAC;CAC3C;AAED;4DAC4D;AAC5D,MAAM,WAAW,sBAAsB;IACrC;;;;;+BAK2B;IAC3B,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC3B,iCAAiC;IACjC,QAAQ,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,QAAQ,GAAG,QAAQ,CAAA;KAAE,CAAC;IACzD,0DAA0D;IAC1D,MAAM,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;uDAIuD;AACvD,MAAM,MAAM,UAAU,GAAG,sBAAsB,GAAG,aAAa,CAAC;AAYhE,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;IACpC,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,YAAY,EAAE,eAAe,EAAE,CAAC;AAChC,YAAY,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAqPnE;;;;;;GAMG;AACH,wBAAsB,WAAW,CAC/B,KAAK,EAAE,WAAW,GAAG,WAAW,EAAE,EAClC,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,UAAU,CAAC,CAgGrB"}