如何计算 Ghostscript 命令行中的 dPermissiions 参数?

How to calculate dPermissiions parameter in the Ghostscript command line?

我正在寻找在线计算器、工具或至少是一篇易于理解的文章,它可以让我定义 Ghostscript 命令行的 dPermissiions 参数的值。 请指教!

它记录在 VectorDevices.htm 中,其中说明它是一个位字段并引导您访问 PDF 参考手册。实际值由 Adob​​e 定义。

标准安全处理程序(1.7 PDF 参考手册的第 121 页)中描述了各种访问权限,Table 3.20(1.7 PDF 参考手册中的第 124 和 124 页)描述了各个位。

第 1 位和第 2 位(最低的 2 位)始终定义为 0,因为(当前)是第 13-32 位。恼人的是,第 7 位和第 8 位是保留位,必须为 1。

假设您想授予打印文档的权限,为此您需要设置位 3。因此位 1-2 为 0,位 4-32 也为 0,位 7 和 8 必须为1. 在二进制中对应于:

00000000 00000000 00000000 11000100

十六进制为 00 00 00 C4,十进制为 196。因此您可以设置 -dPermissions=196

举一个更复杂的例子,我们可能还想设置位 12 以允许高质量打印(对于安全处理程序的修订版 3 或更高版本)。现在我们要设置二进制的第 3 位和第 12 位:

00000000 00000000 00001000 11000100

十六进制 00 00 08 C4,十进制为 2244,因此您可以设置 -dPermissions=2244

Windows 计算器在设置为程序员模式时具有二进制输入配置。如果您以二进制输入位域,然后切换为十进制,它会为您转换。或者有一个在线转换工具 here.

只需写出您想要设置为二进制的位,设置位 7 和 8,然后转换为十进制,简单!

--编辑--

因此,正如 Vsevolod Azovsky 指出的那样,第 12-32 位应该是 1。使用我在上面指出的相同工具,您可以获得二进制表示的带符号 2 的十进制补码,您可以将其用作值权限。

但是,如果您这样做,Ghostscript 的 pdfwrite 设备将产生警告。原因是我在上面设置的一些位(位 8 以上的任何位)仅与修订版 3(或更好)安全处理程序兼容,而 pdfwrite 的默认设置是使用修订版 2 安全加密。

因此,如果您想使用 Adob​​e 文档中标记为 'revision 3' 的位,那么您(显然)需要使用 -dEncryptionR=3 将修订版设置为 3。这要求输出的 PDF 文件是 1.4 或更高版本的文件,您不能将修订版 3 与 PDF 1.3 文件一起使用。

请注意,对于修订版 2 安全处理程序,所有位 1-2 和 7-32 都必须为 1。

希望这也能回答上一条评论中的问题。