我如何使用Itext 7将SVG添加到PDF?

问题描述 投票:2回答:1

我正在尝试使用IText api添加示例SVG文件。我正在使用最新版本的iText,但出现以下错误。以下是添加svg的代码。谁能帮我解决这个问题?

从此处获取SVG文件:由www.flaticon.com的Freepik制作的图标已获CC 3.0 BY许可

下面是POM

<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itext7-core</artifactId>
    <version>7.1.5</version>
    <type>pom</type>
</dependency>
<!-- https://mvnrepository.com/artifact/com.itextpdf/svg -->
<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>svg</artifactId>
    <version>7.1.5</version>
</dependency>

代码

PdfWriter writer = new PdfWriter(new FileOutputStream("C:\\Users\\Documents\\SVGPOC\\Sample1.pdf"));

PdfDocument pdfDoc = new PdfDocument(writer);

Document doc = new Document(pdfDoc);

URL svgUrl = new File("C:\\Users\\Documents\\SVGPOC\\teamwork.svg").toURI().toURL();
doc.add(new Paragraph("Testing SVG on PDF"));                      
Image image = SvgConverter.convertToImage(svgUrl.openStream(), pdfDoc);
doc.add(image);
doc.close();


Exception in thread "main" java.lang.UnsupportedOperationException
    at com.itextpdf.svg.renderers.path.impl.MoveTo.setCoordinates(MoveTo.java:83)
    at com.itextpdf.svg.renderers.impl.PathSvgNodeRenderer.processPathOperator(PathSvgNodeRenderer.java:205)
    at com.itextpdf.svg.renderers.impl.PathSvgNodeRenderer.getShapes(PathSvgNodeRenderer.java:228)
    at com.itextpdf.svg.renderers.impl.PathSvgNodeRenderer.doDraw(PathSvgNodeRenderer.java:115)
    at com.itextpdf.svg.renderers.impl.AbstractSvgNodeRenderer.draw(AbstractSvgNodeRenderer.java:121)
    at com.itextpdf.svg.renderers.impl.AbstractBranchSvgNodeRenderer.doDraw(AbstractBranchSvgNodeRenderer.java:100)
    at com.itextpdf.svg.renderers.impl.SvgTagSvgNodeRenderer.doDraw(SvgTagSvgNodeRenderer.java:62)
    at com.itextpdf.svg.renderers.impl.AbstractSvgNodeRenderer.draw(AbstractSvgNodeRenderer.java:121)
    at com.itextpdf.svg.renderers.impl.PdfRootSvgNodeRenderer.draw(PdfRootSvgNodeRenderer.java:93)
    at com.itextpdf.svg.converter.SvgConverter.convertToXObject(SvgConverter.java:816)
    at com.itextpdf.svg.converter.SvgConverter.convertToXObject(SvgConverter.java:663)
    at com.itextpdf.svg.converter.SvgConverter.convertToXObject(SvgConverter.java:653)
    at com.itextpdf.svg.converter.SvgConverter.convertToXObject(SvgConverter.java:688)
    at com.itextpdf.svg.converter.SvgConverter.convertToImage(SvgConverter.java:713)
    at demoitext.ITextDemo.main(ITextDemo.java:33)
svg itext
1个回答
2
投票

source code,似乎itext不支持带有两个以上参数的移动命令。

   if (coordinates.length > 2) {
        // (x y)+ parameters will be implemented in the future
        throw new UnsupportedOperationException();
    }

SVG规范允许这样做,因此您只需重写输入就可以避免这种情况,即插入L或l命令字母。所以

M 1,2 3,4

需要成为

M 1,2 L 3,4
© www.soinside.com 2019 - 2024. All rights reserved.