如何在PDF中设置填充alpha

时间:2015-02-12 18:02:32

标签: pdf alpha fill

这是一个红色框:

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

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

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

1 个答案:

答案 0 :(得分:3)

正如OP指出的那样,{em>透明度主题的PDF specification中有一整节。这是由于应用透明度的多种方式。 OP的上下文最合适的方式将在下一节中解释:

  

11.6.4.4恒定形状和不透明度

     

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

     

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

     

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

     

stroking和nonstroking 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 

如果画在绿色格子上,结果如下:

transparent red rectangle on green lattice


顺便说一句,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<<
  /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 

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

variably transparent red rectangle on green lattice