Java Pdfbox:在旋转页面中绘制图像

Java Pdfbox:在旋转页面中绘制图像,java,draw,pdfbox,Java,Draw,Pdfbox,我有一个简单的A4 pdf文档,它的属性是/Rotate 90:我的pdf的原始版本是横向的,但打印的是纵向的 我试图在portait文档的左下角绘制一个小图像 以下是我目前的代码: File file = new File("rotated90.pdf"); try (final PDDocument doc = PDDocument.load(file)) { PDPage page = doc.getPage(0); PD

我有一个简单的A4 pdf文档,它的属性是
/Rotate 90
:我的pdf的原始版本是横向的,但打印的是纵向的

我试图在portait文档的左下角绘制一个小图像

以下是我目前的代码:

    File file = new File("rotated90.pdf");
    try (final PDDocument doc = PDDocument.load(file)) {
        PDPage page = doc.getPage(0);
        PDImageXObject image = PDImageXObject.createFromFile("image.jpg", doc);
        PDPageContentStream contents = new PDPageContentStream(doc, page, PDPageContentStream.AppendMode.APPEND, false, true);
        contents.drawImage(image, 0, 0);
        contents.close();
        doc.save(new File("newpdf.pdf"));
}
最终结果如下:正如您所见,图像被放置在左上角(旋转前为0,0坐标),但未旋转

我试着玩
drawImage(PDImageXObject-image,Matrix-Matrix)
但没有成功


这是原始文档

这是旋转90°页面的解决方案:

PDPageContentStream cs = new PDPageContentStream(doc, page, PDPageContentStream.AppendMode.APPEND, true, true);
PDImageXObject image = ....
cs.saveGraphicsState();
cs.transform(Matrix.getRotateInstance(Math.toRadians(90), page.getCropBox().getWidth() + page.getCropBox().getLowerLeftX(), 0));
cs.drawImage(image, 0, 0);
cs.restoreGraphicsState();
cs.close();
如果只是映像,则不需要保存/还原

旋转270°的页面的解决方案:

cs.transform(Matrix.getRotateInstance(Math.toRadians(270), 0, page.getCropBox().getHeight() + page.getCropBox().getLowerLeftY()));
对于180°:

cs.transform(Matrix.getRotateInstance(Math.toRadians(180), page.getCropBox().getWidth() + page.getCropBox().getLowerLeftX(), page.getCropBox().getHeight() + page.getCropBox().getLowerLeftY()));

如果PDF确实有一个裁剪框,其原点位于其未旋转的左下角,则看起来不错。谢谢,希望已修复。谢谢,我希望pdfbox提供一种比向后旋转页面更直接的方法。但最终它起作用了。