【问题标题】:How to check the pdf file is editable or not(protected) in java如何在java中检查pdf文件是否可编辑(受保护)
【发布时间】:2015-11-29 23:06:08
【问题描述】:

给定一个pdf 文件,是否可以确定该文件在Java 中是否可编辑? PDDocument.getCurrentAccessPermission().isReadOnly() 不起作用。

【问题讨论】:

  • 当你说'不工作'时,你是什么意思?运行该函数会得到什么结果?
  • 是的,最好包含不起作用的代码。并解释为什么将 itext 放入标签列表,例如“itext 的代码是什么”?
  • 您是否决定是否也需要 itext 的答案?如果您不想要 itext 的答案,请删除 itext 标记。 (您可以编辑)如果您也想要 itext 的答案,请提及您尝试过的内容。

标签: java pdf adobe itext pdfbox


【解决方案1】:

在1.8版本中,使用“旧”解析器时,需要先调用openProtection(),因为这样的文件是用空密码“加密”的:

if (doc.isEncrypted()
{
    doc.openProtection(new StandardDecryptionMaterial(""));
}

然后你就可以打电话了

doc.getCurrentAccessPermission().isReadOnly()

或来自AccessPermission 类的任何其他方法。

或者,使用“新”非顺序解析器加载您的 PDF:

PDDocument doc = PDDocument.loadNonSeq(new File(...), null);

然后doc.getCurrentAccessPermission().isReadOnly()也可以调用。

【讨论】:

  • 需要检查受密码保护的 pdf 和受保护的 pdf 文件,并为两者提取单独的错误消息,但上述代码对于受保护的文件工作正常,但不适用于受密码保护的文件。得到以下错误原因:org.apache.pdfbox.exceptions.CryptographyException:错误:提供的密码与文档中的所有者或用户密码不匹配。我需要检查 pdf 文件的密码是否为空。请告诉我。如何区分。
  • 这里是代码: if(document.isEncrypted()) { String a = "PASSWORD_PROTECTED"; doc.openProtection(new StandardDecryptionMaterial("")); if(!document.getCurrentAccessPermission().canModify()) { String a = "PROTECTED"; } }
  • @YashwanthKothapa 这不是你的问题。但这很简单:如果您在使用空密码打开后仍出现加密异常,那么显然该文件受密码保护。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-31
  • 1970-01-01
  • 2017-11-01
  • 2013-01-04
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
相关资源
最近更新 更多