使用Ghostscript创建密码保护的PDF

9
我需要使用Ghostscript在PHP中对PDF文件进行密码保护。
这些文件将使用简单表单上传到服务器(我不需要任何帮助),但首先它们不会有任何保护。因此,我想使用“exec”函数和其中的Ghostscript为它们设置密码保护。但是我找不到任何关于Ghostscript查询的信息。
例如,我有一个名为File.pdf的PDF文件。我上传它,然后需要对其进行保护,并将其命名为File_protected.pdf。
我试图这样做,但“.ps”文件太重了,最终的File_protected.pdf中没有密码:
exec("gs -dNOPAUSE -dBATCH -sDEVICE=pswrite -sOutputFile=File.ps File.pdf");
exec("gs -dNOPAUSE -dBATCH -sPDFPassword=password -sDEVICE=pdfwrite -sOutputFile=File_protected.pdf File.ps");
4个回答

16

首先,您不需要将文件转换为PostScript。Ghostscript可以将PDF文件作为输入并生成PDF文件作为输出,许多人出于很多原因都这样做。

但是,您需要知道的是,如果您这样做,Ghostscript不仅仅是“盖章”PDF文件之类的操作,它会完全解释PDF文件,并生成一个完全包含这些标记的新PDF文件。但如果您满意将其转换为PostScript并再次转换为PDF,则应该会发现这是可以接受的,实际上比执行两步转换更好。

其次,pdfwrite设备没有'PDFPassword'开关,因此无效。有2个开关:-sOwnerPassword-sUserPassword。您还可能想提供-dPermissions开关。

您应该阅读PDF参考手册以获得详细信息,但简而言之,所有者可以对文件进行任何操作,用户仅限于权限(这是一个位字段)。如果您不提供用户密码,则任何人都可以打开该文件(受权限限制),但是您需要提供所有者密码才能执行未被权限允许的任何操作。我认为这就是您想要做的,但具体如何取决于您。


对于那些需要了解上面回答中提到的某些条款的详细信息的人:
  • PDF参考手册是由Adobe出版的,但我认为它们现在已经相当老了。如果您搜索pdf_reference17.pdf,应该能够找到其中一个。第120-124页描述了各种权限。
  • StackOverflow的以下网址的问题和答案明确描述了如何构建/解压缩权限位字段:https://stackoverflow.com/questions/51115741/how-to-calculate-dpermissiions-parameter-in-the-ghostscript-command-line
- gth

6

以上答案对我没用,所以我发表我的答案。

Ghostscript版本:

manan@manan-EliteBook-8470p ~ $ gs -v
GPL Ghostscript 9.18 (2015-10-05)
Copyright (C) 2015 Artifex Software, Inc.  All rights reserved.

可以使用以下命令来在Linux系统中查找指定文件或目录:

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dBATCH -dNOPROMPT -dNOPAUSE -dQUIET -sOwnerPassword=mypassword -sUserPassword=manan -sOutputFile=MyOutputFile.pdf MyInputFile.pdf

5

开关-sOwnerPassword-sUserPassword对我无效。

然而-sPDFPassword有效。


0
在使用GhostScript处理PDF时,密码的应用似乎存在一些混淆,两个之前的答案说相反的效果不起作用。
如果你应用了错误的密码,那么这两个答案中的哪一个是正确的!
要打开受保护的文件,你需要使用"-sPDFPassword=BlahBlah",因为密码是解密所必需的,然后你可以在没有密码加密的情况下保存文件,因为它们的价值很小且适得其反。
加密实际上会降低读者的可访问性,增加不必要的延迟和开销。
添加PDF密码的唯一原因是为了个人隐私,只有你自己知道个人打开密钥。其他密码可以很容易地被许多应用程序移除,包括GhostScript或任何其他阅读器/编写器。
要以文件锁的形式(用于个人隐私)编写PDF,你需要考虑你想要的设置。然后可以通过"-sOwnerPassword=myprivacy -sUserPassword=myprivacy"添加这些设置。
添加所有者设置没有多大意义,因为用户是该PDF的所有者,因此用户可以移除或忽略自己或其他用户的设置。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接