【问题标题】:How to add an SVG to a PDF using iText7如何使用 iText7 将 SVG 添加到 PDF
【发布时间】:2018-10-08 03:00:33
【问题描述】:

我需要将 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 and PdfTemplate

有一种方法可以创建类似于模板的东西:

PdfFormXObject svgTempl = new PdfFormXObject(new Rectangle(svgWidth, svgHeight));

如何创建 Graphics2D?

【问题讨论】:

  • 任何研究???
  • 我当然做了研究。我知道在 iText5 中是受支持的。但是由于我们现在使用 iText7,所以我没有找到可行的方法。
  • 你很幸运。我们今天发布了初始 SVG 支持。我们正在将工件推送到 Maven/Nuget。 itextpdf.com/blog/release-notes-itext-712 请注意,还不支持完整的功能集,我们正在努力在第二季度及以后对其进行改进。
  • 我们只是在最新版本中添加新功能,即 7.1.x 分支。现在我们正在发布 7.1.2。

标签: java svg itext7


【解决方案1】:

巧合的是,我们今天发布了 SVG 实现。我们还不支持完整的功能集,我们仍在第二季度及以后的时间里努力,但你已经可以使用它了。工件位于Maven。存储库位于Github。文档位于我们的public 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();

资料来源:我是一名 iText 开发人员,致力于 SVG 实现

【讨论】:

  • 我试过了,我收到了日志:[main] 错误 com.itextpdf.styledxmlparser.node.impl.jsoup.JsoupXmlParser - 无法映射节点类型:类 com.itextpdf.styledxmlparser.jsoup.nodes .Xml声明
  • 你能提出一个新问题并将你的 SVG 附加到它上面吗?
  • @ApostolosTsigkaridas 您的 svg 文件可以使用 svg 的开发版本进行转换。如前所述,这个 7.1.2 版本尚未完成,我们仍在努力实施。您可以选择从源代码构建 7.1.3-SNAPSHOT 或在不久的将来通过我们的神器下载它(仍在设置中)repo.itextsupport.com/webapp/#/artifacts/browse/simple/General/…
  • @MichaëlDemey 我提出了一个新问题stackoverflow.com/questions/50062460/…
  • @MichaëlDemey 那个 7.1.3-SNAPSHOT.jar 到底在哪里?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-10
  • 2019-06-13
  • 2021-07-25
  • 1970-01-01
  • 2018-06-23
  • 2021-04-09
相关资源
最近更新 更多