Java PDFBox-防止批注出现在覆盖的顶部

Java PDFBox-防止批注出现在覆盖的顶部,java,pdfbox,Java,Pdfbox,我正在将一个pdf叠加到另一个pdf上。 我遇到的问题是“背景”pdf注释漂浮在“前景”页面上方 有没有办法展平或防止注释浮动在覆盖上? 下面是一个例子:黑色文本应该覆盖红色注释块 我正在使用的代码: PDDocument baseDocument = PDDocument.load(new File("examples/test/base.pdf"));; PDDocument overlayDocument = PDDocument.load(new File("examp

我正在将一个pdf叠加到另一个pdf上。 我遇到的问题是“背景”pdf注释漂浮在“前景”页面上方

有没有办法展平或防止注释浮动在覆盖上? 下面是一个例子:黑色文本应该覆盖红色注释块

我正在使用的代码:

    PDDocument baseDocument = PDDocument.load(new File("examples/test/base.pdf"));;
    PDDocument overlayDocument = PDDocument.load(new File("examples/test/overlay.pdf"));

    Iterator<PDPage> baseDocumentIterator = baseDocument.getPages().iterator();
    Iterator<PDPage> overlayIterator = overlayDocument.getPages().iterator();

    while(baseDocumentIterator.hasNext() && overlayIterator.hasNext()) {
        PDPage backing = baseDocumentIterator.next();
        List<PDAnnotation> annotations = backing.getAnnotations();
        for (PDAnnotation a :annotations) {
            a.setLocked(true);
            a.setReadOnly(true);
        }
    }

    PDAcroForm acroForm = baseDocument.getDocumentCatalog().getAcroForm();
    if (acroForm != null) {
        acroForm.flatten();
    }
    Overlay overlay = new Overlay();
    overlay.setOverlayPosition(Overlay.Position.FOREGROUND);
    overlay.setInputPDF(baseDocument);
    overlay.setAllPagesOverlayPDF(overlayDocument);

    Map<Integer, String> ovmap = new HashMap<Integer, String>();
    overlay.overlay(ovmap);

    AccessPermission ap = new AccessPermission();
    ap.setCanExtractContent(false);
    ap.setCanFillInForm(false);
    ap.setCanModify(false);
    ap.setReadOnly();
    ap.setCanModifyAnnotations(false);
    StandardProtectionPolicy standardPP = new StandardProtectionPolicy("", "", ap);
    standardPP.setEncryptionKeyLength(128);
    baseDocument.protect(standardPP);
    baseDocument.save("examples/test/output.pdf");
    baseDocument.close();
    overlayDocument.close();
PDDocument baseDocument=PDDocument.load(新文件(“examples/test/base.pdf”);;
PDDocument overlydocument=PDDocument.load(新文件(“examples/test/overlay.pdf”);
迭代器baseDocumentIterator=baseDocument.getPages().Iterator();
迭代器overlayIterator=overlayDocument.getPages().Iterator();
while(baseDocumentIterator.hasNext()&&overlayIterator.hasNext()){
PDPage backing=baseDocumentIterator.next();
列表注释=backing.getAnnotations();
用于(PDA注释:注释){
a、 setLocked(true);
a、 setReadOnly(true);
}
}
PDAcroForm acroForm=baseDocument.getDocumentCatalog().getAcroForm();
如果(acroForm!=null){
acroForm.flatte();
}
覆盖层=新覆盖层();
覆盖。设置覆盖位置(覆盖。位置。前景);
overlay.setInputPDF(基本文档);
overlay.setAllPagesOverlayPDF(overlayDocument);
Map ovmap=newhashmap();
叠加(ovmap);
AccessPermission ap=新的AccessPermission();
ap.setCanExtractContent(假);
ap.SetCanFillNotify(假);
ap.setCanModify(假);
ap.setReadOnly();
ap.setCanModifyAnnotations(假);
StandardProtectionPolicy standardPP=新的StandardProtectionPolicy(“,”,ap);
标准PP.setEncryptionKeyLength(128);
基本文件保护(standardPP);
保存(“examples/test/output.pdf”);
baseDocument.close();
overlydocument.close();
我能做些什么来让评论块出现在覆盖后面吗

“我能做些什么来让注释块出现在覆盖图后面吗?”-在覆盖PDF之前,您确实必须将注释平铺到页面内容中,因为注释始终位于页面内容之上。可能会发展成注释平坦化代码,但目前似乎正在进行中…“我能做些什么来让注释块出现在覆盖层后面吗?”-在覆盖PDF之前,确实必须将注释平坦化到页面内容中,因为注释始终位于页面内容之上。可能会发展成注释扁平化代码,但目前似乎正在进行中。。。