gpt4 book ai didi

java - 在 itext7 中将 html 转换为 pdf 时出错

转载 作者:行者123 更新时间:2023-11-30 07:53:12 27 4
gpt4 key购买 nike

为了将我的 html 转换为 pdf,我使用 itext7 的 API convertToDocument,将参数传递给模板的 ByteArrayInputStream、PDFDocument 和 convertProperties。

相关代码片段:

HtmlConverter.convertToDocument(new ByteArrayInputStream(templateWritten), pdfDocument, converterProps);

正如文档所说,如果我设置 convertProperties 的 baseURI 就没有问题,但如果我设置 PDF 字体,则当有许多并发调用时会出现此错误:

“Pdf 间接对象属于其他 PDF 文档。将对象复制到当前 pdf 文档。”

创建转换属性

private ConverterProperties addResourcesForInitiative(String templateKey, FontProvider fontProvider) {
// CustomDefaultFontProvider cdfp = new CustomDefaultFontProvider();
ConverterProperties converterprops = new ConverterProperties();
// converterprops.setFontProvider(fontProvider);
converterprops.setBaseUri(ConfigurationManager.getParamValue("resource.path") + templateKey + "/resources/");
log.info("Properties for conversione are setted. Url of folder loaded " + converterprops.getBaseUri());
return converterprops;
}

对象在每次调用 convertToDocument API 之前创建

我错过了什么吗?

谢谢大家的帮助

最佳答案

我遇到了同样的问题。它与(但不是重复)Itext7 generate pdf with Exception "Pdf indirect object belongs to other PDF document. Copy object to current pdf document." 有关

一开始我对 iText 7 不理解的是,你有一个 FontProgram 和一个 PdfFont

  • FontProgram 是一个包含 iText 使用字体程序所需的所有信息的类。它可以在创建许多不同 PDF 文件的过程中重复使用。
  • PdfFont 是一个在单个文档的上下文中使用 FontProgram 的类。每个 PdfFont 对象恰好属于一个 PdfDocument

如果您尝试使用 PdfFont 对象创建另一个文档,您会得到错误 “Pdf 间接对象属于其他 PDF 文档。将对象复制到当前 pdf 文档。”

换句话说:你不能只重用 PdfFont 对象,只能重用 FontProgram 对象。这在重用 ConverterProperties(或 FontProvider)时可能会出现问题。诀窍不是在 FontProvider 中缓存 PdfFont 对象,而是缓存 FontProgram

由于这非常令人困惑,我已要求 iText 7 开发团队解决此问题。当我查看封闭的票务系统时,我可以看到文档将得到修复,并且将在 ConverterProperties 方面做出努力。这意味着您将在下一版本中看到改进。

与此同时,我通过更改使用 FontProviderConverterProperties 的方式自行解决了这个问题。 PdfFont 的新实例必须为每个新文档创建,我明白为什么:PdfFont 跟踪特定文档中使用的字符,并使用该信息创建一个字体子集。该子集对于每个文档都是不同的;因此每个文档都需要一个不同的 PdfFont 实例。

我将在有关此主题的票证中添加对此问题的引用。

关于java - 在 itext7 中将 html 转换为 pdf 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45043702/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com