在不同PDF查看器(带阴影)中具有不同输出的PDF



考虑以下PostScript文件

[1 0 0.5 0.866 150 550] concat
<< 
/ShadingType 2 
/Coords [ 0 0 100 100] 
/BBox [ 0 0 100 100] 
/ColorSpace [ /DeviceRGB ] 
/Function 
<< 
/FunctionType 0 
/Domain [0 1] 
/Range [0 1 0 1 0 1] 
/BitsPerSample 8 
/Size [2] 
/DataSource <FFA0A0FFE0E0> 
>>
/Extend [false false] 
>> 
shfill

考虑我们使用GhostScript (ps2pdf)或Adobe Distiller将该文件转换为PDF。

生成的PDF在不同的PDF查看器中呈现的方式不同:

  • 在Adobe Reader或Firefox(使用PDF.js)中,我们有一个平行四边形(而不是矩形)。
  • 在SumatraPDF(使用MuPDF)和Chrome(使用PDFium)中,我们有一个矩形。

谁是对的?

在我看来Adobe Acrobat是正确的,但是规范也可以有不同的解读。

您的PDF包含以下内容流:

/GS1 gs
q
1 0 .5 .866 150 550 cm
/Sh1 sh
Q

。首先改变当前变换矩阵,将其剪切和压扁一点,然后将底纹Sh1是画的。这个阴影又被定义为

<</BBox[0 0 100 100]/ColorSpace/DeviceRGB/Coords[0 0 100 100]/Function 15 0 R/ShadingType 2>>

。使用100×100方形边界框(解释为临时附加剪切路径)和沿其(0,0)到(100,100)对角线的轴向阴影,与您的postscript定义相匹配。

将着色运算符sh指定为

tbody> <<tr>
操作数操作符描述
名称sh(PDF 1.3)根据当前剪切路径绘制由阴影字典描述的形状和颜色阴影。图形状态中的当前颜色既不使用也不改变。这种效果不同于使用阴影图案作为当前颜色来绘制路径。name是当前资源字典的着色子字典中的着色字典资源的名称(参见7.8.3,"资源字典")。阴影字典中的所有坐标都是相对于当前用户空间进行解释的。(相比之下,当在Type 2模式中使用着色字典时,坐标在模式空间中表示。)所有颜色都在着色字典ColorSpace中确定的颜色空间中解释。条目(见"表77 -所有着色词典的共同条目")。条目如果存在,将被忽略。
此运算符应仅应用于有界或几何定义的阴影。如果应用于无界阴影,它会在整个裁剪区域绘制阴影的渐变填充,这可能会很耗时。

最新更新