为什么此墨迹注释显示曲线而不是直线?

时间:2012-07-31 17:05:29

标签: pdf pdf-generation

enter image description here

我以字母Z的形式创建了一个墨迹注释,如上所示,但是,Z的角是圆角的。为什么会这样?如何避免这种额外的美化,使角落保持锋利,并通过直线连接点?

PDF代码:

%PDF-1.6
%μῦ

1 0 obj
<</Type/Catalog/Pages 2 0 R>>
endobj

2 0 obj
<</Type/Pages/Kids[3 0 R]/Count 1>>
endobj

3 0 obj
<</Type/Page/Parent 2 0 R/Resources<<>>/MediaBox[0 0 500 800]/Annots[4 0 R]>>
endobj

4 0 obj
<</Type/Annot/Subtype/Ink/Contents(<enter description here>)/InkList[[150 300 250 300 150 200 250 200]]/Rect[200 250 300 150]/P 3 0 R/F 4/C[1 0 0]>>
endobj

xref
0 5
0000000000 65536 f 
0000000017 00000 n 
0000000063 00000 n 
0000000115 00000 n 
0000000209 00000 n 

trailer
<</Size 5/Root 1 0 R>>

startxref
374
%%EOF

2 个答案:

答案 0 :(得分:5)

我不确定这里发生了什么,现在没时间调查了。

但是这里有一些立即观察作为额外的数据点:

  • Mac OS X的Preview.app显示带有清晰边缘的Z形。
  • Adob​​e Reader X和Adobe Acrobat X Pro(在Mac OS X上)显示带有圆形边缘的Z形。
  • Ghostscript v9.05显示带有圆形边缘的Z形。
  • Ghostscript,从今天的Git存储库自编译,显示带有圆形边缘的Z形。

<强>更新

好的,我快速浏览了PDF-1.7的官方ISO规范。它说明了/Subtype /Ink注释'/InkList

  

n个数组的数组,每个数组表示一个描边路径。每个数组应该是默认用户空间中的一系列交替的水平和垂直坐标,指定沿路径的点。绘制时,点应通过 依赖于实现的方式 中的直线或曲线连接。

(来自章节 12.5.6.13 Ink Annotations ,我的重点)

因此,一个实现显示直线是完全“合法的”,另一个显示曲线。 : - (

唉...

更新2:

因此,如果要强制Z形状显示为所有实现的直线,则需要绘制3条不同的直线,每条直线由不同的数组表示,并将这3个数组放入容器数组中...

更改代码的这一部分:

/InkList
[
  [150 300 250 300 150 200 250 200]
]

到此:

/InkList
[
  [150 300 250 300]
  [250 300 150 200]
  [150 200 250 200]
]

你的Z形将显示尖角。

答案 1 :(得分:2)

解决方案是创建注释外观(注释字典中的/ AP条目)。如果绘制直线的注释外观存在于PDF文件中,则在显示文件时将使用它,您将在任何查看器中获得相同的结果。如果外观不存在,则查看器将根据注释定义构造外观,在您的情况下,此查看器内置外观取决于实现。