使用Flying Saucer将URL的HTML转PDF遇依赖缺失,求正确Maven依赖
我尝试用Flying Saucer把指定URL的HTML生成PDF,已经在Maven的pom.xml里引入了flying-saucer-pdf-itext5 9.0.1依赖,手动添加外部Jar到IntelliJ IDE也没用,出现如下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: org/xhtmlrenderer/extend/UserAgentCallback
at PDFGen.main(PDFGen.java:14)
Caused by: java.lang.ClassNotFoundException: org.xhtmlrenderer.extend.UserAgentCallback
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
... 1 more
使用的代码如下:
import org.xhtmlrenderer.pdf.ITextRenderer; import java.io.FileOutputStream; public class PDFGen { public static void main(String[] args) { try { String url = "https://en.wikipedia.org/wiki/IPhone"; String pdfFilePath = "output.pdf"; ITextRenderer renderer = new ITextRenderer(); renderer.setDocument(url); // Render the HTML to PDF renderer.layout(); renderer.createPDF(new FileOutputStream(pdfFilePath)); System.out.println("PDF generated successfully."); } catch (Exception e) { e.printStackTrace(); } } }
当前Maven依赖配置:
<dependency> <groupId>org.xhtmlrenderer</groupId> <artifactId>flying-saucer-pdf-itext5</artifactId> <version>9.0.1</version> </dependency>
正确的依赖配置
你需要补充引入Flying Saucer的核心库,因为flying-saucer-pdf-itext5是基于核心包的扩展,默认不会自动引入核心依赖。以下是完整的Maven依赖:
<!-- Flying Saucer核心渲染库,包含缺失的UserAgentCallback类 --> <dependency> <groupId>org.xhtmlrenderer</groupId> <artifactId>flying-saucer-core</artifactId> <version>9.0.1</version> </dependency> <!-- Flying Saucer PDF生成扩展(基于iText5) --> <dependency> <groupId>org.xhtmlrenderer</groupId> <artifactId>flying-saucer-pdf-itext5</artifactId> <version>9.0.1</version> </dependency> <!-- 显式引入iText5依赖,避免版本冲突 --> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.13.3</version> </dependency>
配置说明
flying-saucer-core是核心依赖,缺失的org.xhtmlrenderer.extend.UserAgentCallback类就来自这个包,这是导致错误的直接原因。flying-saucer-pdf-itext5负责将HTML渲染结果转换为PDF格式,依赖iText5处理PDF生成逻辑。- 显式指定
itextpdf版本可以避免Maven依赖传递带来的版本不一致问题,确保依赖稳定。
配置完成后,执行mvn clean install刷新项目依赖,重新运行代码即可正常生成PDF。
内容的提问来源于stack exchange,提问作者ezhil

