【发布时间】:2021-05-27 19:34:41
【问题描述】:
您好,我正在尝试使用 maven repo 中提供的 itext 7(最新版本 7.1.15)将 HTML 字符串转换为 pdf。
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import com.itextpdf.html2pdf.ConverterProperties;
import com.itextpdf.html2pdf.HtmlConverter;
public class PdfHtmlResponsiveDesign
{
public static void main(String[] args) throws IOException
{
String htmlSource = "<h1>aaa</h1>";
File pdfDest = new File("C:\\Users\\acme\\Desktop\\tester\\itext7.pdf");
// pdfHTML specific code
ConverterProperties converterProperties = new ConverterProperties();
converterProperties.setBaseUri("");
HtmlConverter.convertToPdf(htmlSource,
new FileOutputStream(pdfDest), converterProperties);
}
}
但是这个简单的代码会引发错误。这适用于 itext 5.x。 任何找到问题的指针都会非常有帮助。
Exception in thread "main" java.lang.NoClassDefFoundError: com/itextpdf/kernel/counter/event/IMetaInfo
at com.pegado.qpguard.demo.PdfHtmlResponsiveDesign.main(PdfHtmlResponsiveDesign.java:19)
Caused by: java.lang.ClassNotFoundException: com.itextpdf.kernel.counter.event.IMetaInfo
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 1 more
注意:
Itext 7 版本 7.1.15
html2pdf 版本 3.0.4
其他信息
如果我将 itext 的版本更改为 7.1.14,同样的代码会给我另一个错误
Exception in thread "main" java.lang.NoClassDefFoundError: com/itextpdf/layout/renderer/FlexContainerRenderer
at com.itextpdf.html2pdf.attach.util.WaitingInlineElementsHelper.flushHangingLeaves(WaitingInlineElementsHelper.java:196)
at com.itextpdf.html2pdf.attach.impl.tags.DivTagWorker.processEnd(DivTagWorker.java:97)
at com.itextpdf.html2pdf.attach.impl.tags.HTagWorker.processEnd(HTagWorker.java:67)
at com.itextpdf.html2pdf.attach.impl.DefaultHtmlProcessor.visit(DefaultHtmlProcessor.java:345)
at com.itextpdf.html2pdf.attach.impl.DefaultHtmlProcessor.visit(DefaultHtmlProcessor.java:338)
at com.itextpdf.html2pdf.attach.impl.DefaultHtmlProcessor.visit(DefaultHtmlProcessor.java:338)
at com.itextpdf.html2pdf.attach.impl.DefaultHtmlProcessor.processDocument(DefaultHtmlProcessor.java:253)
at com.itextpdf.html2pdf.attach.Attacher.attach(Attacher.java:78)
at com.itextpdf.html2pdf.HtmlConverter.convertToDocument(HtmlConverter.java:325)
at com.itextpdf.html2pdf.HtmlConverter.convertToPdf(HtmlConverter.java:139)
at com.itextpdf.html2pdf.HtmlConverter.convertToPdf(HtmlConverter.java:127)
at com.itextpdf.html2pdf.HtmlConverter.convertToPdf(HtmlConverter.java:104)
at com.itextpdf.html2pdf.HtmlConverter.convertToPdf(HtmlConverter.java:92)
at com.pegado.qpguard.demo.PdfHtmlResponsiveDesign.main(PdfHtmlResponsiveDesign.java:19)
Caused by: java.lang.ClassNotFoundException: com.itextpdf.layout.renderer.FlexContainerRenderer
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 14 more
谢谢
【问题讨论】:
-
最后,我不得不用 PdfBox 来做这个