如何从PDF中删除密码?

我有一个密码保护的PDF文件。我知道密码,但为了分享文件,我需要从PDF中删除密码并分享一个无保护的副本。在Ubuntu上,我该如何使用GUI或不使用GUI来完成这个操作?
8个回答

最简单的方式是使用图形用户界面(GUI)(推荐给新手)

打开受保护的文件,使用 Ctrl+P 或者选择打印选项打印文件,然后将文件保存为 PDF。


使用命令行

如果您已经安装了pdftk,可以跳过第一步

步骤0:检查Pdftk是否已安装

sudo apt list | grep pdftk 

如果输出包含带有 pdftk 的 '[installed]' 标记,则可以跳过步骤1,即如果输出如下所示。
pdftk/xenial 2.02-4 amd64 [installed]

第一步:安装pdftk
sudo apt-get install pdftk

第二步:运行以下命令
pdftk /path/to/input.pdf input_pw <yourpassword> output out.pdf

如果您不想安装pdftk,还有另一个实用程序qpdf,它会自动安装(至少在我使用的16.04版本上)。
要使用qpdf生成未加密的PDF,请运行以下命令。
qpdf -password=<your-password> -decrypt /path/to/secured.pdf out.pdf

详细信息请查看this HTG教程。

4很不幸,pdftk无法打开我的PDF文件:错误:无效的PDF文件:unknown.encryption.type.r。(与此同时,Evince可以完美地打开它。)qpdf对我起了作用。 - balu
2pdftk问题:https://gitlab.com/pdftk-java/pdftk/-/issues/87 - user1338062
在MacOS Monterey中,PDFTK存在相同的问题。但是qpdf可以解决这个问题。使用命令brew install qpdf安装即可。 - vijay v
GUI qpdfview无法打印到文件(pdf)。必须使用pdftk。 - Geoffrey Wheeler

我在Ubuntu Mate 19.04上尝试过这个。
sudo apt-get install qpdf
qpdf --password=YOURPASSWORD-HERE --decrypt input.pdf output.pdf

源代码

编辑:您还可以先在Chrome中打开文件,然后另存为PDF。


7太棒了!由于加密问题,pdftk对我来说无法使用(InvalidPdfException: unknown.encrpytion.type.r),但是qpdf可以! - Christian Benke
我使用这个脚本来解密当前目录中的所有PDF文件:mkdir dec; ls *.pdf | xargs -i qpdf --password= --decrypt {} dec/{} - AmanicA
2一个更安全的版本,用于处理目录中的所有文件。for i in *.pdf; do qpdf --password="$mypass" --decrypt "$i" "${i%.pdf}.decrypted.pdf"; done - shalomb
实际上,对于我来说,qpdf --decrypt in.pdf out.pdf(无需密码)运行得很好。 - Déjà vu

sudo apt-get install pdftk
pdftk input.pdf output output.pdf user_pw YOURPASSWORD-HERE

这个程序会拿取你的input.pdf,去除密码并导出为output.pdf
你可能想要在这里查看其他方法。

这对我来说没有起作用 - ptetteh227
4对我也不起作用。这是通过在input.pdf之后直接添加user_pw参数来实现的(似乎参数是位置相关的)。所以,“pdftk input.pdf user_pw YOURPASSWORD-HERE output output.pdf”应该可以工作(我使用的是input_pw而不是user_pw)。 - Bozzy
最新版本似乎要求使用上述格式和参数顺序。 - higuita

使用这个zsh函数:
pdf-unencrypt () {
    : "Usage: <file>
Uses ghostscript to rewrite the file without encryption."
    local in="$1"
    gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile="${in:r}_unencrypted.pdf" -c .setpdfwrite -f "$in"
}

: 是一个无操作函数。 $in:r获得变量而没有其扩展名。显然你需要安装ghostscript


1在Ghostscript的更新版本中,您需要从上面的命令行中删除“-c .setpdfwrite -f”。否则,9.54或更高版本将出现“错误:/undefined in .setpdfwrite”。(我不知道为什么会有一个斜杠在里面)。而9.53.x版本将给您一个警告消息,说明“.setpdfwrite运算符已被弃用,并将在下个Ghostscript发布版本中完全删除”。 - AJM
我已经多次看到这个命令,但是当我运行它时,会出现一个错误提示:“此文件需要密码才能访问”。所以至少在最近的gs版本中,它似乎无法正常工作,或者至少对我来说是这样。 - rbaleksandar
几乎可以工作,除了在尝试保存编辑时不会提示输入密码,而是会冻结(在Preview.app中)。 - ijoseph
编辑:哦,等等,如果我然后使用Preview.app将其再次导出(为PDF),现在可以成功保存编辑。得分。 - ijoseph

这是一个老问题,但似乎是关于此事的参考,并且令人惊讶的是,没有一个答案告诉我们如何避免在命令行中传递密码(这可能会导致泄漏)。当然,由于这是关于从文件中删除密码保护,也许你不在意。但也许你收到了一家公司发来的PDF文件,他们使用了你的一些数据来加密该文件,而你希望避免泄露它。
使用pdftk,我们可以使用以下命令:
pdftk protected.pdf input_pw output out.pdf do_ask

密码然后在终端中查询,并且您可以输入它。
使用qpdf稍微不太直接。 qpdf接受一个@-选项,从标准输入读取参数。有了这个选项,您可以使用:
qpdf @- --decrypt protected.pdf out.pdf

一旦您输入了这个命令,qpdf 将等待从标准输入接收输入。然后您可以输入以下内容:
--password=<yourpassword>

然后按下RETCtrl+d(在Linux中,Ctrl+d发送EOF。在Windows中,我认为应该是Ctrl+z,但我不确定)。


1你确定不需要密码吗?如果这样做的话,PDF文件的密码保护就等于没有保护。 - Marc Vanhoomissen
试一试,你会知道。 - baobab33
我尝试了,得到一条消息:“此文件需要密码才能访问。错误:/invalidfileaccess in pdf_process_Encrypt”。 - Marc Vanhoomissen
我认为你是对的,这会在文件被锁定以供编辑时移除保护,而不是阅读。 - baobab33
不适用于带密码的可读PDF文件:错误:/undefined in .setpdfwrite - oarfish

在这里稍微提一下(但我是一个新的Linux用户,所以...):

  1. 无论如何,我也使用了我已知密码的文件。但是我使用了"Master PDF Editor 5"(未注册的免费版本)来删除密码(文件 - 属性 - 安全性 - 无加密)。
  2. 然而,由于"Master PDF Editor 5"会留下水印(我个人并不介意),我重新在Libre Office Draw中打开(现在解锁的文件)并删除了水印。
  3. 我将文件导出为PDF,结果还能极大地压缩而没有任何损失。这是一个非常简单的文件;只有一页表格上的文本,但是上述过程将文件大小从大约70KB减小到约22KB。

如果您已经有密码,您可以使用以下方法来删除密码。
gs -dNOPAUSE -dBATCH -q -sDEVICE=pdfwrite -sPDFPassword=password -sOutputFile=output2.pdf -f input.pdf