2012-01-05 105 views
7

我需要处理大量受保护的pdf文件并使用java程序进行编辑,但是我没有这些文件的密码。 有什么办法可以用批处理解锁这些文件吗?解锁受保护的pdf文件

我想要一个Windows命令,如工具或Java开源API。 什么是最佳解决方案?

+3

最好的解决方案是向拥有文件内容的人请求支持 - 那可能是密码保护他们的人。 – mah 2012-01-05 20:44:20

+0

只要PDF只有一个所有者密码而不是一个用户密码(您仍然可以查看它们),那么文件中没有任何加密。这些限制只能由查看器应用程序强制实施,并且PDF完全不受保护。如果您拥有自己的编辑应用程序,则可以忽略该保护。 – Alasdair 2012-01-06 01:04:36

回答

16

是要求打开密码的这些pdf文件,还是保护包含对复制,打印,修改,文本提取等方面的限制吗?

,如果这是你的情况,你可以用

qpdf尝试

用法:

qpdf --decrypt file.pdf unlocked.pdf 

,并且可以在一个批次中使用操作集体,这样

for f in *.pdf ; do qpdf --decrypt $f ${f%%.pdf}unlocked.pdf; done 
+0

我的pdf文件不需要输入密码。我的限制是关于复制,打印,修改,我想要一个与qpdf完成相同工作的java库。 – brianbro 2012-01-06 15:48:30

+0

谢谢。我用你的解决方案。完美 – brianbro 2012-08-09 22:25:33

+1

是的,这是PDFUnlock最好的免费和开放源代码! – hellboy 2013-11-18 15:57:33

0

你也可以使用iText库来做到这一点。

下面是一个示例代码:

 PdfReader.unethicalreading = true; 
     PdfReader reader = new PdfReader(inputFile); 
     PdfEncryptor.encrypt(reader, new FileOutputStream(outputFile), null, 
       null, PdfWriter.ALLOW_ASSEMBLY | PdfWriter.ALLOW_COPY 
        | PdfWriter.ALLOW_DEGRADED_PRINTING | PdfWriter.ALLOW_FILL_IN 
        | PdfWriter.ALLOW_MODIFY_ANNOTATIONS | PdfWriter.ALLOW_MODIFY_CONTENTS 
        | PdfWriter.ALLOW_PRINTING | PdfWriter.ALLOW_SCREENREADERS, false); 

P.S. :使用unethicalreading标志自负风险