如何使用iText7将SVG添加到PDF中

5

我需要将一个SVG图形添加到PDF文件中。

使用iText7是否可以实现这一目的?

使用iText5:

BufferedReader in = new BufferedReader(new InputStreamReader(svgUrl.openStream()));
String xmlParser = XMLResourceDescriptor.getXMLParserClassName();

SVGDocument svgDoc = new SAXSVGDocumentFactory(xmlParser).createSVGDocument(null, in);
in.close();


// Try to read embedded height and width
float svgWidth = Float.parseFloat(svgDoc.getDocumentElement().getAttribute("width").replaceAll("[^0-9.,]",""));
float svgHeight = Float.parseFloat(svgDoc.getDocumentElement().getAttribute("height").replaceAll("[^0-9.,]",""));

PdfTemplate svgTempl = PdfTemplate.createTemplate(writer, svgWidth, svgHeight);
Graphics2D g2d = svgTempl.createGraphics(svgWidth,svgHeight);          

GraphicsNode chartGfx = (new GVTBuilder()).build(new BridgeContext(new UserAgentAdapter()), svgDoc);
chartGfx.paint(g2d);
g2d.dispose();

Image img = new ImgTemplate(svgTempl);

我发现在以下页面中: PdfPTable和PdfTemplate, 有一种创建类似模板的方法:
PdfFormXObject svgTempl = new PdfFormXObject(new Rectangle(svgWidth, svgHeight));

我该如何创建Graphics2D对象?


有任何研究吗? - L_Church
当然我做了研究。我知道iText5支持此功能。但是由于我们现在使用的是iText7,我没有找到可用的解决方案。 - Ap Tsi
这个足够了吗?哈哈哈。 请问您需要更多的帮助吗? - L_Church
1
你很幸运。我们今天发布了初始的SVG支持。我们正在将该工件推送到Maven/Nuget。请注意,完整的功能集尚未得到支持,我们正在努力在第二季度及以后改进它。 - Michaël Demey
感谢您的评论。我应该将哪个itext7添加到依赖项中?现在我有itext7 7.0.2。 - Ap Tsi
1
我们只向最新版本添加新功能,也就是7.1.x分支。现在我们发布的是7.1.2版本。 - Michaël Demey
1个回答

7
巧合的是,我们今天发布了SVG实现。我们目前还不支持全部功能集,我们仍在Q2及以后的时间内继续努力,但您已经可以使用它了。该工件位于 Maven 上。存储库位于 Github 上。文档在我们的公共维基上。

代码示例将放在网站上,但这是一个非常简单的API,类似于pdfHtml的工作方式。有一个SvgConverter实用程序类,提供多种转换为PDF或PDF XObjects的方法。

PdfDocument doc = new PdfDocument(
  new PdfWriter(pdfOutputStream, 
    new WriterProperties().setCompressionLevel(0)));
doc.addNewPage();
SvgConverter.drawOnDocument(svg, doc, 1);
doc.close();

来源:我是一名iText开发人员,负责SVG实现


我尝试了一下,然后收到了以下日志:[main] ERROR com.itextpdf.styledxmlparser.node.impl.jsoup.JsoupXmlParser - 无法映射节点类型:class com.itextpdf.styledxmlparser.jsoup.nodes.XmlDeclaration - Ap Tsi
你能否创建一个新问题并将你的SVG附加在其中? - Michaël Demey
2
@ApostolosTsigkaridas,你的SVG文件可以使用SVG的开发版本进行转换。正如所说,这个7.1.2版本不完整,我们仍在实现中。您可以选择从源代码构建7.1.3-SNAPSHOT或在不久的将来通过我们的artifactory下载它(我们仍在设置中)https://repo.itextsupport.com/webapp/#/artifacts/browse/simple/General/snapshot/com/itextpdf - Michaël Demey
@MichaëlDemey 我发布了一个新问题 https://stackoverflow.com/questions/50062460/itext7-adding-svg-into-pdfdocument-and-possible-issues。 - Ap Tsi
1
@MichaëlDemey,7.1.3-SNAPSHOT.jar确切的位置在哪里? - Ap Tsi
有关SVG文件的使用文档更新情况,是否可以作为背景图像? - G_V

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接