如何在 Java 中使用 PDF Facades

如何在 Java 中使用 PDF Facades

展平注释

将所有注释展平到页面内容流中,使其不再作为独立的注释对象可编辑或可删除。这是打印或归档文档前的常用步骤:

try (PdfAnnotationEditor editor = new PdfAnnotationEditor()) {
    editor.bindPdf("annotated.pdf");
    editor.flattenAnnotations();
    editor.save("flat.pdf");
}

删除书签

删除文档中的所有大纲书签。书签(亦称为大纲)是 PDF 阅读器侧栏中可见的导航树条目:

try (PdfBookmarkEditor editor = new PdfBookmarkEditor()) {
    editor.bindPdf("input.pdf");
    editor.deleteBookmarks();
    editor.save("no-bookmarks.pdf");
}

替换文本

在文档的所有页面中替换字符串。这在分发文档前填充模板占位符时非常有用:

try (PdfContentEditor editor = new PdfContentEditor()) {
    editor.bindPdf("template.pdf");
    editor.replaceText("{{Date}}", "2026-05-24");
    editor.save("output.pdf");
}

加密文档

使用 PdfFileSecurity 应用带访问权限的 AES-256 加密。DocumentPrivilege.getForbidAll() 预设会禁用所有操作;随后可以通过 setter 方法重新启用各个权限:

try (PdfFileSecurity security = new PdfFileSecurity("input.pdf", "secured.pdf")) {
    DocumentPrivilege priv = DocumentPrivilege.getForbidAll();
    priv.setAllowPrint(true);
    security.encryptFile("user", "owner", priv, KeySize.x256);
}

提取文本

使用 PdfExtractor 遍历页面文本。首先调用 extractText() 处理所有页面,然后使用 getNextPageText() 获取每页的文本:

try (PdfExtractor extractor = new PdfExtractor()) {
    extractor.bindPdf("document.pdf");
    extractor.extractText();
    while (extractor.hasNextPageText()) {
        String text = extractor.getNextPageText();
        System.out.println(text);
    }
}

另请参阅

 中文