QuadBounds使用itext或pdfbox订购PdfAnnotation标记

0 1 2 3 * (x1,y1) *************** (x2,y2) * * * * * * * 4 5 * * 6 7 * (x3,y3) *************** (x4,y4) 

对于PdfAnnotation或PDFAnnotation的float数组,这是正确的顺序吗? 我尝试创建一个pdf注释,但注释是凹的而不是像通常使用adobe reader或acrobat创建的那样。

我发现使用iText的内容如下:

 * 4 5 6 7 * (x3, y3) ***************** (x4, y4) * * * * * * * * * * 0 1 * * 2 3 * (x1, y1) ***************** (x2, y2) 

使用此顺序使我的高光输出具有与Adobe Acrobat中的高光标注工具相同的凸效果。

Pdf规范在四边形坐标上说明:

每个四边形的坐标按顺序给出

x1 y1 x2 y2 x3 y3 x4 y4

逆时针顺序指定四边形的四个顶点。 出于定向目的,例如在应用下划线边框样式时,四边形的底部是由(x1,y1)和(x2,y2)形成的线。

( ISO 32000-1中第12.5.6节的多个小节)

从而:

 * 6 7 4 5 * (x4,y4) *************** (x3,y3) * * * * * * * 0 1 * * 2 3 * (x1,y1) *************** (x2,y2) 

iText 2.1.7也遇到了同样的问题,这让我发疯了。 所描述的jrubins命令对我不起作用,它产生了凹形注释。 最终我找到了正确的顺序,即lr> ll> ur> ul。

  /* * PDF Specification Order - results in broken annotation * * 7,8 5, 6 * (x,y)___________(x,y) * | | * | | * |___________| * (x,y) (x,y) * 1, 2 3, 4 */ /* * Concave order - results in working, but concave annotation; don't know why * * 5, 6 7, 8 * (x,y)___________(x,y) * | | * | | * |___________| * (x,y) (x,y) * 1, 2 3, 4 */ /* * Convex order - this is the one working like expected: * * 7,8 5, 6 * (x,y)___________(x,y) * | | * | | * |___________| * (x,y) (x,y) * 3, 4 1, 2 */ float[] quad = { rect.getRight(), rect.getBottom(), rect.getLeft(),rect.getBottom(), rect.getRight(), rect.getTop(), rect.getLeft(), rect.getTop() };