我正在尝试在PDF的所有页面的顶部叠加PDF,位于每个页面的左上角。 PDF将具有不同的大小。 PDF叠加层是一个恒定的大小,小于PDF的所有页面。
我似乎只能让PDFBox将叠加层放在PDF的中间。
我不希望将PDF叠加转换为位图(PDImageXObject)并将其插入到页面上。这是我正在玩的一些粗略的代码: -
public static void main(String[] args) throws Exception {
String overlayPath = "C:\\OverlayPdf.pdf";
String overlayOnMePath = "C:\\ToBeOverlayedOn.pdf";
PDDocument overlayOnMe = PDDocument.load(new File(overlayOnMePath)); //Document to write to.
overlayPath = overlayPath + "Anno.pdf";
HashMap<Integer, String> overlayGuide = new HashMap<>();
for (int i = 0; i < overlayOnMe.getNumberOfPages(); i++) {
overlayGuide.put(i + 1, overlayPath);
}
Overlay overlay = new Overlay();
overlay.setInputPDF(overlayOnMe);
overlay.setOverlayPosition(Overlay.Position.FOREGROUND);
overlay.overlay(overlayGuide);
overlayOnMe.save(new File(overlayOnMePath + "_OVERLAYED.pdf"));
overlay.close();
}
我的直觉是它的仿射转变,但我也无法做到这一点。
答案 0 :(得分:2)
我创建了一个新的issue并允许传递转换,这将是2.0.10或更高版本。这将通过扩展覆盖类在calculateAffineTransform
中完成。要将标记放在左上角,新方法将如下所示:
protected AffineTransform calculateAffineTransform(PDPage page, PDRectangle overlayMediaBox)
{
AffineTransform at = new AffineTransform();
PDRectangle pageMediaBox = page.getMediaBox();
at.translate(0, pageMediaBox.getHeight() - overlayMediaBox.getHeight());
return at;
}
要在2.0.10发布之前使用它,请自行构建2.0分支或在此处获取快照: https://repository.apache.org/content/groups/snapshots/org/apache/pdfbox/pdfbox-app/2.0.10-SNAPSHOT/ 该更改是从21.3.2018或更晚的任何版本。