如何旋转pdf页面并设置原点
how to rotate pdf page and set origin
我正在尝试旋转文档中的每个横向页面,因此所有页面都是纵向的。我正在为此使用 apache pdfbox。
PDPage page = document.getPage(pageIndex);
PDRectangle mediaBox = page.getMediaBox();
if(mediaBox.getWidth() > mediaBox.getHeight()) {
page.setRotation(270);
}
这很好用,页面已旋转。现在,问题是,在我将文档发送到打印机后,它会在上面做一些标记(见图 1)。
在旋转的页面上,但标记出现在错误的位置。就像它会出现在横向页面上(见图 2)。
我觉得跟出身有关系。你知道如何设置原点,以便打印机标记出现在正确的位置吗?
谢谢你和最诚挚的问候
达利博尔
请试试这个:
PDPageContentStream cs = new PDPageContentStream(doc, page, PDPageContentStream.AppendMode.APPEND, true, true); int rotation = page.getRotation();
switch (rotation)
{
case 90:
width = page.getMediaBox().getHeight();
height = page.getMediaBox().getWidth();
cs.transform(Matrix.getRotateInstance(Math.toRadians(90), height, 0));
break;
case 180:
cs.transform(Matrix.getRotateInstance(Math.toRadians(180), width, height));
break;
case 270:
width = page.getMediaBox().getHeight();
height = page.getMediaBox().getWidth();
cs.transform(Matrix.getRotateInstance(Math.toRadians(270), 0, width));
break;
default:
break;
}
然后继续你的事情。不要忘记关闭内容流。上面的代码取自源代码下载的AddWatermarkText.java
例子
我正在尝试旋转文档中的每个横向页面,因此所有页面都是纵向的。我正在为此使用 apache pdfbox。
PDPage page = document.getPage(pageIndex);
PDRectangle mediaBox = page.getMediaBox();
if(mediaBox.getWidth() > mediaBox.getHeight()) {
page.setRotation(270);
}
这很好用,页面已旋转。现在,问题是,在我将文档发送到打印机后,它会在上面做一些标记(见图 1)。
在旋转的页面上,但标记出现在错误的位置。就像它会出现在横向页面上(见图 2)。
我觉得跟出身有关系。你知道如何设置原点,以便打印机标记出现在正确的位置吗?
谢谢你和最诚挚的问候 达利博尔
请试试这个:
PDPageContentStream cs = new PDPageContentStream(doc, page, PDPageContentStream.AppendMode.APPEND, true, true); int rotation = page.getRotation();
switch (rotation)
{
case 90:
width = page.getMediaBox().getHeight();
height = page.getMediaBox().getWidth();
cs.transform(Matrix.getRotateInstance(Math.toRadians(90), height, 0));
break;
case 180:
cs.transform(Matrix.getRotateInstance(Math.toRadians(180), width, height));
break;
case 270:
width = page.getMediaBox().getHeight();
height = page.getMediaBox().getWidth();
cs.transform(Matrix.getRotateInstance(Math.toRadians(270), 0, width));
break;
default:
break;
}
然后继续你的事情。不要忘记关闭内容流。上面的代码取自源代码下载的AddWatermarkText.java
例子