includegraphics:如何检查 PDF/PNG 是否透明?

includegraphics:如何检查 PDF/PNG 是否透明?

我正在尝试生成符合 PDF/A-1 标准的文档,但不允许透明度。我想检查所包含的 PDF 和 PNG 图像是否具有透明度。

有没有 TeX 方法来检查这一点?否则,更改命令\includegraphics以调用外部工具来检查这一点的正确方法是什么?


编辑:用于检查透明度的外部工具:

为了PNG 格式ImageMagik很好identify 地完成了工作。[s]rgba当有 alpha 通道时它会显示(否则为rgb):

# identify -format '%[channels]' Transparent.png 
srgba

甚至更好:

# identify -format %A Transparent.png 
True

为了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

我将使用 ghostscript 在生成 pdf 后删除透明度,使用

gs -o converted.pdf -sDEVICE=pdfwrite -dHaveTransparency=false input_file.pdf

答案2

如果您在命令行中从 tex 文档生成 pdf 文档,那么前面的任何建议都是可行的。为了减少在命令行中输入的内容,您可以编写一个 makefile 来处理透明度检查,然后生成 pdf。

如果你真的想在 tex 文档中完成所有操作,你可以尝试腼腆\write18按照建议的包或命令这里

答案3

没有“内置”方法来检查图像是否透明。因此,您需要在 TeX 运行期间(使用 shell escape)或在运行之前对图像进行预处理。在 TeX 运行期间执行操作会更加尴尬,因为每次执行梯级时都必须执行此操作,并且需要降低安全设置。无论如何,用于消除透明度的适当工具对我们来说是题外话。

相关内容