You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Flying Saucer生成PDF后,Itext PdfReader报InvalidPdfException求助

解决Flying Saucer生成PDF后iText PdfReader报InvalidPdfException的问题

异常信息

com.itextpdf.text.exceptions.InvalidPdfException: PDF header signature not found.

问题分析

生成的PDF文件无效,未以%PDF-开头,通常由流处理不当、版本不兼容或生成过程异常导致。

解决方案

1. 修正流的处理逻辑

手动管理流容易出现关闭顺序错误,导致文件未完全写入。改用try-with-resources自动管理流,确保资源正确释放:

try (OutputStream os = new FileOutputStream(path)) {
    ITextRenderer renderer = new ITextRenderer();
    renderer.setDocumentFromString(html);
    renderer.layout();
    renderer.createPDF(os);
    renderer.finishPDF();
} catch (IOException e) {
    e.printStackTrace();
}

2. 检查Flying Saucer与iText版本兼容性

Flying Saucer对iText版本有严格依赖,版本不匹配会导致生成的PDF无法被高版本PdfReader识别:

  • 若使用Flying Saucer 9.x+,需搭配iText 5.x(推荐5.5.13.3)
  • 旧版Flying Saucer(如8.x及以下)通常依赖iText 2.1.7,此时需使用对应版本的PdfReader

Maven依赖示例(匹配版本):

<!-- Flying Saucer -->
<dependency>
    <groupId>org.xhtmlrenderer</groupId>
    <artifactId>flying-saucer-pdf</artifactId>
    <version>9.1.22</version>
</dependency>
<!-- 对应iText版本 -->
<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itextpdf</artifactId>
    <version>5.5.13.3</version>
</dependency>

3. 排查生成过程中的异常

生成PDF时若出现HTML解析错误、CSS不支持等问题,会导致文件损坏。添加异常捕获,查看具体错误:

try (OutputStream os = new FileOutputStream(path)) {
    ITextRenderer renderer = new ITextRenderer();
    renderer.setDocumentFromString(html);
    renderer.layout();
    renderer.createPDF(os);
    renderer.finishPDF();
} catch (Exception e) {
    e.printStackTrace(); // 打印生成过程中的所有异常
}

4. 验证HTML内容有效性

复杂或不规范的HTML可能导致生成失败。先用极简HTML测试:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
</head>
<body>
    <h1>测试PDF</h1>
    <p>这是一个测试文档</p>
</body>
</html>

若用此HTML生成的PDF能正常读取,说明原HTML存在格式或兼容性问题。

内容的提问来源于stack exchange,提问作者YoHaRo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 02:06:27