java - 如何使用 iText7 将 SVG 添加到 PDF
问题描述
我需要将 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?
解决方案
巧合的是,我们今天发布了 SVG 实现。我们还不支持完整的功能集,我们仍在第二季度及以后的时间里努力,但你已经可以使用它了。工件在Maven上。该存储库位于Github上。文档在我们的公共 wiki上。
代码示例将放在网站上,但它是一个非常简单的 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();
资料来源:我是从事 SVG 实现的 iText 开发人员
推荐阅读
- python - 向 django 添加缓存会导致配置不当:WSGI 错误
- c# - ASP.NET Core 2.0 请求失败
- python - 如何在 Python Discord Bot 中发出停止倒计时的命令?
- python - 来自平滑数据的样本
- python-3.x - 在 dask 数组的切片上运行函数
- python - Tensorflow:tf.case 给出错误
- c# - LINQ - 避免向 HashSet 添加空值
- sql-server - 我可以为数据库名称取别名或为数据库创建同义词吗?
- javascript - 如何根据用户输入动态显示数据
- java - 是否有 Spring boot 特定的 maven 插件来生成 rpm 文件