使用 Ghostscript 受密码保护的 PDF

问题描述 投票:0回答:4

我需要在 php 中使用 Ghostscript 对 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");
php pdf password-protection ghostscript
4个回答
15
投票

好的,首先您不需要将文件转换为 PostScript。 Ghostscript 完全能够将 PDF 文件作为输入并生成 PDF 文件作为输出,很多人出于多种原因这样做。

但是,您需要注意,如果您这样做,Ghostscript 不仅仅是“标记”PDF 文件或其他内容,它会将其完全解释为标记操作,然后制作一个包含这些标记的全新 PDF 文件。但是,如果您对转换为 PostScript 并返回 PDF 感到满意,您应该会发现这令人满意,它实际上比执行两步转换更好。

其次,pdfwrite 设备没有“PDFPassword”开关,这就是它没有效果的原因。有 2 开关:

-sOwnerPassword
-sUserPassword
。您可能还想提供
-dPermissions
开关。

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


6
投票

上述答案对我不起作用,所以我发布我的答案。

Ghostscript 版本:

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

有效的命令...

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

6
投票

开关

-sOwnerPassword
-sUserPassword
对我不起作用。

但是,

-sPDFPassword
做到了。


0
投票

使用 PowerShell 在 Windows 中回答 GPL Ghostscript 10(2023 年 6 月),基于 此评论

gswin64c -q -dNOPAUSE -dBATCH -sstdout=$null -sDEVICE=pdfwrite -sOutputFile="OUTPUT.pdf" -f INPUT.pdf

对于较大的 PDF 文件:

gswin64c -q -dNOPAUSE -dBATCH -sstdout=$null -sDEVICE=pdfwrite -sOutputFile="OUTPUT.pdf" -c 3000000 setvmthreshold -f INPUT.pdf
© www.soinside.com 2019 - 2024. All rights reserved.