QuadBounds使用itext或pdfbox订购PdfAnnotation标记

时间:2013-09-13 08:41:48

标签: java itext pdfbox

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

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

3 个答案:

答案 0 :(得分:1)

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

  

每个四边形的坐标按顺序

给出      

x1 y1 x2 y2 x3 y3 x4 y4

     

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

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

因此:

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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

我遇到了与iText 2.1.7相同的问题,这让我发疯了。所描述的jrubins命令对我不起作用,它产生了凹形注释。最终我找到了正确的订单,这是lr> ll>你的> 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() };