java - 如何使用 PDFBox 将 XFDF 注释导入 PDF

标签 java pdf pdfbox fdf xfdf

我有一个 XFDF 文件包含一些注释,但不包含字段,我想知道是否可以使用 PDFBox 将这些注释导入到 PDF 文件中

我尝试在 Acrobat Reader DC 中将 XFDF 导入 PDF,并成功显示导入的注释。然而,在PDAcroForm中使用importFDF函数来显示注释并不成功。它只导入字段,但不导入注释。

下面是我的示例 XFDF

    <?xml version="1.0" encoding="UTF-8" ?>
<xfdf xmlns="http://ns.adobe.com/xfdf/" xml:space="preserve">
<fields />
<annots>
    <ink page="0" rect="414.755559,308.987191,564.755559,365.356617" color="#000000" flags="print" name="a74a6f8a-4149-d913-6ee6-34ba434bc254" title="annotationTest" subject="Signature" date="D:20190808175939+08'00'" creationdate="D:20190808175827+08'00'">
        <inklist>
            <gesture>415.23,342.9;415.23,342.9;417.62,345.77;422.4,349.11;441.98,357.24;456.79,361.53;470.17,364.88;471.12,364.88;471.6,362.97;468.74,355.8;464.44,346.25;456.79,333.35;440.07,314.72;432.91,310.9;429.56,309.46;429.09,309.46;427.65,312.81;427.65,316.15;429.09,319.02;432.91,322.36;445.81,324.27;454.41,323.8;463,320.45;472.56,317.11;488.32,315.2;499.31,315.68;505.52,318.06;509.82,320.45;514.12,322.36;514.6,322.36;515.55,322.36;517.94,322.36;526.06,322.36;530.36,322.36;535.14,322.36;539.44,322.36;541.83,322.36;542.78,322.36;543.26,322.36;544.69,322.36;546.6,322.84;548.51,322.84;549.47,322.84;550.42,323.8;552.34,325.23;553.29,325.71;554.25,326.66;554.72,327.14;556.63,328.1;559.98,329.05;564.28,330.48</gesture>
        </inklist>
    </ink>
    <circle page="0" rect="464.76803,505.088095,546.727124,576.052676" color="#FF8D00" flags="print" name="96f7f067-0811-a87f-3d94-0b654a720d7d" title="annotationTest" subject="Ellipse" date="D:20190808175825+08'00'" width="6" creationdate="D:20190808175813+08'00'"/>
    <polygon page="0" rect="184.107608,217.431165,445.578111,277.002438" color="#E44234" flags="print" name="8523798b-3d79-d612-40bb-bcdec2789dcd" title="annotationTest" subject="Polygon" date="D:20190808175810+08'00'" style="cloudy" interior-color="#92E8E8" width="9" opacity="0.58" creationdate="D:20190808175742+08'00'" intensity="2">
        <vertices>191.9,269.21;438.78,270.21;433.78,225.23;191.9,224.23;190.9,224.23;191.9,269.21</vertices>
    </polygon>
    <freetext page="0" rect="376.81193,778.184946,500.283994,807.936941" flags="print" name="373b558a-4892-5fb4-a9aa-b4d7175d3966" title="annotationTest" subject="Free text" date="D:20190808175721+08'00'" width="0" creationdate="D:20190808175700+08'00'" TextColor="#00CC63" FontSize="17">
        <contents>Some words...</contents>
        <defaultappearance>0 0 0 rg /Arial 17 Tf</defaultappearance>
        <defaultstyle>font: Arial 17pt; text-align: left; color: #00CC63</defaultstyle>
    </freetext>
    <square page="0" rect="196.901725,719.980841,436.781998,752.964378" color="#E44234" flags="print" name="31250d16-7ee0-c34e-027c-5e11e66cf2b1" title="annotationTest" subject="Rectangle" date="D:20190808175655+08'00'" interior-color="#FFC67B" opacity="0.23" creationdate="D:20190808175653+08'00'"/>
    <link page="0" rect="36.507,555.18,136.6,581.705" color="#000000" flags="print" name="null" title="null" subject="null" date="D:20190808175651+08'00'" width="0" style="solid"/>
</annots>
<pages>
    <defmtx matrix="1.3333333333333333,0,0,-1.3333333333333333,0,1122.559973" />
</pages>
</xfdf>

或者有其他推荐的库吗?非常感谢。

最佳答案

加载xfdf文件后,从FDAnnotation中获取COSObject,然后用它来创建PDAnnotation

PDAnnotation pdfannot = PDAnnotation.createAnnotation(fdfannot.getCOSObject());

然后添加到页面

List<PDAnnotation> pdfannots = new ArrayList<PDAnnotation>;
pdfannots.add(pdfannot);
page.setAnnotations(pdfannots);

保存,您将在PDF上看到注释

关于java - 如何使用 PDFBox 将 XFDF 注释导入 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57424217/

相关文章:

java - Apache PDFbox Java 出现错误无法读取输入文件

java - PDF Box - 无法重命名或删除文件

java - 将 PDF 文件转换为图像

java - AsyncTask 返回值延迟

java - 将Spring Boot jar名称传递给Gradle Groovy脚本

java - 当 pdfjs.disabled 为真且安装了 adobe reader 时,Selenium firefox 配置文件打开 pdf 读取

java - 如何在不调整图像大小的情况下压缩PDF?

java - 为什么我们有 Swing 还需要 JavaFX?

Java XML 节点长度

pdf - 在 PDF 文档中搜索希腊字符