如何在PDF中设置填充Alpha

Pau*_*per 3 pdf alpha fill

这是一个红色框:

162 86 m 162 286 l 362 286 l 362 86 l h
1 0 0 rg f
Run Code Online (Sandbox Code Playgroud)

如何添加部分透明度?

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

mkl*_*mkl 5

正如OP所指出的那样,PDF规范中有一整节涉及透明度。这是由于采用了多种透明方法。下节将说明最适合OP上下文的方法:

11.6.4.4恒定的形状和不透明度

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

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

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

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

因此,您首先必须在页面资源中定义适当的图形状态参数字典,例如:

/Resources<</ExtGState<<
  /GS1 <</ca 0.5>>
>>>>
Run Code Online (Sandbox Code Playgroud)

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

/GS1 gs
1 0 0 rg
162 86 m
162 286 l
362 286 l
362 86 l
h
f 
Run Code Online (Sandbox Code Playgroud)

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

绿色格子透明红色矩形


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

162 86 m 162 286 l 362 286 l 362 86 l h
1 0 0 rg f
Run Code Online (Sandbox Code Playgroud)

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


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

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

/Resources<</ExtGState<<
  /SMask<</Type/Mask/S/Luminosity/G 1 0 R
>>>>
Run Code Online (Sandbox Code Playgroud)

而对象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 
Run Code Online (Sandbox Code Playgroud)

您将获得上面绘制在绿色格子上的内容流片段:

绿色格子上的透明红色矩形