Pdfbox:在旋转页面中绘制图像
Pdfbox : Draw image in rotated page
我有一个简单的 A4 pdf 文档 属性 /Rotate 90
: 我的 pdf 的原始版本是横向的,但打印的是纵向的。
我正在尝试在肖像文档的左下方绘制一个小图像。
到目前为止,这是我的代码:
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();
如果只是图片,则不需要save/restore。
页面旋转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()));
我有一个简单的 A4 pdf 文档 属性 /Rotate 90
: 我的 pdf 的原始版本是横向的,但打印的是纵向的。
我正在尝试在肖像文档的左下方绘制一个小图像。
到目前为止,这是我的代码:
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();
如果只是图片,则不需要save/restore。
页面旋转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()));