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() };