如何使用pdfbox库的PDPageContentStream类创建自定义pdf批注?

如何使用pdfbox库的PDPageContentStream类创建自定义pdf批注?,pdf,annotations,pdfbox,Pdf,Annotations,Pdfbox,我已经实现了使用PDPageContentStream类的addBezier曲线方法创建云标记的功能。现在,我想创建这个标记作为页面注释,这样我就可以删除这些标记了。我尝试使用PDAnnotation.createAnnotation方法创建自定义注释,但它需要COSBase变量。那么,如何使用PDPageContentStream类创建一个COSBase变量来指定注释的形状。您可以单独在注释行中执行操作 PDAnnotation annot = new PDAnnotationMark

我已经实现了使用PDPageContentStream类的addBezier曲线方法创建云标记的功能。现在,我想创建这个标记作为页面注释,这样我就可以删除这些标记了。我尝试使用PDAnnotation.createAnnotation方法创建自定义注释,但它需要COSBase变量。那么,如何使用PDPageContentStream类创建一个COSBase变量来指定注释的形状。

您可以单独在注释行中执行操作

    PDAnnotation annot = new PDAnnotationMarkup();
    PDAppearanceDictionary appearance = new PDAppearanceDictionary();
    PDAppearanceStream appearanceStream = new PDAppearanceStream(new COSStream());
    appearance.setNormalAppearance(appearanceStream);
    annot.setAppearance(appearance);

    PDPageContentStream contentStream = new PDPageContentStream(pdfDocument, appearanceStream);
    contentStream.addBezier(....);
    ..... more additions to the content stream

我留下了将注释添加到的页面等的代码,因为这可以从示例包中的
AddAnnotations.java
示例中查看。

您可以在

    PDAnnotation annot = new PDAnnotationMarkup();
    PDAppearanceDictionary appearance = new PDAppearanceDictionary();
    PDAppearanceStream appearanceStream = new PDAppearanceStream(new COSStream());
    appearance.setNormalAppearance(appearanceStream);
    annot.setAppearance(appearance);

    PDPageContentStream contentStream = new PDPageContentStream(pdfDocument, appearanceStream);
    contentStream.addBezier(....);
    ..... more additions to the content stream

我留下了将注释添加到页面等的代码,因为这可以从示例包中的
AddAnnotations.java
示例查看。

请将此命令添加到上述代码:appearanceStream.setResources(new PDResources()),否则PDPageContentStream的setFont函数将给出异常。此外,我无法将此标记添加到图层。我可以将普通标记(如PDAnnotationLink)添加到任何层。但相同的代码不适用于自定义批注。另一件事是,正在将批注创建为未知类型PDFAnnotation。当我在AdobeReader或bluebeam中打开它时,它不会显示。它仅在第三方pdf查看器库中可见。adobe reader似乎不支持未知注释类型。那么,如何解决这个问题呢?请将这个命令添加到上面的代码中:appearanceStream.setResources(new PDResources()),否则PDPageContentStream的setFont函数将给出异常。此外,我无法将此标记添加到图层。我可以将普通标记(如PDAnnotationLink)添加到任何层。但相同的代码不适用于自定义批注。另一件事是,正在将批注创建为未知类型PDFAnnotation。当我在AdobeReader或bluebeam中打开它时,它不会显示。它仅在第三方pdf查看器库中可见。adobe reader似乎不支持未知注释类型。那么,我该如何解决这个问题呢。