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

如何使用Flying Saucer生成不可编辑的PDF文件

Flying Saucer 生成不可编辑 PDF 实现方案

核心实现逻辑是通过配置PDF文档的加密权限,禁用编辑、修改、内容提取等相关权限位,基于Flying Saucer配套的iText 2.x API即可完成配置,无需引入额外依赖。

实现步骤

  • 新增PDF加密配置监听器,在文档初始化阶段设置权限
    你可以直接在现有Thymeleaf渲染HTML后转PDF的逻辑中,给ITextRenderer添加如下监听器配置即可:
import com.lowagie.text.pdf.PdfWriter;
import org.xhtmlrenderer.pdf.ITextRenderer;
import org.xhtmlrenderer.pdf.PDFCreationListener;

import java.io.OutputStream;

public class NonEditablePdfGenerator {
    // htmlContent 为Thymeleaf渲染完成的最终HTML字符串
    public void generateNonEditablePdf(String htmlContent, OutputStream outputStream) throws Exception {
        ITextRenderer renderer = new ITextRenderer();
        
        // 配置加密权限监听器
        renderer.setListener(new PDFCreationListener() {
            @Override
            public void preOpen(ITextRenderer iTextRenderer) {
                PdfWriter pdfWriter = iTextRenderer.getWriter();
                try {
                    pdfWriter.setEncryption(
                        // 打开文档的用户密码,传null代表无需密码即可打开
                        null,
                        // 所有者密码,可自定义设置,持有所有者密码可获得完整权限
                        null,
                        // 配置允许的权限,仅保留打印权限,其他所有编辑、修改、复制权限全部禁用
                        PdfWriter.ALLOW_PRINTING,
                        // 加密算法选择AES128,兼容性最好
                        PdfWriter.ENCRYPTION_AES_128
                    );
                } catch (Exception e) {
                    throw new RuntimeException("PDF权限配置失败", e);
                }
            }

            @Override
            public void onClose(ITextRenderer iTextRenderer) {
                // 无需额外处理
            }
        });

        // 原有Flying Saucer生成PDF逻辑保持不变
        renderer.setDocumentFromString(htmlContent);
        renderer.layout();
        renderer.createPDF(outputStream, false);
        renderer.finishPDF();
        outputStream.flush();
    }
}

权限配置说明

  • 若需要完全禁用所有交互权限,仅允许查看,可以将权限位设置为0,用户打开PDF后无法进行打印、复制、编辑等任何操作
  • 多个权限可以通过|拼接,比如同时允许打印和复制内容可以写为PdfWriter.ALLOW_PRINTING | PdfWriter.ALLOW_COPY
  • 若需要设置文档打开密码,可以将setEncryption方法的第一个参数替换为自定义密码的字节数组,无密码的用户将无法打开文档

注意事项

  • Flying Saucer默认依赖的是com.lowagie:itext 2.1.x版本的iText,不要使用5.x/7.x版本的Apache iText,包名和API不兼容
  • 按上述配置生成的PDF在所有主流PDF阅读器中都会默认锁定编辑权限,普通用户无法直接修改内容
  • 如果需要更高等级的防篡改能力,可以在生成PDF后额外添加数字签名,进一步保障文档不可篡改

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 10:09:02