首页 > 解决方案 > 如何在 Ghostscript 命令行中计算 dPermissions 参数?

问题描述

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

标签: pdfghostscript

解决方案


它记录在 VectorDevices.htm 中,其中说明了它的位字段并将您引导至 PDF 参考手册。实际值由 Adob​​e 定义。

各种访问权限在标准安全处理程序(在 1.7 PDF 参考的 p121 上)中进行了描述,各个位在表 3.20 中进行了描述(在 1.7 PDF 参考手册中的 p124 和 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 计算器在设置为程序员模式时,具有二进制条目配置。如果您以二进制输入位域,然后切换到十进制,它将为您转换。或者,这里有一个在线转换工具。

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

- 编辑 -

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

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

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

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

希望这也能回答最后评论中的问题。


推荐阅读