如何从PDF中删除密码?

Chi*_*a B 75 gui command-line pdf

我有一个受密码保护的 PDF 文件。我知道密码,但为了共享文件,我必须从 PDF 中删除密码并共享未受保护的副本。无论有没有 GUI,我如何在 Ubuntu 中做到这一点?

Chi*_*a B 109

最简单的GUI方式(推荐给新手)

打开受保护的文件并使用ctrl+p或使用打印选项打印文件,现在将文件另存为 pdf。


使用命令行

如果您已经安装了 pdftk,则可以跳过步骤 1

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

sudo apt list | grep pdftk 
Run Code Online (Sandbox Code Playgroud)

如果输出包含带有 pdftk 的 '[installed]' 标签,那么您可以跳过步骤 1,即如果输出是这样的

pdftk/xenial 2.02-4 amd64 [installed]
Run Code Online (Sandbox Code Playgroud)

第一步:安装pdftk

sudo apt-get install pdftk
Run Code Online (Sandbox Code Playgroud)

第 2 步:运行以下命令

pdftk /path/to/input.pdf input_pw <yourpassword> output out.pdf
Run Code Online (Sandbox Code Playgroud)


如果您不想安装 pdftk,则会自动安装另一个实用程序 qpdf(至少在我使用的 16.04 上)

要使用 qpdf 生成不安全的 pdf,请运行以下命令。

qpdf -password=<your-password> -decrypt /path/to/secured.pdf out.pdf
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请查看HTG 教程

  • 不幸的是,“pdftk”无法打开我的 PDF:“错误:无效的 PDF:未知.加密.type.r”。(与此同时,Evince 能够完美地打开它。)qpdf 为我解决了这个问题。 (5认同)
  • pdftk问题:https://gitlab.com/pdftk-java/pdftk/-/issues/87 (3认同)

小智 31

我在 ubuntu mate 19.04 中试过这个:

sudo apt-get install qpdf
qpdf --password=YOURPASSWORD-HERE --decrypt input.pdf output.pdf
Run Code Online (Sandbox Code Playgroud)

来源

  • 惊人的!由于加密(`InvalidPdfException:unknown.encrpytion.type.r`),pdftk 对我不起作用,但 qpdf 做到了! (4认同)
  • 一个更安全的版本来处理目录中的所有文件.. `for i in *.pdf; 执行 qpdf --password="$mypass" --decrypt "$i" "${i%.pdf}.decrypted.pdf"; 完成` (2认同)

gus*_*brs 8

这是一个老问题,但似乎是关于此事的参考,令人惊讶的是,没有一个答案告诉我们如何避免在命令行上传递密码(这可能是泄漏的来源)。当然,由于这是从文件中删除密码保护,因此也许您并不关心。但也许您从一家公司收到了一份 pdf 文件,该公司使用您的一些数据来加密该文件,并且您希望避免泄露它。

我们pdftk可以使用:

pdftk protected.pdf input_pw output out.pdf do_ask
Run Code Online (Sandbox Code Playgroud)

然后在终端中查询密码,您可以输入它。

有了qpdf它就有点不那么直接了。可以读取传递给选项qpdf的密码:stdin---password-file=

qpdf --password-file=- --decrypt protected.pdf out.pdf
Run Code Online (Sandbox Code Playgroud)

输入后,qpdf将等待来自标准输入的输入。然后您可以输入<yourpassword>,RETCtrl+ dCtrl+在 Linux 中d发送EOF。在 Windows 中,我认为它会是Ctrl+ z,但我不确定)。

如果您有旧版本qpdf(v10.2.0 之前),则--password-file=无法以这种方式工作,但仍然可以使用stdin@-选项读取整个参数。鉴于此,您可以使用:

qpdf @- --decrypt protected.pdf out.pdf
Run Code Online (Sandbox Code Playgroud)

然后输入--password=<yourpassword>,RETCtrl+ d


小智 5

sudo apt-get install pdftk
pdftk input.pdf output output.pdf user_pw YOURPASSWORD-HERE
Run Code Online (Sandbox Code Playgroud)

这需要您input.pdf,删除密码并将其导出为output.pdf.

您可能需要查看此处以探索其他方法。

  • 也不适合我。这是通过将 user_pw 参数放在 input.pdf 之后来实现的(看起来参数是位置的)。所以“pdftk input.pdf user_pw YOURPASSWORD-HERE输出output.pdf”应该可以工作(我使用了input_pw而不是user_pw)。 (4认同)

Hap*_*ace 5

使用这个 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"
}
Run Code Online (Sandbox Code Playgroud)

:是一个no-operations函数。$in:r获取不带扩展名的变量。显然你需要ghostscript安装。