以下问题实际上与this question on SO非常相似,answered完全mkl。简答:要么生活在左下角,要么将坐标转换为这些。 有一种解决方法,但这是一团糟。
我想在左上角创建一个坐标为0,0且右下角为210,297的PDF。计算方法如y = 297-y似乎有点乱。
此问题类似于this question on SO,但是指的是PdfBox 2,其中提供的解决方案不起作用。
docs说我应该使用矩阵来转换坐标系。我试过这种方法:
PDRectangle currentPageRectangle = new PDRectangle(210 * POINTS_PER_MM, 297 * POINTS_PER_MM);
PDPage currentPage = new PDPage(currentPageRectangle);
currentDocument.addPage(currentPage);
contentStream = new PDPageContentStream(currentDocument, currentPage);
AffineTransform a = new AffineTransform(1, 0, 0, -1, 210 * POINTS_PER_MM, 297 * POINTS_PER_MM);
Matrix m = new Matrix(a);
contentStream.transform(m);
不幸的是页面保持空白。有线索吗?
答案 0 :(得分:1)
您的Affinetransform不正确,请参阅Javadoc。最后两个参数是翻译值,现在您将页面翻译在物理页面之外,因为您错误地翻译了x坐标。
此代码效果更好(我使用高度作为页面高度的占位符):
contentStream = new PDPageContentStream(document, page);
contentStream.transform(new Matrix(new java.awt.geom.AffineTransform(1, 0, 0, -1, 0,height)));
另请考虑获取实际页面高度而不是使用硬编码值,这样您的代码就可以在任何页面维度上运行:
float height=page.getMediaBox().getHeight();