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.
- package/README.md +3 -3
- package/dist/__tests__/accessibility.test.js +66 -0
- package/dist/__tests__/accessibility.test.js.map +1 -1
- package/dist/__tests__/alpha.test.d.ts +2 -0
- package/dist/__tests__/alpha.test.d.ts.map +1 -0
- package/dist/__tests__/alpha.test.js +164 -0
- package/dist/__tests__/alpha.test.js.map +1 -0
- package/dist/__tests__/bleedClip.test.d.ts +2 -0
- package/dist/__tests__/bleedClip.test.d.ts.map +1 -0
- package/dist/__tests__/bleedClip.test.js +83 -0
- package/dist/__tests__/bleedClip.test.js.map +1 -0
- package/dist/__tests__/boxBorderInside.test.d.ts +2 -0
- package/dist/__tests__/boxBorderInside.test.d.ts.map +1 -0
- package/dist/__tests__/boxBorderInside.test.js +63 -0
- package/dist/__tests__/boxBorderInside.test.js.map +1 -0
- package/dist/__tests__/calloutRuntTracking.test.d.ts +2 -0
- package/dist/__tests__/calloutRuntTracking.test.d.ts.map +1 -0
- package/dist/__tests__/calloutRuntTracking.test.js +72 -0
- package/dist/__tests__/calloutRuntTracking.test.js.map +1 -0
- package/dist/__tests__/calloutStripeRadius.test.d.ts +2 -0
- package/dist/__tests__/calloutStripeRadius.test.d.ts.map +1 -0
- package/dist/__tests__/calloutStripeRadius.test.js +90 -0
- package/dist/__tests__/calloutStripeRadius.test.js.map +1 -0
- package/dist/__tests__/chipVerticalPadding.test.d.ts +2 -0
- package/dist/__tests__/chipVerticalPadding.test.d.ts.map +1 -0
- package/dist/__tests__/chipVerticalPadding.test.js +71 -0
- package/dist/__tests__/chipVerticalPadding.test.js.map +1 -0
- package/dist/__tests__/chips.test.js +20 -3
- package/dist/__tests__/chips.test.js.map +1 -1
- package/dist/__tests__/documentLanguage.test.d.ts +2 -0
- package/dist/__tests__/documentLanguage.test.d.ts.map +1 -0
- package/dist/__tests__/documentLanguage.test.js +44 -0
- package/dist/__tests__/documentLanguage.test.js.map +1 -0
- package/dist/__tests__/fallbackSpaces.test.d.ts +2 -0
- package/dist/__tests__/fallbackSpaces.test.d.ts.map +1 -0
- package/dist/__tests__/fallbackSpaces.test.js +156 -0
- package/dist/__tests__/fallbackSpaces.test.js.map +1 -0
- package/dist/__tests__/floatReadingOrder.test.d.ts +2 -0
- package/dist/__tests__/floatReadingOrder.test.d.ts.map +1 -0
- package/dist/__tests__/floatReadingOrder.test.js +208 -0
- package/dist/__tests__/floatReadingOrder.test.js.map +1 -0
- package/dist/__tests__/fontEmbedding.test.d.ts +2 -0
- package/dist/__tests__/fontEmbedding.test.d.ts.map +1 -0
- package/dist/__tests__/fontEmbedding.test.js +118 -0
- package/dist/__tests__/fontEmbedding.test.js.map +1 -0
- package/dist/__tests__/fontFaces.test.d.ts +2 -0
- package/dist/__tests__/fontFaces.test.d.ts.map +1 -0
- package/dist/__tests__/fontFaces.test.js +193 -0
- package/dist/__tests__/fontFaces.test.js.map +1 -0
- package/dist/__tests__/fontStack.test.d.ts +2 -0
- package/dist/__tests__/fontStack.test.d.ts.map +1 -0
- package/dist/__tests__/fontStack.test.js +48 -0
- package/dist/__tests__/fontStack.test.js.map +1 -0
- package/dist/__tests__/headerFooter.test.js +83 -1
- package/dist/__tests__/headerFooter.test.js.map +1 -1
- package/dist/__tests__/headingAlign.test.d.ts +2 -0
- package/dist/__tests__/headingAlign.test.d.ts.map +1 -0
- package/dist/__tests__/headingAlign.test.js +66 -0
- package/dist/__tests__/headingAlign.test.js.map +1 -0
- package/dist/__tests__/hiddenHeadings.test.d.ts +2 -0
- package/dist/__tests__/hiddenHeadings.test.d.ts.map +1 -0
- package/dist/__tests__/hiddenHeadings.test.js +96 -0
- package/dist/__tests__/hiddenHeadings.test.js.map +1 -0
- package/dist/__tests__/lineTracking.test.d.ts +2 -0
- package/dist/__tests__/lineTracking.test.d.ts.map +1 -0
- package/dist/__tests__/lineTracking.test.js +80 -0
- package/dist/__tests__/lineTracking.test.js.map +1 -0
- package/dist/__tests__/measuredLines.test.d.ts +2 -0
- package/dist/__tests__/measuredLines.test.d.ts.map +1 -0
- package/dist/__tests__/measuredLines.test.js +255 -0
- package/dist/__tests__/measuredLines.test.js.map +1 -0
- package/dist/__tests__/metadata.test.d.ts +2 -0
- package/dist/__tests__/metadata.test.d.ts.map +1 -0
- package/dist/__tests__/metadata.test.js +51 -0
- package/dist/__tests__/metadata.test.js.map +1 -0
- package/dist/__tests__/outlineTitles.test.d.ts +2 -0
- package/dist/__tests__/outlineTitles.test.d.ts.map +1 -0
- package/dist/__tests__/outlineTitles.test.js +59 -0
- package/dist/__tests__/outlineTitles.test.js.map +1 -0
- package/dist/__tests__/pdfGenerationConfig.test.d.ts +2 -0
- package/dist/__tests__/pdfGenerationConfig.test.d.ts.map +1 -0
- package/dist/__tests__/pdfGenerationConfig.test.js +76 -0
- package/dist/__tests__/pdfGenerationConfig.test.js.map +1 -0
- package/dist/__tests__/pdfWorker.test.d.ts +2 -0
- package/dist/__tests__/pdfWorker.test.d.ts.map +1 -0
- package/dist/__tests__/pdfWorker.test.js +123 -0
- package/dist/__tests__/pdfWorker.test.js.map +1 -0
- package/dist/__tests__/printMarks.test.d.ts +2 -0
- package/dist/__tests__/printMarks.test.d.ts.map +1 -0
- package/dist/__tests__/printMarks.test.js +170 -0
- package/dist/__tests__/printMarks.test.js.map +1 -0
- package/dist/__tests__/printMaster.test.d.ts +2 -0
- package/dist/__tests__/printMaster.test.d.ts.map +1 -0
- package/dist/__tests__/printMaster.test.js +161 -0
- package/dist/__tests__/printMaster.test.js.map +1 -0
- package/dist/__tests__/renderWarnings.test.d.ts +2 -0
- package/dist/__tests__/renderWarnings.test.d.ts.map +1 -0
- package/dist/__tests__/renderWarnings.test.js +89 -0
- package/dist/__tests__/renderWarnings.test.js.map +1 -0
- package/dist/__tests__/repeatedHyphen.test.d.ts +2 -0
- package/dist/__tests__/repeatedHyphen.test.d.ts.map +1 -0
- package/dist/__tests__/repeatedHyphen.test.js +125 -0
- package/dist/__tests__/repeatedHyphen.test.js.map +1 -0
- package/dist/__tests__/scriptStacking.test.d.ts +2 -0
- package/dist/__tests__/scriptStacking.test.d.ts.map +1 -0
- package/dist/__tests__/scriptStacking.test.js +66 -0
- package/dist/__tests__/scriptStacking.test.js.map +1 -0
- package/dist/__tests__/sectionColumnRule.test.d.ts +2 -0
- package/dist/__tests__/sectionColumnRule.test.d.ts.map +1 -0
- package/dist/__tests__/sectionColumnRule.test.js +144 -0
- package/dist/__tests__/sectionColumnRule.test.js.map +1 -0
- package/dist/__tests__/svgFormReuse.test.d.ts +2 -0
- package/dist/__tests__/svgFormReuse.test.d.ts.map +1 -0
- package/dist/__tests__/svgFormReuse.test.js +102 -0
- package/dist/__tests__/svgFormReuse.test.js.map +1 -0
- package/dist/__tests__/svgVector.test.js +85 -11
- package/dist/__tests__/svgVector.test.js.map +1 -1
- package/dist/__tests__/tableFillSeams.test.d.ts +2 -0
- package/dist/__tests__/tableFillSeams.test.d.ts.map +1 -0
- package/dist/__tests__/tableFillSeams.test.js +72 -0
- package/dist/__tests__/tableFillSeams.test.js.map +1 -0
- package/dist/__tests__/tocLeaderKerning.test.d.ts +2 -0
- package/dist/__tests__/tocLeaderKerning.test.d.ts.map +1 -0
- package/dist/__tests__/tocLeaderKerning.test.js +84 -0
- package/dist/__tests__/tocLeaderKerning.test.js.map +1 -0
- package/dist/__tests__/tocNumberBaseline.test.d.ts +2 -0
- package/dist/__tests__/tocNumberBaseline.test.d.ts.map +1 -0
- package/dist/__tests__/tocNumberBaseline.test.js +72 -0
- package/dist/__tests__/tocNumberBaseline.test.js.map +1 -0
- package/dist/__tests__/tocTagging.test.d.ts +2 -0
- package/dist/__tests__/tocTagging.test.d.ts.map +1 -0
- package/dist/__tests__/tocTagging.test.js +120 -0
- package/dist/__tests__/tocTagging.test.js.map +1 -0
- package/dist/__tests__/trackedLineAlign.test.d.ts +2 -0
- package/dist/__tests__/trackedLineAlign.test.d.ts.map +1 -0
- package/dist/__tests__/trackedLineAlign.test.js +73 -0
- package/dist/__tests__/trackedLineAlign.test.js.map +1 -0
- package/dist/__tests__/uriLinks.test.d.ts +2 -0
- package/dist/__tests__/uriLinks.test.d.ts.map +1 -0
- package/dist/__tests__/uriLinks.test.js +103 -0
- package/dist/__tests__/uriLinks.test.js.map +1 -0
- package/dist/colors.d.ts +18 -3
- package/dist/colors.d.ts.map +1 -1
- package/dist/colors.js +77 -25
- package/dist/colors.js.map +1 -1
- package/dist/fontCache.d.ts +67 -4
- package/dist/fontCache.d.ts.map +1 -1
- package/dist/fontCache.js +200 -23
- package/dist/fontCache.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/pdf-backend/blockRender.d.ts.map +1 -1
- package/dist/pdf-backend/blockRender.js +127 -28
- package/dist/pdf-backend/blockRender.js.map +1 -1
- package/dist/pdf-backend/fallbackSpaces.d.ts +37 -0
- package/dist/pdf-backend/fallbackSpaces.d.ts.map +1 -0
- package/dist/pdf-backend/fallbackSpaces.js +119 -0
- package/dist/pdf-backend/fallbackSpaces.js.map +1 -0
- package/dist/pdf-backend/fontHelpers.d.ts +10 -1
- package/dist/pdf-backend/fontHelpers.d.ts.map +1 -1
- package/dist/pdf-backend/fontHelpers.js +111 -65
- package/dist/pdf-backend/fontHelpers.js.map +1 -1
- package/dist/pdf-backend/headerFooter.d.ts +4 -2
- package/dist/pdf-backend/headerFooter.d.ts.map +1 -1
- package/dist/pdf-backend/headerFooter.js +105 -48
- package/dist/pdf-backend/headerFooter.js.map +1 -1
- package/dist/pdf-backend/index.d.ts +55 -6
- package/dist/pdf-backend/index.d.ts.map +1 -1
- package/dist/pdf-backend/index.js +135 -35
- package/dist/pdf-backend/index.js.map +1 -1
- package/dist/pdf-backend/links.d.ts +82 -1
- package/dist/pdf-backend/links.d.ts.map +1 -1
- package/dist/pdf-backend/links.js +141 -3
- package/dist/pdf-backend/links.js.map +1 -1
- package/dist/pdf-backend/outlines.d.ts.map +1 -1
- package/dist/pdf-backend/outlines.js +7 -0
- package/dist/pdf-backend/outlines.js.map +1 -1
- package/dist/pdf-backend/pageDecorations.d.ts.map +1 -1
- package/dist/pdf-backend/pageDecorations.js +42 -26
- package/dist/pdf-backend/pageDecorations.js.map +1 -1
- package/dist/pdf-backend/primitives.d.ts +61 -1
- package/dist/pdf-backend/primitives.d.ts.map +1 -1
- package/dist/pdf-backend/primitives.js +318 -18
- package/dist/pdf-backend/primitives.js.map +1 -1
- package/dist/pdf-backend/renderResourceBlock.d.ts +3 -1
- package/dist/pdf-backend/renderResourceBlock.d.ts.map +1 -1
- package/dist/pdf-backend/renderResourceBlock.js +97 -19
- package/dist/pdf-backend/renderResourceBlock.js.map +1 -1
- package/dist/pdf-backend/structureFlow.d.ts +70 -3
- package/dist/pdf-backend/structureFlow.d.ts.map +1 -1
- package/dist/pdf-backend/structureFlow.js +209 -27
- package/dist/pdf-backend/structureFlow.js.map +1 -1
- package/dist/pdf-backend/svgVector.d.ts +7 -2
- package/dist/pdf-backend/svgVector.d.ts.map +1 -1
- package/dist/pdf-backend/svgVector.js +157 -72
- package/dist/pdf-backend/svgVector.js.map +1 -1
- package/dist/pdf-backend/tagging.d.ts +1 -1
- package/dist/pdf-backend/tagging.d.ts.map +1 -1
- package/dist/pdf-backend/tagging.js.map +1 -1
- package/dist/worker/client.d.ts +1 -1
- package/dist/worker/client.d.ts.map +1 -1
- package/dist/worker/client.js +8 -0
- package/dist/worker/client.js.map +1 -1
- package/dist/worker/pdf.worker.js +1 -0
- package/dist/worker/pdf.worker.js.map +1 -1
- package/dist/worker/protocol.d.ts +8 -1
- package/dist/worker/protocol.d.ts.map +1 -1
- 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
|
|
20
|
-
const
|
|
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
|
|
23
|
-
|
|
24
|
-
|
|
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 (
|
|
76
|
+
if (bw > 0 && !solid) {
|
|
77
|
+
const borderColor = colorFromHex(style.borderColor, ctx.colorSpace);
|
|
34
78
|
ctx.page.drawRectangle({
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
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 (
|
|
63
|
-
|
|
64
|
-
|
|
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 (
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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":"AAQA,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAyB,MAAM,uBAAuB,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,UAAU,EAAsC,MAAM,WAAW,CAAC;
|
|
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.
|
|
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.
|
|
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
|
|
18
|
-
*
|
|
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.
|
|
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;
|
|
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"}
|