diff --git a/src/context/context.ts b/src/context/context.ts index fa69c252..65660202 100644 --- a/src/context/context.ts +++ b/src/context/context.ts @@ -69,7 +69,7 @@ export interface ContextOptions { attributeState?: AttributeState refsHandler: ReferencesHandler styleSheets: StyleSheets - textMeasure?: TextMeasure + textMeasure: TextMeasure transform?: Matrix withinClipPath?: boolean withinUse?: boolean diff --git a/src/nodes/clippath.ts b/src/nodes/clippath.ts index c7fcb222..0e5509db 100644 --- a/src/nodes/clippath.ts +++ b/src/nodes/clippath.ts @@ -29,7 +29,8 @@ export class ClipPath extends NonRenderedNode { styleSheets: context.styleSheets, viewport: context.viewport, withinClipPath: true, - svg2pdfParameters: context.svg2pdfParameters + svg2pdfParameters: context.svg2pdfParameters, + textMeasure: context.textMeasure }) ) } diff --git a/src/nodes/image.ts b/src/nodes/image.ts index 0762e77e..07faf3b0 100644 --- a/src/nodes/image.ts +++ b/src/nodes/image.ts @@ -69,7 +69,8 @@ export class ImageNode extends GraphicsNode { refsHandler: new ReferencesHandler(idMap), styleSheets: context.styleSheets, viewport: new Viewport(width, height), - svg2pdfParameters: context.svg2pdfParameters + svg2pdfParameters: context.svg2pdfParameters, + textMeasure: context.textMeasure }) ) return diff --git a/src/nodes/marker.ts b/src/nodes/marker.ts index 0c894847..7acf8089 100644 --- a/src/nodes/marker.ts +++ b/src/nodes/marker.ts @@ -19,7 +19,8 @@ export class MarkerNode extends NonRenderedNode { refsHandler: parentContext.refsHandler, styleSheets: parentContext.styleSheets, viewport: parentContext.viewport, - svg2pdfParameters: parentContext.svg2pdfParameters + svg2pdfParameters: parentContext.svg2pdfParameters, + textMeasure: parentContext.textMeasure }) // "Properties do not inherit from the element referencing the 'marker' into the contents of the diff --git a/src/nodes/pattern.ts b/src/nodes/pattern.ts index fcd65384..8e206a79 100644 --- a/src/nodes/pattern.ts +++ b/src/nodes/pattern.ts @@ -30,7 +30,8 @@ export class Pattern extends NonRenderedNode { refsHandler: context.refsHandler, styleSheets: context.styleSheets, viewport: context.viewport, - svg2pdfParameters: context.svg2pdfParameters + svg2pdfParameters: context.svg2pdfParameters, + textMeasure: context.textMeasure }) ) } diff --git a/src/nodes/use.ts b/src/nodes/use.ts index 2747088a..5bcaee83 100644 --- a/src/nodes/use.ts +++ b/src/nodes/use.ts @@ -66,7 +66,8 @@ export class Use extends GraphicsNode { styleSheets: context.styleSheets, withinUse: true, viewport: refNodeOpensViewport ? new Viewport(width!, height!) : context.viewport, - svg2pdfParameters: context.svg2pdfParameters + svg2pdfParameters: context.svg2pdfParameters, + textMeasure: context.textMeasure }) const color = context.attributeState.color await context.refsHandler.getRendered(id, color, node => diff --git a/src/svg2pdf.ts b/src/svg2pdf.ts index fe34e41a..f805b937 100644 --- a/src/svg2pdf.ts +++ b/src/svg2pdf.ts @@ -6,6 +6,7 @@ import { ColorFill } from './fill/ColorFill' import { jsPDF } from 'jspdf' import { StyleSheets } from './context/stylesheets' import { Viewport } from './context/viewport' +import { TextMeasure } from './context/textmeasure' export async function svg2pdf( element: Element, @@ -28,7 +29,15 @@ export async function svg2pdf( const svg2pdfParameters = { ...options, element } - const context = new Context(pdf, { refsHandler, styleSheets, viewport, svg2pdfParameters }) + const textMeasure = new TextMeasure() + + const context = new Context(pdf, { + refsHandler, + styleSheets, + viewport, + svg2pdfParameters, + textMeasure + }) pdf.advancedAPI() pdf.saveGraphicsState() diff --git a/test/unit/all.spec.js b/test/unit/all.spec.js index 89acf1e9..b658b72d 100644 --- a/test/unit/all.spec.js +++ b/test/unit/all.spec.js @@ -35,6 +35,10 @@ for (const test of window.tests) { // await svg2pdf(svgElement, pdf, svg2pdfOptions) comparePdf(pdf.output(), `/test/specs/${name}/reference.pdf`, debug) + + if (document.querySelector('svg')) { + expect.fail('svg measuring element must not remain in document') + } }) }) }