如何使用iText为XFDF获取ID“原始”和“修改”?

时间:2013-01-15 11:32:39

标签: pdf itext xfdf

XFDF文件中的最后一个标记如下所示:

<ids original="20639838865717E80D2556CB7B2AEC2D" 
     modified="754C78B10C9159419708446C3395CDBE"/>

我可以使用以下方法从Acrobat导出PDF表单数据来获取这些值:http://wiki.developerforce.com/page/Adobe_XFDF_Ids_Determination

但是我想以编程方式获取ID,以便为任意PDF表单构建正确的xfdf文档。

如何使用iText获取这些值?

1 个答案:

答案 0 :(得分:1)

如本文所述(removing PDFID in PDF)/ ID是“预告片词典”中的推荐条目(如果AcroForm已加密,则需要)。

使用iText,ID将作为预告片PdfArray中两个PdfString对象的PdfDictionary进行访问。 String值看起来像垃圾,因为每个都是字节数组的表示。这些是“原始”和“修改”所需的十六进制值。

以下代码将打印出两个ID,可以通过以下方式对其进行验证:从Acrobat Pro导出(NB Hex.encodeHexString是Apache commons-codec):

public void printIds(PdfReader reader) {
    PdfDictionary trailer = reader.getTrailer();
    if (trailer.contains(PdfName.ID)) {
        PdfArray ids = (PdfArray) trailer.get(PdfName.ID);
        PdfString original = ids.getAsString(0);
        PdfString modified = ids.getAsString(1);
        System.out.println(Hex.encodeHexString(original.getBytes()));
        System.out.println(Hex.encodeHexString(modified.getBytes()));
    }
}