为了账号安全,请及时绑定邮箱和手机立即绑定

如何正确加密合并的pdf文档

如何正确加密合并的pdf文档

动漫人物 2022-07-06 19:17:28
我对 pdfBox API 有疑问。我正在尝试使用以下代码加密合并的 pdfdocument:这是合并/创建文档的功能    public static void fillMultipleReportsInOne(List<report> reports) throws IOException {        PDFMergerUtility PDFmerger = new PDFMergerUtility();         PDDocument resultPDF = new PDDocument();        for (report report : reports) {            try             {                PDDocument pdfDocument = PDDocument.load(new File(SRC + "test.pdf"));                // get the document catalog                PDAcroForm acroForm = pdfDocument.getDocumentCatalog().getAcroForm();                // as there might not be an AcroForm entry a null check is necessary                setFormFields(acroForm, report.getName(), report.getArea(), report.getOperatingActivities(), report.getVocationlaSchool(), report.getWeeklyTopics());                // Save and close the filled out form.                PDFmerger.appendDocument(resultPDF, pdfDocument);        } catch (Exception e) {            e.printStackTrace();        }    }    encryptPDF(resultPDF, SRC + "merged.pdf");}这是加密的功能: public static PDDocument encryptPDF(PDDocument pddocumentToEncrypt, String SRC) {        // Define the length of the encryption key.        // Possible values are 40 or 128 (256 will be available in PDFBox 2.0).        int keyLength = 128;        AccessPermission ap = new AccessPermission();        // Disable printing, everything else is allowed        ap.setCanModifyAnnotations(false);        ap.setCanFillInForm(false);        ap.setCanModify(false);        // Owner password (to open the file with all permissions) is "12345"        // User password (to open the file but with restricted permissions, is empty here)         StandardProtectionPolicy spp = new StandardProtectionPolicy("12334", "", ap);        spp.setEncryptionKeyLength(keyLength);        spp.setPermissions(ap);我的结果如下所示:结果
查看完整描述

1 回答

?
FFIVE

TA贡献1797条经验 获得超6个赞

打电话

pddocumentToEncrypt.getDocumentCatalog().getAcroForm().refreshAppearances();

为 2.0 版本修复了这个问题。setValue()当设置 /NeedAppearances 时,该版本不会在调用中设置外观(即表单值的视觉表示) (请参阅 参考资料PDTerminalField.applyChange())。/NeedAppearances 设置(如果为真)意味着查看应用程序应该创建外观,以便中间的处理应用程序不需要这样做;我怀疑其中一项或多项权限设置会阻止 Adobe Reader 在显示时对其进行更改。

另一种解决方案是致电

pdfDocument.getDocumentCatalog().getAcroForm().setNeedAppearances(false);

在设置表单值之前。

唯一未解之谜是为什么第一个值在合并文件中可见。


查看完整回答
反对 回复 2022-07-06
  • 1 回答
  • 0 关注
  • 231 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信