【问题标题】:xmlworker is missing in iText 7 coreiText 7核心中缺少xmlworker
【发布时间】:2016-10-01 22:55:35
【问题描述】:

我正在尝试在 Java 中使用 iText 7。想要将 HTML/XHTML 转换为 PDF。

显然xmlworker.jar 不存在于iText 7 core 中。

iText 7 的替代品是什么?

有什么解决办法吗?

【问题讨论】:

  • 目前,XmlWorker 不适用于 iText7
  • 感谢您的回复。我正在评估 iText 7 的功能。我听说 2017 年之后 iText 5 似乎不再提供支持和更新,那么 iText 7 中 xmlworker 的发布时间表是什么?在 iText 7 之后该功能是否不再可用?

标签: java itext itext7


【解决方案1】:

iText pdfHTML 模块已作为XmlWorker 的替代品发布。 C#版本可以从NuGet Gallery下载。 Java版可以从Artifactory下载。

您要查找的主要类是HtmlConverter。它有很多静态方法重载,用于将html 转换为将来要添加到布局结构中的元素列表、整个com.itextpdf.layout.Document 实例或.pdf 文件的权限。

.html文件转换为.pdf的示例:

HtmlConverter.convertToPdf(new File(htmlFilePath), new File(outPdfFilePath));

将html转换为布局元素的示例:

String html = "<p>Hello world!</p>";
List<IElement> lst = HtmlConverter.convertToElements(html);

另外,pdfHTML 现在支持@media 规则,因此您可能需要提供一个用于应用 CSS 的配置,例如使用@media print 指令,您需要相应地设置MediaDeviceDescription

ConverterProperties properties = new ConverterProperties()
     .setMediaDeviceDescription(new MediaDeviceDescription(MediaType.PRINT));
HtmlConverter.convertToPdf(new File(htmlPath), new File(outPdfPath), properties);

要指定在将 HTML 转换为 PDF 时要使用的字体集,您还可以设置 FontProvider

FontProvider fontProvider = new FontProvider();
fontProvider.addDirectory(fontsDir)
properties.setFontProvider(fontProvider);

或者您可以使用DefaultFontProvider 并在构造函数中指定其设置:

FontProvider fontProvider = new DefaultFontProvider(false, false, true);
properties.setFontProvider(fontProvider);

DefaultFontProvider在构造函数中有三个参数:第一个是指定是否使用标准字体(HelveticaCourierTimes等),第二个是指定是否使用自带的字体pdfHTML,第三个指定是否加载系统字体。 DefaultFontProvider 只是FontProvider 的子类,因此您可以在创建实例后随时调用addDirectoryaddFont

【讨论】:

    【解决方案2】:

    XML Worker 是 iText 路线图上的下一个项目,所以是的,它将可用于 iText 7。但首先我们需要完成 iText 7 for Java 到 iText 7 for C# 的移植,我们仍在努力记录 iText 7。例如:iText 7: Building Blocks

    在开源中,一个经常发布,一个很快发布。与其让所有代码一直关闭直到所有完成,我们选择了开源的发布方式:任何准备好了,就发布。没有准备好的,一准备好就会放出来。

    iText 的大修需要我们重写 XML Worker。好处:iText 7 在编写时考虑了 XML Worker。我提到的教程中所有用键标记的项目都是“iText 7 中的新项目”,例如属性继承(这使我们能够以更好的方式应用 CSS)。

    完成后您会看到显着的改进。

    【讨论】:

    • @Bruno 这个答案是否仍然有效。我在网站上看到了一个 html2pdf。
    • @HopeKing 是的,我们已经发布了pdfHTML,是的,包名/Maven id 是html2pdf (html2pdf = pdfHTML) 有点令人困惑。你可以在这里找到教程:developers.itextpdf.com/content/…
    • @Bruno 谢谢。看起来这在 maven 上不可用,需要正确的许可证密钥。有没有办法测试它是如何工作的?
    • @Bruno 我使用 maven 作为我的构建工具。因此,我使用的是来自itextpdf.com/blog/itext-702-releasehtml2pdf 但我收到错误“缺少工件 com.itextpdf:html2pdf:jar:1.0.1”。您的链接中是否存在 Maven 依赖项?抱歉,如果我遗漏了一些明显的东西
    • @BrunoLowagie 你能帮忙吗?谢谢。
    猜你喜欢
    • 2017-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-01
    • 2014-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多