2014-12-11 62 views
2

我想解析XFDF中的注释数据并使用iText库进行绘制。我想绘制附加图像的注释。iText - PdfAnnotation.createInk

以下是我的代码来测试PdfAnnotation.createInk函数,但运行代码后它不工作。

我有谷歌阅读文件,但没有提供太多的信息。任何建议和建议?谢谢!

// step 1 
    Document document = new Document(PageSize.A4); 
    // step 2 
    PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(destFile)); 
    // step 3 
    document.open(); 

    PdfContentByte pcb = new PdfContentByte(writer); 
    pcb.setColorStroke(BaseColor.RED); 
    Rectangle rect = new Rectangle(52.92f, 397.56f, 173.36f, 530.67f); 
    float[][] inkList = {{61.736111f,530.669250f},{61.295139f,525.820984f},{61.295139f,518.768860f}, 
      {61.295139f,505.986969f},{61.295139f,490.560547f},{61.295139f,470.726562f},{59.972221f,452.214844f}, 
      {57.767361f,434.143890f},{56.003471f,418.276703f},{53.357639f,404.172516f},{51.593750f,391.390625f}, 
      {50.711807f,382.134766f},{49.829861f,376.845703f} 
    }; 

    //float inkList[][] = 
    PdfAnnotation an = PdfAnnotation.createInk(writer, rect, "", inkList); 
    an.setPage(1); 
    an.setColor(BaseColor.RED); 
    an.setFlags(PdfAnnotation.FLAGS_PRINT); 

    writer.addAnnotation(an); 
    //Step 5 
    document.close(); 

enter image description here

+0

*但它不工作* - 发生了什么? – mkl 2014-12-11 11:15:05

+0

输出pdf没有任何注释 – PrimaryChicken 2014-12-11 12:53:41

+0

本周我不再在办公室了。如果你的问题在下周一开始没有答案,那么我会研究它。 – mkl 2014-12-12 08:16:09

回答

4

输出PDF似乎是因为所定义的注释是孤立点的一个单纯的集合不包含注释。

PdfAnnotation.createInkfloat[][]参数对应于墨水注释词典的InkList条目:

InkList阵列(必需)Ñ数组的数组,每个代表一个描边路径。每个 数组应该是 默认用户空间中的一系列交替的水平和垂直坐标,指定沿着路径的点。绘制时, 点应通过直线或曲线以 实现相关的方式连接。

因此,在OPS阵列

float[][] inkList = {{61.736111f,530.669250f},{61.295139f,525.820984f},{61.295139f,518.768860f}, 
     {61.295139f,505.986969f},{61.295139f,490.560547f},{61.295139f,470.726562f},{59.972221f,452.214844f}, 
     {57.767361f,434.143890f},{56.003471f,418.276703f},{53.357639f,404.172516f},{51.593750f,391.390625f}, 
     {50.711807f,382.134766f},{49.829861f,376.845703f} 
}; 

的情况下,我们具有13个通路的每一个仅包含单个点的集合。所以,没有画。

如果我们在单一路径将所有的点,不过,

float[][] inkList = {{61.736111f,530.669250f,61.295139f,525.820984f,61.295139f,518.768860f, 
      61.295139f,505.986969f,61.295139f,490.560547f,61.295139f,470.726562f,59.972221f,452.214844f, 
      57.767361f,434.143890f,56.003471f,418.276703f,53.357639f,404.172516f,51.593750f,391.390625f, 
      50.711807f,382.134766f,49.829861f,376.845703f} 
    }; 

的结果是这样的:

Screenshot

它看起来像“H”的左线问题中的屏幕截图。

+0

非常感谢。 – PrimaryChicken 2014-12-16 01:43:12

+0

另外,你知道如何设置注释的线宽吗?谢谢。 – PrimaryChicken 2014-12-16 02:38:21

+0

参考[我的答案](http://stackoverflow.com/a/27501490/1729265)到[后续问题](http://stackoverflow.com/q/27497333/1729265)。 – mkl 2014-12-16 09:45:59