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

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

4

3 回答 3

1

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)
于 2013-09-13T09:53:22.727 回答
0

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

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

使用此顺序使我的高光输出具有与 Adob​​e Acrobat 中的高光注释工具相同的凸面效果。

于 2014-04-04T20:55:45.040 回答
0

我对 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() };
于 2014-10-22T14:07:34.960 回答