使用Ghostscript检查PDF文件是否包含透明对象。

4

PDF文件可以在多个部分定义透明度(详见此处):

作为图形样式属性:

  • 填充不透明度(/ca)或描边不透明度(/CA)小于1.0的值
  • 定义软遮罩(/SMask

或者使用透明度页面组的定义(/S /Transparency)。

下面的grep表达式是一个快速(而且粗略)的检查方法:

grep -aE -e '/[Cc][Aa] +0?\.[0-9]' -e '/SMask' -e '/S /Transparency' *.pdf

能否通过gs检查是否存在透明对象?

1个回答

6
我认为pdf_info.ps(gs/toolbin)可以告诉你这个信息。Ghostscript想要提前知道一个页面是否使用透明度,因为如果它知道没有透明度,它可以进行性能和内存的优化。
请注意,许多PDF文件声称具有“虚假”的透明度,其中透明度实际上是100%不透明的 :-(

1
如何使用pdf_info.ps?您能指导一下吗?我想列出PDF文档中所有透明对象。 - user269867
从pdf_info.ps标题中转储一些PDF文件的信息用法:gs -dNODISPLAY -q -sFile=____.pdf [-dDumpMediaSizes] [-dDumpFontsUsed [-dShowEmbeddedFonts]] toolbin / pdf_info.ps显然,-sFile = 应该是您感兴趣的PDF文件的完整路径和文件规范。根据您运行GS的位置,您可能需要修改pdf_info.ps的路径。 - KenS
2
已经寻找了2年的解决方案来检查PDF文件的透明度..这个命令非常完美 gs -dNODISPLAY -q -sFile=input.pdf /var/bin/ghostscript-9.16/toolbin/pdf_info.ps :D - clarkk
@KenS,pdf_info.ps代码是否可以更新以检测不是100%不透明的透明对象?基本上是删除假阳性,因为某些PDF编写者很懒散但超出用户控制范围? - Hakan Usakli
1
理论上是可以的,但实际上不行。需要检查的“东西”太多了。例如,您必须查看软蒙版图像的每个样本,以查看它是否完全不透明。必须跟踪每个ExtGState,以查看它是否被使用或仅仅是无意义地存在。必须检查每个页面的每个标记操作,以查看它是否使用透明度,以验证页面组是否无意义,以及Form XObjects也是如此。等等等等。进行检查所需的时间比不使用透明度节省的时间更长。 - KenS

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