首页 > 解决方案 > PDFBox - 正在旋转的覆盖内容

问题描述

我有一个 pdf(支持 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();
        PDPage foreground = overlayIterator.next();
        if(backing.getRotation()!= foreground.getRotation())
        {
            foreground.setRotation(-backing.getRotation()); //doesn't seem to do antyhing
        }
    }

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

样本 pdf

有没有办法用pdfbox处理这种情况?谢谢

标签: javapdfbox

解决方案


您可能正在使用 2.0.17 之前的 pdfbox 版本,因为在此版本中,导致所述行为的错误已修复

[PDFBOX-4596] - Overlays with /Rotate value appear rotated in result file

使用 2.0.17 及更高版本,您的代码会生成:

在此处输入图像描述


推荐阅读