代码之家  ›  专栏  ›  技术社区  ›  Rob Curtis

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

  •  0
  • Rob Curtis  · 技术社区  · 4 年前

    我遇到的问题是“背景”pdf注解漂浮在“前景”页面上方。

    有没有办法压平或防止批注漂浮在覆盖层上方? 下面是一个示例:黑色文本应该覆盖在红色注释块上。

    text should be overlaying the square

    我使用的代码:

        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();
    

    我能做些什么让评论块出现在覆盖图后面吗?

    Example pdfs

    0 回复  |  直到 4 年前