如何在 PDF 中设置填充 alpha

Posted

技术标签:

【中文标题】如何在 PDF 中设置填充 alpha【英文标题】:How to set fill alpha in PDF 【发布时间】:2015-04-13 14:36:57 【问题描述】:

这是一个红框:

162 86 m 162 286 l 362 286 l 362 86 l h
1 0 0 rg f

如何为其添加部分透明度?

我已阅读 PDF 规范的透明度部分,但我似乎只能找到模型和公式,而不是如何实际将 alpha 添加到填充。

【问题讨论】:

【参考方案1】:

正如 OP 所指出的,PDF specification 中有一个关于透明度主题的完整部分。这是由于有多种应用透明度的方法。以下部分解释了最适合 OP 上下文的方式:

11.6.4.4 恒定形状和不透明度

图形状态(参见“图形状态”)中的当前 alpha 常数参数应该是两个标量值——一个用于笔划,一个用于所有其他绘画操作——用于恒定形状(f_k) 或 颜色合成公式中的恒定不透明度 (q_k) 组件。

注意 1 此参数类似于绘制基本对象时使用的当前颜色。

在将透明度组的结果绘制到其背景上时,也应应用非描边 alpha 常量。

描边和非描边 alpha 常数应分别由图形状态参数字典中的 CAca 条目设置(参见“图形状态参数字典”) .如前所述,对于软遮罩,图形状态中的 alpha 源标志应确定 alpha 常量是解释为形状值 (true) 还是不透明度值 (false) .

因此,首先要在页面资源中定义一个合适的图形状态参数字典,例如:

/Resources<</ExtGState<<
  /GS1 <</ca 0.5>>
>>>>

现在您可以在内容流中使用这些命名的图形状态参数:

/GS1 gs
1 0 0 rg
162 86 m
162 286 l
362 286 l
362 86 l
h
f 

如果绘制在绿色格子上,结果如下所示:


顺便说一句,OP的原始内容流片段有错误

162 86 m 162 286 l 362 286 l 362 86 l h
1 0 0 rg f

这里的颜色设置操作介于路径定义(162 ... l h)和路径填充操作(f)之间。这是无效的,比较规范中的图 9 – 图形对象,在路径构造(和可选的剪切路径运算符)之后,路径绘制操作必须立即进行。 (许多PDF查看器确实接受了无效的操作命令,但它仍然是无效的)。


即将进行的操作的 alpha 值不必是恒定的。相反,它可以例如由带有径向阴影的遮罩控制。

确实,如果您像这样定义图形状态参数:

/Resources<</ExtGState<<
  /GS1 << /SMask<</Type/Mask/S/Luminosity/G 1 0 R >> >>
>> >>

对象 1 0 就是这个 XObject:

1 0 obj
<<
  /Group<</CS/DeviceGray/S/Transparency>>
  /Type/XObject
  /Resources<</Shading<<
    /Sh1<<
      /Coords[262 186 10 262 186 190]
      /ColorSpace/DeviceRGB
      /ShadingType 3
      /Extend[true true]
      /Function <</Domain[0 1]/FunctionType 2/N 1/C1[0 0 0]/C0[1 1 1]>> 
    >> 
  >>>>
  /Subtype/Form
  /BBox[0 0 500 400]
  /Matrix [1 0 0 1 0 0]
  /Length 10
  /FormType 1
>>stream
  /Sh1 sh
endstream 

你得到了上面绘制在绿色格子上的内容流片段:

【讨论】:

@Jindra 确实,看起来像是复制粘贴遗漏。

以上是关于如何在 PDF 中设置填充 alpha的主要内容,如果未能解决你的问题,请参考以下文章

如何在videoview中设置播放按钮图像png?

如何在 PHP FPDI 库中设置编码

PHP - 如何在 PDF 文件中设置字段的值,然后保存?

如何在Android的BottomNavigationView中设置填充项

如何在 iframe 中设置 base64 pdf 的文件名?

如何在python的reportlab Canvas中设置任何字体?