如何解决 Inkscape 的 pdf 输出中的透明度问题?

平面设计 墨景 pdf 透明度 乳胶
2022-02-23 20:01:28

我正在创建一些用于科学文章的直方图,最终的数字应该是几张图,每张图都有两组数据,显示它们的相似程度。在我的示例中,我使用 Julia 生成两组数据,并使用 Gadfly 将叠加层绘制到 SVG 文件中。这是通过在条形图中使用一些透明度对直方图进行分层来实现的。我在 Inkscape 中打开了 SVG 文件并添加了文本描述,然后将其保存为 pdf 以在我的 tex 文件中使用。但是,pdf 不显示透明度,只是将一层放在另一层之上,两者之间没有交互。奇怪的是,Evince 中的缩略图预览面板确实可以正确显示图片,这让我认为这只是 Evince 的一个缺陷。我尝试在 Okular 中查看 pdf,但是缩略图预览和 pdf 本身都没有显示透明度。我对问题实际上出在哪里感到有些困惑。

我将有问题的 SVG和 PDF 输出放在此处Evince 中的缩略图看起来像,这就是我要拍摄的内容(蚂蚁除外)。图像

我真的很感激任何关于此事的建议。感谢您的阅读!

2个回答

不幸的是,Inkscape 提供的 PDF 格式不支持透明度。为了仍然能够使用具有透明对象的 Inkscape 绘图创建 PDF,我们必须首先将它们转换为位图。

对于单个对象或组,可以使用Filter > Transparency utility > Light Eraser来完成。

我们必须知道这个过滤器不会像预期的那样保留颜色。为了获得如下所示的这种转换的结果,我必须向列对象的填充和描边属性添加另外 90% 的不透明度。

在此处输入图像描述 在 Evince 中使用 Light Eraser 部分转换为位图的 PDF

当使用另一个应用程序转换为 PDF 时,我们会得到更好的结果。能够这样做的开源应用程序是Open/Libre Office,它允许 PDF 导出的透明度(对象不转换为位图):

在此处输入图像描述 SVG 导入 Libre Office,导出为 PDF,如 Evince 所示

正如所建议的(见第二个答案,而不是第一个)

http://www.inkscapeforum.com/viewtopic.php?t=15739

设置 alpha 通道值而不是不透明度有效。

不幸的是,我在完成一个包含数百种形状的复杂设计后阅读了该解决方案。因此,手动将不透明度设置回 100%,然后将 Alpha 通道值设置为低于 255 的值是不可行的。幸运的是,*NIX 系统的“sed”实用程序救了我(注意 SVG 只不过是一个文本文件)。这是我使用的命令

sed 's/opacity:0\.\([0-9]*\)\(;fill[^ ]*fill-opacity:\)1/opacity:1\20\.\1/' input_with_opacity.svg > output_with_alpha.svg

它在文件中所有对象的不透明度和 Alpha 通道(命名为填充不透明度)值之间切换。例如,如果你有一条线

style="opacity:0.2;fill:#2bd9cf;fill-opacity:1;stroke:none;display:inline"

在原始文件中,它将变为

style="opacity:1;fill:#2bd9cf;fill-opacity:0.2;stroke:none;display:inline"

在新文件中。好吧,它可能需要对您的文件进行一些调整,但这样做应该不会太难。一个警告是,您可能需要在运行之前取消对所有对象的分组,因为分组对象的“样式”格式可能不同。