iText 7核心缺少xmlworker

7

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

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

iText 7的替代品是什么?

有什么解决方案吗?


目前,iText7不支持XmlWorker。 - Alexey Subach
感谢您的回复。我正在评估iText 7的功能。我听说自2017年以后,iText 5的支持和更新似乎不再可用,那么iText 7中xmlworker的发布计划是什么?这个功能在iText 7之后是否还可用? - Kino Fung
2个回答

5

XML Worker是iText路线图上的下一步计划,因此它将可用于iText 7。但首先我们需要完成将Java版的iText 7移植到C#版的iText 7,并且仍在努力记录iText 7。例如,请参见:iText 7:构建块

在开源中,人们经常发布,尽快发布。与保持所有代码封闭直到一切都完成不同,我们选择采用开源方式发布:准备好了就发布。准备好的那些,会尽快发布。

iText的大改造要求我们重新编写XML Worker。好处是,iText 7是以XML Worker为重点编写的。我提到的教程中标有键的所有项目都是“iText 7中的新内容”,例如属性继承(这使我们能够以更好的方式应用CSS)。

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


@Bruno 这个答案还有效吗?我在网站上看到了一个html2pdf。 - HopeKing
@HopeKing 是的,我们已经发布了pdfHTML,但是包名/Maven id是html2pdf有点让人困惑(html2pdf = pdfHTML)。您可以在此处找到教程:https://developers.itextpdf.com/content/itext-7-converting-html-pdf-pdfhtml - Bruno Lowagie
@Bruno 谢谢。看起来这个在Maven上不可用,需要一个许可证密钥。有没有办法测试它的工作方式? - HopeKing
@Bruno 我使用Maven作为我的构建工具。因此,我正在使用来自https://itextpdf.com/blog/itext-702-release的<artifactId>html2pdf</artifactId>,但是我遇到了一个错误“Missing artifact com.itextpdf:html2pdf:jar:1.0.1”。你的链接中有Maven依赖吗?如果我错过了一些明显的东西,请原谅。 - HopeKing
@BrunoLowagie,你能帮忙吗?谢谢。 - HopeKing

5
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

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