如何将页面原点翻译到PdfBox2的左上角?

时间:2017-06-23 14:35:38

标签: pdfbox

更新:

以下问题实际上与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);

不幸的是页面保持空白。有线索吗?

1 个答案:

答案 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();