@hadi77ir/pdfme-svg 0.1.0
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 +63 -0
- package/dist/applyparseattributes.d.ts +6 -0
- package/dist/applyparseattributes.d.ts.map +1 -0
- package/dist/applyparseattributes.js +333 -0
- package/dist/applyparseattributes.js.map +1 -0
- package/dist/context/attributestate.d.ts +34 -0
- package/dist/context/attributestate.d.ts.map +1 -0
- package/dist/context/attributestate.js +109 -0
- package/dist/context/attributestate.js.map +1 -0
- package/dist/context/context.d.ts +59 -0
- package/dist/context/context.d.ts.map +1 -0
- package/dist/context/context.js +46 -0
- package/dist/context/context.js.map +1 -0
- package/dist/context/referenceshandler.d.ts +15 -0
- package/dist/context/referenceshandler.d.ts.map +1 -0
- package/dist/context/referenceshandler.js +31 -0
- package/dist/context/referenceshandler.js.map +1 -0
- package/dist/context/stylesheets.d.ts +13 -0
- package/dist/context/stylesheets.d.ts.map +1 -0
- package/dist/context/stylesheets.js +163 -0
- package/dist/context/stylesheets.js.map +1 -0
- package/dist/context/textmeasure.d.ts +19 -0
- package/dist/context/textmeasure.d.ts.map +1 -0
- package/dist/context/textmeasure.js +93 -0
- package/dist/context/textmeasure.js.map +1 -0
- package/dist/context/viewport.d.ts +6 -0
- package/dist/context/viewport.d.ts.map +1 -0
- package/dist/context/viewport.js +7 -0
- package/dist/context/viewport.js.map +1 -0
- package/dist/fill/ColorFill.d.ts +10 -0
- package/dist/fill/ColorFill.d.ts.map +1 -0
- package/dist/fill/ColorFill.js +10 -0
- package/dist/fill/ColorFill.js.map +1 -0
- package/dist/fill/Fill.d.ts +14 -0
- package/dist/fill/Fill.d.ts.map +1 -0
- package/dist/fill/Fill.js +2 -0
- package/dist/fill/Fill.js.map +1 -0
- package/dist/fill/GradientFill.d.ts +11 -0
- package/dist/fill/GradientFill.d.ts.map +1 -0
- package/dist/fill/GradientFill.js +37 -0
- package/dist/fill/GradientFill.js.map +1 -0
- package/dist/fill/PatternFill.d.ts +11 -0
- package/dist/fill/PatternFill.d.ts.map +1 -0
- package/dist/fill/PatternFill.js +67 -0
- package/dist/fill/PatternFill.js.map +1 -0
- package/dist/fill/parseFill.d.ts +4 -0
- package/dist/fill/parseFill.d.ts.map +1 -0
- package/dist/fill/parseFill.js +61 -0
- package/dist/fill/parseFill.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +232 -0
- package/dist/index.js.map +1 -0
- package/dist/jspdf-shim.d.ts +132 -0
- package/dist/jspdf-shim.d.ts.map +1 -0
- package/dist/jspdf-shim.js +744 -0
- package/dist/jspdf-shim.js.map +1 -0
- package/dist/jspdf.d.ts +2 -0
- package/dist/jspdf.d.ts.map +1 -0
- package/dist/jspdf.js +2 -0
- package/dist/jspdf.js.map +1 -0
- package/dist/markerlist.d.ts +24 -0
- package/dist/markerlist.d.ts.map +1 -0
- package/dist/markerlist.js +47 -0
- package/dist/markerlist.js.map +1 -0
- package/dist/nodes/anchor.d.ts +6 -0
- package/dist/nodes/anchor.d.ts.map +1 -0
- package/dist/nodes/anchor.js +15 -0
- package/dist/nodes/anchor.js.map +1 -0
- package/dist/nodes/circle.d.ts +11 -0
- package/dist/nodes/circle.d.ts.map +1 -0
- package/dist/nodes/circle.js +17 -0
- package/dist/nodes/circle.js.map +1 -0
- package/dist/nodes/clippath.d.ts +10 -0
- package/dist/nodes/clippath.d.ts.map +1 -0
- package/dist/nodes/clippath.js +48 -0
- package/dist/nodes/clippath.js.map +1 -0
- package/dist/nodes/containernode.d.ts +8 -0
- package/dist/nodes/containernode.d.ts.map +1 -0
- package/dist/nodes/containernode.js +13 -0
- package/dist/nodes/containernode.js.map +1 -0
- package/dist/nodes/ellipse.d.ts +9 -0
- package/dist/nodes/ellipse.d.ts.map +1 -0
- package/dist/nodes/ellipse.js +14 -0
- package/dist/nodes/ellipse.js.map +1 -0
- package/dist/nodes/ellipsebase.d.ts +14 -0
- package/dist/nodes/ellipsebase.d.ts.map +1 -0
- package/dist/nodes/ellipsebase.js +30 -0
- package/dist/nodes/ellipsebase.js.map +1 -0
- package/dist/nodes/geometrynode.d.ts +19 -0
- package/dist/nodes/geometrynode.d.ts.map +1 -0
- package/dist/nodes/geometrynode.js +213 -0
- package/dist/nodes/geometrynode.js.map +1 -0
- package/dist/nodes/gradient.d.ts +28 -0
- package/dist/nodes/gradient.d.ts.map +1 -0
- package/dist/nodes/gradient.js +87 -0
- package/dist/nodes/gradient.js.map +1 -0
- package/dist/nodes/graphicsnode.d.ts +4 -0
- package/dist/nodes/graphicsnode.d.ts.map +1 -0
- package/dist/nodes/graphicsnode.js +4 -0
- package/dist/nodes/graphicsnode.js.map +1 -0
- package/dist/nodes/group.d.ts +8 -0
- package/dist/nodes/group.d.ts.map +1 -0
- package/dist/nodes/group.js +11 -0
- package/dist/nodes/group.js.map +1 -0
- package/dist/nodes/image.d.ts +23 -0
- package/dist/nodes/image.d.ts.map +1 -0
- package/dist/nodes/image.js +152 -0
- package/dist/nodes/image.js.map +1 -0
- package/dist/nodes/line.d.ts +13 -0
- package/dist/nodes/line.d.ts.map +1 -0
- package/dist/nodes/line.js +30 -0
- package/dist/nodes/line.js.map +1 -0
- package/dist/nodes/lineargradient.d.ts +7 -0
- package/dist/nodes/lineargradient.d.ts.map +1 -0
- package/dist/nodes/lineargradient.js +15 -0
- package/dist/nodes/lineargradient.js.map +1 -0
- package/dist/nodes/marker.d.ts +11 -0
- package/dist/nodes/marker.d.ts.map +1 -0
- package/dist/nodes/marker.js +70 -0
- package/dist/nodes/marker.js.map +1 -0
- package/dist/nodes/nonrenderednode.d.ts +11 -0
- package/dist/nodes/nonrenderednode.d.ts.map +1 -0
- package/dist/nodes/nonrenderednode.js +15 -0
- package/dist/nodes/nonrenderednode.js.map +1 -0
- package/dist/nodes/path.d.ts +12 -0
- package/dist/nodes/path.d.ts.map +1 -0
- package/dist/nodes/path.js +75 -0
- package/dist/nodes/path.js.map +1 -0
- package/dist/nodes/pattern.d.ts +11 -0
- package/dist/nodes/pattern.d.ts.map +1 -0
- package/dist/nodes/pattern.js +39 -0
- package/dist/nodes/pattern.js.map +1 -0
- package/dist/nodes/polygon.d.ts +6 -0
- package/dist/nodes/polygon.d.ts.map +1 -0
- package/dist/nodes/polygon.js +7 -0
- package/dist/nodes/polygon.js.map +1 -0
- package/dist/nodes/polyline.d.ts +6 -0
- package/dist/nodes/polyline.d.ts.map +1 -0
- package/dist/nodes/polyline.js +7 -0
- package/dist/nodes/polyline.js.map +1 -0
- package/dist/nodes/radialgradient.d.ts +7 -0
- package/dist/nodes/radialgradient.d.ts.map +1 -0
- package/dist/nodes/radialgradient.js +21 -0
- package/dist/nodes/radialgradient.js.map +1 -0
- package/dist/nodes/rect.d.ts +12 -0
- package/dist/nodes/rect.d.ts.map +1 -0
- package/dist/nodes/rect.js +50 -0
- package/dist/nodes/rect.js.map +1 -0
- package/dist/nodes/renderednode.d.ts +7 -0
- package/dist/nodes/renderednode.d.ts.map +1 -0
- package/dist/nodes/renderednode.js +43 -0
- package/dist/nodes/renderednode.js.map +1 -0
- package/dist/nodes/svg.d.ts +21 -0
- package/dist/nodes/svg.d.ts.map +1 -0
- package/dist/nodes/svg.js +175 -0
- package/dist/nodes/svg.js.map +1 -0
- package/dist/nodes/svgnode.d.ts +18 -0
- package/dist/nodes/svgnode.d.ts.map +1 -0
- package/dist/nodes/svgnode.js +30 -0
- package/dist/nodes/svgnode.js.map +1 -0
- package/dist/nodes/symbol.d.ts +10 -0
- package/dist/nodes/symbol.d.ts.map +1 -0
- package/dist/nodes/symbol.js +62 -0
- package/dist/nodes/symbol.js.map +1 -0
- package/dist/nodes/text.d.ts +13 -0
- package/dist/nodes/text.d.ts.map +1 -0
- package/dist/nodes/text.js +172 -0
- package/dist/nodes/text.js.map +1 -0
- package/dist/nodes/traverse.d.ts +15 -0
- package/dist/nodes/traverse.d.ts.map +1 -0
- package/dist/nodes/traverse.js +47 -0
- package/dist/nodes/traverse.js.map +1 -0
- package/dist/nodes/use.d.ts +15 -0
- package/dist/nodes/use.d.ts.map +1 -0
- package/dist/nodes/use.js +99 -0
- package/dist/nodes/use.js.map +1 -0
- package/dist/nodes/void.d.ts +11 -0
- package/dist/nodes/void.d.ts.map +1 -0
- package/dist/nodes/void.js +19 -0
- package/dist/nodes/void.js.map +1 -0
- package/dist/parse.d.ts +5 -0
- package/dist/parse.d.ts.map +1 -0
- package/dist/parse.js +96 -0
- package/dist/parse.js.map +1 -0
- package/dist/svg2pdf.d.ts +10 -0
- package/dist/svg2pdf.d.ts.map +1 -0
- package/dist/svg2pdf.js +49 -0
- package/dist/svg2pdf.js.map +1 -0
- package/dist/textchunk.d.ts +36 -0
- package/dist/textchunk.d.ts.map +1 -0
- package/dist/textchunk.js +144 -0
- package/dist/textchunk.js.map +1 -0
- package/dist/utils/applyclippath.d.ts +6 -0
- package/dist/utils/applyclippath.d.ts.map +1 -0
- package/dist/utils/applyclippath.js +20 -0
- package/dist/utils/applyclippath.js.map +1 -0
- package/dist/utils/bbox.d.ts +6 -0
- package/dist/utils/bbox.d.ts.map +1 -0
- package/dist/utils/bbox.js +62 -0
- package/dist/utils/bbox.js.map +1 -0
- package/dist/utils/constants.d.ts +7 -0
- package/dist/utils/constants.d.ts.map +1 -0
- package/dist/utils/constants.js +17 -0
- package/dist/utils/constants.js.map +1 -0
- package/dist/utils/fonts.d.ts +14 -0
- package/dist/utils/fonts.d.ts.map +1 -0
- package/dist/utils/fonts.js +59 -0
- package/dist/utils/fonts.js.map +1 -0
- package/dist/utils/geometry.d.ts +11 -0
- package/dist/utils/geometry.d.ts.map +1 -0
- package/dist/utils/geometry.js +26 -0
- package/dist/utils/geometry.js.map +1 -0
- package/dist/utils/misc.d.ts +12 -0
- package/dist/utils/misc.d.ts.map +1 -0
- package/dist/utils/misc.js +26 -0
- package/dist/utils/misc.js.map +1 -0
- package/dist/utils/node.d.ts +9 -0
- package/dist/utils/node.d.ts.map +1 -0
- package/dist/utils/node.js +58 -0
- package/dist/utils/node.js.map +1 -0
- package/dist/utils/parsing.d.ts +13 -0
- package/dist/utils/parsing.d.ts.map +1 -0
- package/dist/utils/parsing.js +41 -0
- package/dist/utils/parsing.js.map +1 -0
- package/dist/utils/path.d.ts +39 -0
- package/dist/utils/path.d.ts.map +1 -0
- package/dist/utils/path.js +86 -0
- package/dist/utils/path.js.map +1 -0
- package/dist/utils/rgbcolor.d.ts +15 -0
- package/dist/utils/rgbcolor.d.ts.map +1 -0
- package/dist/utils/rgbcolor.js +297 -0
- package/dist/utils/rgbcolor.js.map +1 -0
- package/dist/utils/text.d.ts +15 -0
- package/dist/utils/text.d.ts.map +1 -0
- package/dist/utils/text.js +57 -0
- package/dist/utils/text.js.map +1 -0
- package/dist/utils/transform.d.ts +5 -0
- package/dist/utils/transform.d.ts.map +1 -0
- package/dist/utils/transform.js +113 -0
- package/dist/utils/transform.js.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { Context } from '../context/context';
|
|
2
|
+
import { defaultBoundingBox } from '../utils/bbox';
|
|
3
|
+
import { getAttribute, nodeIs, svgNodeIsVisible } from '../utils/node';
|
|
4
|
+
import { GraphicsNode } from './graphicsnode';
|
|
5
|
+
import { computeViewBoxTransform } from '../utils/transform';
|
|
6
|
+
import { parseFloats } from '../utils/parsing';
|
|
7
|
+
import { Symbol } from './symbol';
|
|
8
|
+
import { Viewport } from '../context/viewport';
|
|
9
|
+
import { AttributeState } from '../context/attributestate';
|
|
10
|
+
/**
|
|
11
|
+
* Draws the element referenced by a use node, makes use of pdf's XObjects/FormObjects so nodes are only written once
|
|
12
|
+
* to the pdf document. This highly reduces the file size and computation time.
|
|
13
|
+
*/
|
|
14
|
+
export class Use extends GraphicsNode {
|
|
15
|
+
async renderCore(context) {
|
|
16
|
+
const pf = parseFloat;
|
|
17
|
+
const url = this.element.getAttribute('href') || this.element.getAttribute('xlink:href');
|
|
18
|
+
// just in case someone has the idea to use empty use-tags, wtf???
|
|
19
|
+
if (!url)
|
|
20
|
+
return;
|
|
21
|
+
// get the size of the referenced form object (to apply the correct scaling)
|
|
22
|
+
const id = url.substring(1);
|
|
23
|
+
const refNode = context.refsHandler.get(id);
|
|
24
|
+
const refNodeOpensViewport = nodeIs(refNode.element, 'symbol,svg') && refNode.element.hasAttribute('viewBox');
|
|
25
|
+
// scale and position it right
|
|
26
|
+
let x = pf(getAttribute(this.element, context.styleSheets, 'x') || '0');
|
|
27
|
+
let y = pf(getAttribute(this.element, context.styleSheets, 'y') || '0');
|
|
28
|
+
// calculate the transformation matrix
|
|
29
|
+
let width = undefined;
|
|
30
|
+
let height = undefined;
|
|
31
|
+
let t;
|
|
32
|
+
if (refNodeOpensViewport) {
|
|
33
|
+
// <use> inherits width/height only to svg/symbol
|
|
34
|
+
// if there is no viewBox attribute, width/height don't have an effect
|
|
35
|
+
// in theory, the default value for width/height is 100%, but we currently don't support this
|
|
36
|
+
width = pf(getAttribute(this.element, context.styleSheets, 'width') ||
|
|
37
|
+
getAttribute(refNode.element, context.styleSheets, 'width') ||
|
|
38
|
+
'0');
|
|
39
|
+
height = pf(getAttribute(this.element, context.styleSheets, 'height') ||
|
|
40
|
+
getAttribute(refNode.element, context.styleSheets, 'height') ||
|
|
41
|
+
'0');
|
|
42
|
+
// accumulate x/y to calculate the viewBox transform
|
|
43
|
+
x += pf(getAttribute(refNode.element, context.styleSheets, 'x') || '0');
|
|
44
|
+
y += pf(getAttribute(refNode.element, context.styleSheets, 'y') || '0');
|
|
45
|
+
const viewBox = parseFloats(refNode.element.getAttribute('viewBox'));
|
|
46
|
+
t = computeViewBoxTransform(refNode.element, viewBox, x, y, width, height, context);
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
t = context.pdf.Matrix(1, 0, 0, 1, x, y);
|
|
50
|
+
}
|
|
51
|
+
const contextColors = AttributeState.getContextColors(context, true);
|
|
52
|
+
const refContext = new Context(context.pdf, {
|
|
53
|
+
refsHandler: context.refsHandler,
|
|
54
|
+
styleSheets: context.styleSheets,
|
|
55
|
+
withinUse: true,
|
|
56
|
+
viewport: refNodeOpensViewport ? new Viewport(width, height) : context.viewport,
|
|
57
|
+
svg2pdfParameters: context.svg2pdfParameters,
|
|
58
|
+
textMeasure: context.textMeasure,
|
|
59
|
+
attributeState: Object.assign(AttributeState.default(), contextColors)
|
|
60
|
+
});
|
|
61
|
+
await context.refsHandler.getRendered(id, contextColors, node => Use.renderReferencedNode(node, id, refContext));
|
|
62
|
+
context.pdf.saveGraphicsState();
|
|
63
|
+
context.pdf.setCurrentTransformationMatrix(context.transform);
|
|
64
|
+
// apply the bbox (i.e. clip) if needed
|
|
65
|
+
if (refNodeOpensViewport &&
|
|
66
|
+
getAttribute(refNode.element, context.styleSheets, 'overflow') !== 'visible') {
|
|
67
|
+
context.pdf.rect(x, y, width, height);
|
|
68
|
+
context.pdf.clip().discardPath();
|
|
69
|
+
}
|
|
70
|
+
context.pdf.doFormObject(context.refsHandler.generateKey(id, contextColors), t);
|
|
71
|
+
context.pdf.restoreGraphicsState();
|
|
72
|
+
}
|
|
73
|
+
static async renderReferencedNode(node, id, refContext) {
|
|
74
|
+
let bBox = node.getBoundingBox(refContext);
|
|
75
|
+
// The content of a PDF form object is implicitly clipped at its /BBox property.
|
|
76
|
+
// SVG, however, applies its clip rect at the <use> attribute, which may modify it.
|
|
77
|
+
// So, make the bBox a lot larger than it needs to be and hope any thick strokes are
|
|
78
|
+
// still within.
|
|
79
|
+
bBox = [bBox[0] - 0.5 * bBox[2], bBox[1] - 0.5 * bBox[3], bBox[2] * 2, bBox[3] * 2];
|
|
80
|
+
refContext.pdf.beginFormObject(bBox[0], bBox[1], bBox[2], bBox[3], refContext.pdf.unitMatrix);
|
|
81
|
+
if (node instanceof Symbol) {
|
|
82
|
+
await node.apply(refContext);
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
await node.render(refContext);
|
|
86
|
+
}
|
|
87
|
+
refContext.pdf.endFormObject(refContext.refsHandler.generateKey(id, refContext.attributeState));
|
|
88
|
+
}
|
|
89
|
+
getBoundingBoxCore(context) {
|
|
90
|
+
return defaultBoundingBox(this.element, context);
|
|
91
|
+
}
|
|
92
|
+
isVisible(parentVisible, context) {
|
|
93
|
+
return svgNodeIsVisible(this, parentVisible, context);
|
|
94
|
+
}
|
|
95
|
+
computeNodeTransformCore(context) {
|
|
96
|
+
return context.pdf.unitMatrix;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=use.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use.js","sourceRoot":"","sources":["../../src/nodes/use.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { SvgNode } from './svgnode';
|
|
2
|
+
import { Context } from '../context/context';
|
|
3
|
+
import { Rect } from '../utils/geometry';
|
|
4
|
+
import { Matrix } from 'jspdf';
|
|
5
|
+
export declare class VoidNode extends SvgNode {
|
|
6
|
+
render(parentContext: Context): Promise<void>;
|
|
7
|
+
protected getBoundingBoxCore(context: Context): Rect;
|
|
8
|
+
protected computeNodeTransformCore(context: Context): Matrix;
|
|
9
|
+
isVisible(parentVisible: boolean, context: Context): boolean;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=void.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"void.d.ts","sourceRoot":"","sources":["../../src/nodes/void.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAE5C,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAA;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAE9B,qBAAa,QAAS,SAAQ,OAAO;IAEnC,MAAM,CAAC,aAAa,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7C,SAAS,CAAC,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAGpD,SAAS,CAAC,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM;IAG5D,SAAS,CAAC,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO;CAG7D"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { SvgNode } from './svgnode';
|
|
2
|
+
import { svgNodeIsVisible } from '../utils/node';
|
|
3
|
+
export class VoidNode extends SvgNode {
|
|
4
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
5
|
+
render(parentContext) {
|
|
6
|
+
return Promise.resolve();
|
|
7
|
+
}
|
|
8
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
9
|
+
getBoundingBoxCore(context) {
|
|
10
|
+
return [0, 0, 0, 0];
|
|
11
|
+
}
|
|
12
|
+
computeNodeTransformCore(context) {
|
|
13
|
+
return context.pdf.unitMatrix;
|
|
14
|
+
}
|
|
15
|
+
isVisible(parentVisible, context) {
|
|
16
|
+
return svgNodeIsVisible(this, parentVisible, context);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=void.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"void.js","sourceRoot":"","sources":["../../src/nodes/void.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAIhD,MAAM,OAAO,QAAS,SAAQ,OAAO;IACnC,6DAA6D;IAC7D,MAAM,CAAC,aAAsB;QAC3B,OAAO,OAAO,CAAC,OAAO,EAAE,CAAA;IAC1B,CAAC;IACD,6DAA6D;IACnD,kBAAkB,CAAC,OAAgB;QAC3C,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IACrB,CAAC;IACS,wBAAwB,CAAC,OAAgB;QACjD,OAAO,OAAO,CAAC,GAAG,CAAC,UAAU,CAAA;IAC/B,CAAC;IACD,SAAS,CAAC,aAAsB,EAAE,OAAgB;QAChD,OAAO,gBAAgB,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,CAAC,CAAA;IACvD,CAAC;CACF"}
|
package/dist/parse.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAwBzC,wBAAgB,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE;IAAE,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,GAAG,OAAO,CA6E/E"}
|
package/dist/parse.js
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { Line } from './nodes/line';
|
|
2
|
+
import { Use } from './nodes/use';
|
|
3
|
+
import { Rect } from './nodes/rect';
|
|
4
|
+
import { Ellipse } from './nodes/ellipse';
|
|
5
|
+
import { TextNode } from './nodes/text';
|
|
6
|
+
import { PathNode } from './nodes/path';
|
|
7
|
+
import { ImageNode } from './nodes/image';
|
|
8
|
+
import { Polygon } from './nodes/polygon';
|
|
9
|
+
import { forEachChild } from './utils/node';
|
|
10
|
+
import { VoidNode } from './nodes/void';
|
|
11
|
+
import { MarkerNode } from './nodes/marker';
|
|
12
|
+
import { Pattern } from './nodes/pattern';
|
|
13
|
+
import { Circle } from './nodes/circle';
|
|
14
|
+
import { LinearGradient } from './nodes/lineargradient';
|
|
15
|
+
import { RadialGradient } from './nodes/radialgradient';
|
|
16
|
+
import { Polyline } from './nodes/polyline';
|
|
17
|
+
import { Svg } from './nodes/svg';
|
|
18
|
+
import { Group } from './nodes/group';
|
|
19
|
+
import { Anchor } from './nodes/anchor';
|
|
20
|
+
import cssesc from 'cssesc';
|
|
21
|
+
import { ClipPath } from './nodes/clippath';
|
|
22
|
+
import { Symbol } from './nodes/symbol';
|
|
23
|
+
export function parse(node, idMap) {
|
|
24
|
+
let svgnode;
|
|
25
|
+
const children = [];
|
|
26
|
+
forEachChild(node, (i, n) => children.push(parse(n, idMap)));
|
|
27
|
+
switch (node.tagName.toLowerCase()) {
|
|
28
|
+
case 'a':
|
|
29
|
+
svgnode = new Anchor(node, children);
|
|
30
|
+
break;
|
|
31
|
+
case 'g':
|
|
32
|
+
svgnode = new Group(node, children);
|
|
33
|
+
break;
|
|
34
|
+
case 'circle':
|
|
35
|
+
svgnode = new Circle(node, children);
|
|
36
|
+
break;
|
|
37
|
+
case 'clippath':
|
|
38
|
+
svgnode = new ClipPath(node, children);
|
|
39
|
+
break;
|
|
40
|
+
case 'ellipse':
|
|
41
|
+
svgnode = new Ellipse(node, children);
|
|
42
|
+
break;
|
|
43
|
+
case 'lineargradient':
|
|
44
|
+
svgnode = new LinearGradient(node, children);
|
|
45
|
+
break;
|
|
46
|
+
case 'image':
|
|
47
|
+
svgnode = new ImageNode(node, children);
|
|
48
|
+
break;
|
|
49
|
+
case 'line':
|
|
50
|
+
svgnode = new Line(node, children);
|
|
51
|
+
break;
|
|
52
|
+
case 'marker':
|
|
53
|
+
svgnode = new MarkerNode(node, children);
|
|
54
|
+
break;
|
|
55
|
+
case 'path':
|
|
56
|
+
svgnode = new PathNode(node, children);
|
|
57
|
+
break;
|
|
58
|
+
case 'pattern':
|
|
59
|
+
svgnode = new Pattern(node, children);
|
|
60
|
+
break;
|
|
61
|
+
case 'polygon':
|
|
62
|
+
svgnode = new Polygon(node, children);
|
|
63
|
+
break;
|
|
64
|
+
case 'polyline':
|
|
65
|
+
svgnode = new Polyline(node, children);
|
|
66
|
+
break;
|
|
67
|
+
case 'radialgradient':
|
|
68
|
+
svgnode = new RadialGradient(node, children);
|
|
69
|
+
break;
|
|
70
|
+
case 'rect':
|
|
71
|
+
svgnode = new Rect(node, children);
|
|
72
|
+
break;
|
|
73
|
+
case 'svg':
|
|
74
|
+
svgnode = new Svg(node, children);
|
|
75
|
+
break;
|
|
76
|
+
case 'symbol':
|
|
77
|
+
svgnode = new Symbol(node, children);
|
|
78
|
+
break;
|
|
79
|
+
case 'text':
|
|
80
|
+
svgnode = new TextNode(node, children);
|
|
81
|
+
break;
|
|
82
|
+
case 'use':
|
|
83
|
+
svgnode = new Use(node, children);
|
|
84
|
+
break;
|
|
85
|
+
default:
|
|
86
|
+
svgnode = new VoidNode(node, children);
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
if (idMap != undefined && svgnode.element.hasAttribute('id')) {
|
|
90
|
+
const id = cssesc(svgnode.element.id, { isIdentifier: true });
|
|
91
|
+
idMap[id] = idMap[id] || svgnode;
|
|
92
|
+
}
|
|
93
|
+
svgnode.children.forEach(c => c.setParent(svgnode));
|
|
94
|
+
return svgnode;
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=parse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { jsPDF } from 'jspdf';
|
|
2
|
+
export declare function svg2pdf(element: Element, pdf: jsPDF, options?: Svg2PdfOptions): Promise<jsPDF>;
|
|
3
|
+
export interface Svg2PdfOptions {
|
|
4
|
+
x?: number;
|
|
5
|
+
y?: number;
|
|
6
|
+
width?: number;
|
|
7
|
+
height?: number;
|
|
8
|
+
loadExternalStyleSheets?: boolean;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=svg2pdf.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"svg2pdf.d.ts","sourceRoot":"","sources":["../src/svg2pdf.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAA;AAK7B,wBAAsB,OAAO,CAC3B,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,KAAK,EACV,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,KAAK,CAAC,CAkDhB;AASD,MAAM,WAAW,cAAc;IAC7B,CAAC,CAAC,EAAE,MAAM,CAAA;IACV,CAAC,CAAC,EAAE,MAAM,CAAA;IACV,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,uBAAuB,CAAC,EAAE,OAAO,CAAA;CAClC"}
|
package/dist/svg2pdf.js
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Context } from './context/context';
|
|
2
|
+
import { ReferencesHandler } from './context/referenceshandler';
|
|
3
|
+
import { parse } from './parse';
|
|
4
|
+
import { jsPDF } from 'jspdf';
|
|
5
|
+
import { StyleSheets } from './context/stylesheets';
|
|
6
|
+
import { Viewport } from './context/viewport';
|
|
7
|
+
import { TextMeasure } from './context/textmeasure';
|
|
8
|
+
export async function svg2pdf(element, pdf, options = {}) {
|
|
9
|
+
const x = options.x ?? 0.0;
|
|
10
|
+
const y = options.y ?? 0.0;
|
|
11
|
+
const extCss = options.loadExternalStyleSheets ?? false;
|
|
12
|
+
// create context object
|
|
13
|
+
const idMap = {};
|
|
14
|
+
const refsHandler = new ReferencesHandler(idMap);
|
|
15
|
+
const styleSheets = new StyleSheets(element, extCss);
|
|
16
|
+
await styleSheets.load();
|
|
17
|
+
// start with the entire page size as viewport
|
|
18
|
+
const viewport = new Viewport(pdf.internal.pageSize.getWidth(), pdf.internal.pageSize.getHeight());
|
|
19
|
+
const svg2pdfParameters = { ...options, element };
|
|
20
|
+
const textMeasure = new TextMeasure();
|
|
21
|
+
const context = new Context(pdf, {
|
|
22
|
+
refsHandler,
|
|
23
|
+
styleSheets,
|
|
24
|
+
viewport,
|
|
25
|
+
svg2pdfParameters,
|
|
26
|
+
textMeasure
|
|
27
|
+
});
|
|
28
|
+
pdf.advancedAPI();
|
|
29
|
+
pdf.saveGraphicsState();
|
|
30
|
+
// set offsets
|
|
31
|
+
pdf.setCurrentTransformationMatrix(pdf.Matrix(1, 0, 0, 1, x, y));
|
|
32
|
+
// set default values that differ from pdf defaults
|
|
33
|
+
pdf.setLineWidth(context.attributeState.strokeWidth);
|
|
34
|
+
const fill = context.attributeState.fill.color;
|
|
35
|
+
pdf.setFillColor(fill.r, fill.g, fill.b);
|
|
36
|
+
pdf.setFont(context.attributeState.fontFamily);
|
|
37
|
+
// correct for a jsPDF-instance measurement unit that differs from `pt`
|
|
38
|
+
pdf.setFontSize(context.attributeState.fontSize * pdf.internal.scaleFactor);
|
|
39
|
+
const node = parse(element, idMap);
|
|
40
|
+
await node.render(context);
|
|
41
|
+
pdf.restoreGraphicsState();
|
|
42
|
+
pdf.compatAPI();
|
|
43
|
+
context.textMeasure.cleanupTextMeasuring();
|
|
44
|
+
return pdf;
|
|
45
|
+
}
|
|
46
|
+
jsPDF.API.svg = function (element, options = {}) {
|
|
47
|
+
return svg2pdf(element, this, options);
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=svg2pdf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"svg2pdf.js","sourceRoot":"","sources":["../src/svg2pdf.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AAC/D,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAE/B,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAA;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAEnD,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,OAAgB,EAChB,GAAU,EACV,UAA0B,EAAE;IAE5B,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,GAAG,CAAA;IAC1B,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,GAAG,CAAA;IAC1B,MAAM,MAAM,GAAG,OAAO,CAAC,uBAAuB,IAAI,KAAK,CAAA;IAEvD,yBAAyB;IACzB,MAAM,KAAK,GAA8B,EAAE,CAAA;IAC3C,MAAM,WAAW,GAAG,IAAI,iBAAiB,CAAC,KAAK,CAAC,CAAA;IAEhD,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IACpD,MAAM,WAAW,CAAC,IAAI,EAAE,CAAA;IAExB,8CAA8C;IAC9C,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAA;IAElG,MAAM,iBAAiB,GAAG,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,CAAA;IAEjD,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAA;IAErC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE;QAC/B,WAAW;QACX,WAAW;QACX,QAAQ;QACR,iBAAiB;QACjB,WAAW;KACZ,CAAC,CAAA;IAEF,GAAG,CAAC,WAAW,EAAE,CAAA;IACjB,GAAG,CAAC,iBAAiB,EAAE,CAAA;IACvB,cAAc;IACd,GAAG,CAAC,8BAA8B,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAEhE,mDAAmD;IACnD,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;IACpD,MAAM,IAAI,GAAI,OAAO,CAAC,cAAc,CAAC,IAAkB,CAAC,KAAK,CAAA;IAC7D,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;IACxC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAA;IAC9C,uEAAuE;IACvE,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;IAE3E,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;IAClC,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAE1B,GAAG,CAAC,oBAAoB,EAAE,CAAA;IAE1B,GAAG,CAAC,SAAS,EAAE,CAAA;IAEf,OAAO,CAAC,WAAW,CAAC,oBAAoB,EAAE,CAAA;IAE1C,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,UACd,OAAgB,EAChB,UAA0B,EAAE;IAE5B,OAAO,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;AACxC,CAAC,CAAA"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Context } from './context/context';
|
|
2
|
+
import { TextNode } from './nodes/text';
|
|
3
|
+
import { Point } from './utils/geometry';
|
|
4
|
+
/**
|
|
5
|
+
* @param {string} textAnchor
|
|
6
|
+
* @param {number} originX
|
|
7
|
+
* @param {number} originY
|
|
8
|
+
* @constructor
|
|
9
|
+
*/
|
|
10
|
+
export declare class TextChunk {
|
|
11
|
+
private readonly textNode;
|
|
12
|
+
private readonly texts;
|
|
13
|
+
private readonly textNodes;
|
|
14
|
+
private readonly contexts;
|
|
15
|
+
private readonly textAnchor;
|
|
16
|
+
private originX;
|
|
17
|
+
private originY;
|
|
18
|
+
readonly textMeasures: {
|
|
19
|
+
width: number;
|
|
20
|
+
length: number;
|
|
21
|
+
}[];
|
|
22
|
+
constructor(parent: TextNode, textAnchor: string, originX: number, originY: number);
|
|
23
|
+
setX(originX: number): void;
|
|
24
|
+
setY(originY: number): void;
|
|
25
|
+
add(tSpan: Element, text: string, context: Context): void;
|
|
26
|
+
rightTrimText(): boolean;
|
|
27
|
+
measureText(context: Context): void;
|
|
28
|
+
put(context: Context, charSpace: number): Point;
|
|
29
|
+
/**
|
|
30
|
+
* Resolves a positional attribute (dx, dy) on a given tSpan, possibly
|
|
31
|
+
* inheriting it from the nearest ancestor. Positional attributes
|
|
32
|
+
* are only inherited from a parent to its first child.
|
|
33
|
+
*/
|
|
34
|
+
private static resolveRelativePositionAttribute;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=textchunk.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"textchunk.d.ts","sourceRoot":"","sources":["../src/textchunk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAI3C,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAGxC;;;;;GAKG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAU;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IACnC,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,OAAO,CAAQ;IAEvB,QAAQ,CAAC,YAAY,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;gBAE9C,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAWlF,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI3B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI3B,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAMzD,aAAa,IAAI,OAAO;IAgBxB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IASnC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,KAAK;IAyF/C;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,gCAAgC;CAoBhD"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { getTextRenderingMode, trimRight } from './utils/text';
|
|
2
|
+
import { mapAlignmentBaseline, toPixels } from './utils/misc';
|
|
3
|
+
import { applyAttributes } from './applyparseattributes';
|
|
4
|
+
import { nodeIs } from './utils/node';
|
|
5
|
+
/**
|
|
6
|
+
* @param {string} textAnchor
|
|
7
|
+
* @param {number} originX
|
|
8
|
+
* @param {number} originY
|
|
9
|
+
* @constructor
|
|
10
|
+
*/
|
|
11
|
+
export class TextChunk {
|
|
12
|
+
constructor(parent, textAnchor, originX, originY) {
|
|
13
|
+
this.textNode = parent;
|
|
14
|
+
this.texts = [];
|
|
15
|
+
this.textNodes = [];
|
|
16
|
+
this.contexts = [];
|
|
17
|
+
this.textAnchor = textAnchor;
|
|
18
|
+
this.originX = originX;
|
|
19
|
+
this.originY = originY;
|
|
20
|
+
this.textMeasures = [];
|
|
21
|
+
}
|
|
22
|
+
setX(originX) {
|
|
23
|
+
this.originX = originX;
|
|
24
|
+
}
|
|
25
|
+
setY(originY) {
|
|
26
|
+
this.originY = originY;
|
|
27
|
+
}
|
|
28
|
+
add(tSpan, text, context) {
|
|
29
|
+
this.texts.push(text);
|
|
30
|
+
this.textNodes.push(tSpan);
|
|
31
|
+
this.contexts.push(context);
|
|
32
|
+
}
|
|
33
|
+
rightTrimText() {
|
|
34
|
+
for (let r = this.texts.length - 1; r >= 0; r--) {
|
|
35
|
+
const shouldPreserve = this.contexts[r].attributeState.xmlSpace === 'preserve' ||
|
|
36
|
+
this.contexts[r].attributeState.whiteSpace === 'pre';
|
|
37
|
+
if (!shouldPreserve) {
|
|
38
|
+
this.texts[r] = trimRight(this.texts[r]);
|
|
39
|
+
}
|
|
40
|
+
// If find a letter, stop right-trimming
|
|
41
|
+
if (this.texts[r].match(/[^\s]/)) {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
measureText(context) {
|
|
48
|
+
for (let i = 0; i < this.texts.length; i++) {
|
|
49
|
+
this.textMeasures.push({
|
|
50
|
+
width: context.textMeasure.measureTextWidth(this.texts[i], this.contexts[i].attributeState),
|
|
51
|
+
length: this.texts[i].length
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
put(context, charSpace) {
|
|
56
|
+
let i, textNode, textNodeContext, textMeasure;
|
|
57
|
+
const alreadySeen = [];
|
|
58
|
+
const xs = [], ys = [];
|
|
59
|
+
let currentTextX = this.originX, currentTextY = this.originY;
|
|
60
|
+
let minX = currentTextX, maxX = currentTextX;
|
|
61
|
+
for (i = 0; i < this.textNodes.length; i++) {
|
|
62
|
+
textNode = this.textNodes[i];
|
|
63
|
+
textNodeContext = this.contexts[i];
|
|
64
|
+
textMeasure = this.textMeasures[i] || {
|
|
65
|
+
width: context.textMeasure.measureTextWidth(this.texts[i], this.contexts[i].attributeState),
|
|
66
|
+
length: this.texts[i].length
|
|
67
|
+
};
|
|
68
|
+
let x = currentTextX;
|
|
69
|
+
let y = currentTextY;
|
|
70
|
+
if (textNode.nodeName !== '#text') {
|
|
71
|
+
if (!alreadySeen.includes(textNode)) {
|
|
72
|
+
alreadySeen.push(textNode);
|
|
73
|
+
const tSpanDx = TextChunk.resolveRelativePositionAttribute(textNode, 'dx');
|
|
74
|
+
if (tSpanDx !== null) {
|
|
75
|
+
x += toPixels(tSpanDx, textNodeContext.attributeState.fontSize);
|
|
76
|
+
}
|
|
77
|
+
const tSpanDy = TextChunk.resolveRelativePositionAttribute(textNode, 'dy');
|
|
78
|
+
if (tSpanDy !== null) {
|
|
79
|
+
y += toPixels(tSpanDy, textNodeContext.attributeState.fontSize);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
xs[i] = x;
|
|
84
|
+
ys[i] = y;
|
|
85
|
+
currentTextX = x + textMeasure.width + textMeasure.length * charSpace;
|
|
86
|
+
currentTextY = y;
|
|
87
|
+
minX = Math.min(minX, x);
|
|
88
|
+
maxX = Math.max(maxX, currentTextX);
|
|
89
|
+
}
|
|
90
|
+
let textOffset = 0;
|
|
91
|
+
switch (this.textAnchor) {
|
|
92
|
+
case 'start':
|
|
93
|
+
textOffset = 0;
|
|
94
|
+
break;
|
|
95
|
+
case 'middle':
|
|
96
|
+
textOffset = (maxX - minX) / 2;
|
|
97
|
+
break;
|
|
98
|
+
case 'end':
|
|
99
|
+
textOffset = maxX - minX;
|
|
100
|
+
break;
|
|
101
|
+
}
|
|
102
|
+
for (i = 0; i < this.textNodes.length; i++) {
|
|
103
|
+
textNode = this.textNodes[i];
|
|
104
|
+
textNodeContext = this.contexts[i];
|
|
105
|
+
if (textNode.nodeName !== '#text') {
|
|
106
|
+
if (textNodeContext.attributeState.visibility === 'hidden') {
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
context.pdf.saveGraphicsState();
|
|
111
|
+
applyAttributes(textNodeContext, context, textNode);
|
|
112
|
+
const alignmentBaseline = textNodeContext.attributeState.alignmentBaseline;
|
|
113
|
+
const textRenderingMode = getTextRenderingMode(textNodeContext.attributeState);
|
|
114
|
+
context.pdf.text(this.texts[i], xs[i] - textOffset, ys[i], {
|
|
115
|
+
baseline: mapAlignmentBaseline(alignmentBaseline),
|
|
116
|
+
angle: context.transform,
|
|
117
|
+
renderingMode: textRenderingMode === 'fill' ? void 0 : textRenderingMode,
|
|
118
|
+
charSpace: charSpace === 0 ? void 0 : charSpace
|
|
119
|
+
});
|
|
120
|
+
context.pdf.restoreGraphicsState();
|
|
121
|
+
}
|
|
122
|
+
return [currentTextX, currentTextY];
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Resolves a positional attribute (dx, dy) on a given tSpan, possibly
|
|
126
|
+
* inheriting it from the nearest ancestor. Positional attributes
|
|
127
|
+
* are only inherited from a parent to its first child.
|
|
128
|
+
*/
|
|
129
|
+
static resolveRelativePositionAttribute(element, attributeName) {
|
|
130
|
+
let currentElement = element;
|
|
131
|
+
while (currentElement && nodeIs(currentElement, 'tspan')) {
|
|
132
|
+
if (currentElement.hasAttribute(attributeName)) {
|
|
133
|
+
return currentElement.getAttribute(attributeName);
|
|
134
|
+
}
|
|
135
|
+
if (!(element.parentElement?.firstChild === element)) {
|
|
136
|
+
// positional attributes are only inherited from a parent to its first child
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
139
|
+
currentElement = currentElement.parentElement;
|
|
140
|
+
}
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=textchunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"textchunk.js","sourceRoot":"","sources":["../src/textchunk.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Context } from '../context/context';
|
|
2
|
+
import { ClipPath } from '../nodes/clippath';
|
|
3
|
+
import { SvgNode } from '../nodes/svgnode';
|
|
4
|
+
export declare function getClipPathNode(clipPathAttr: string, targetNode: SvgNode, context: Context): ClipPath | undefined;
|
|
5
|
+
export declare function applyClipPath(targetNode: SvgNode, clipPathNode: ClipPath, context: Context): Promise<void>;
|
|
6
|
+
//# sourceMappingURL=applyclippath.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"applyclippath.d.ts","sourceRoot":"","sources":["../../src/utils/applyclippath.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAG1C,wBAAgB,eAAe,CAC7B,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,OAAO,EACnB,OAAO,EAAE,OAAO,GACf,QAAQ,GAAG,SAAS,CAQtB;AAED,wBAAsB,aAAa,CACjC,UAAU,EAAE,OAAO,EACnB,YAAY,EAAE,QAAQ,EACtB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,IAAI,CAAC,CAaf"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { iriReference } from './constants';
|
|
2
|
+
export function getClipPathNode(clipPathAttr, targetNode, context) {
|
|
3
|
+
const match = iriReference.exec(clipPathAttr);
|
|
4
|
+
if (!match) {
|
|
5
|
+
return undefined;
|
|
6
|
+
}
|
|
7
|
+
const clipPathId = match[1];
|
|
8
|
+
const clipNode = context.refsHandler.get(clipPathId);
|
|
9
|
+
return clipNode || undefined;
|
|
10
|
+
}
|
|
11
|
+
export async function applyClipPath(targetNode, clipPathNode, context) {
|
|
12
|
+
const clipContext = context.clone();
|
|
13
|
+
if (clipPathNode.element.hasAttribute('clipPathUnits') &&
|
|
14
|
+
clipPathNode.element.getAttribute('clipPathUnits').toLowerCase() === 'objectboundingbox') {
|
|
15
|
+
const bBox = targetNode.getBoundingBox(context);
|
|
16
|
+
clipContext.transform = context.pdf.matrixMult(context.pdf.Matrix(bBox[2], 0, 0, bBox[3], bBox[0], bBox[1]), context.transform);
|
|
17
|
+
}
|
|
18
|
+
await clipPathNode.apply(clipContext);
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=applyclippath.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"applyclippath.js","sourceRoot":"","sources":["../../src/utils/applyclippath.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,MAAM,UAAU,eAAe,CAC7B,YAAoB,EACpB,UAAmB,EACnB,OAAgB;IAEhB,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IAC7C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;IAC3B,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;IACpD,OAAQ,QAAqB,IAAI,SAAS,CAAA;AAC5C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,UAAmB,EACnB,YAAsB,EACtB,OAAgB;IAEhB,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,EAAE,CAAA;IACnC,IACE,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,eAAe,CAAC;QAClD,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,eAAe,CAAE,CAAC,WAAW,EAAE,KAAK,mBAAmB,EACzF,CAAC;QACD,MAAM,IAAI,GAAG,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;QAC/C,WAAW,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAC5C,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAC5D,OAAO,CAAC,SAAS,CAClB,CAAA;IACH,CAAC;IACD,MAAM,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;AACvC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Context } from '../context/context';
|
|
2
|
+
import { SvgNode } from '../nodes/svgnode';
|
|
3
|
+
import { Rect } from './geometry';
|
|
4
|
+
export declare function getBoundingBoxByChildren(context: Context, svgnode: SvgNode): number[];
|
|
5
|
+
export declare function defaultBoundingBox(element: Element, context: Context): Rect;
|
|
6
|
+
//# sourceMappingURL=bbox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bbox.d.ts","sourceRoot":"","sources":["../../src/utils/bbox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAE5C,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAEjC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,EAAE,CA0BrF;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAkC3E"}
|