如何在 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 常数应分别由图形状态参数字典中的 CA 和 ca 条目设置(参见“图形状态参数字典”) .如前所述,对于软遮罩,图形状态中的 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的主要内容,如果未能解决你的问题,请参考以下文章
如何在Android的BottomNavigationView中设置填充项