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