【问题标题】:Coordinates in a pdf page when using pdfbox使用 pdfbox 时 pdf 页面中的坐标
【发布时间】:2020-01-10 10:07:15
【问题描述】:

我在 pdf 文件中添加隐藏文本以使其可搜索。对于某些文档,左下角似乎是默认值 (0,0),而对于其他文档,它是左上角。我的理解是,可以因为页面旋转。

在下面的代码中,我正在获取/打印页面旋转,但对于我拥有的不同测试 pdf 文件,它显示为 0。为什么有些文档会将 (0,0) 翻译到左下角而其他文档会翻译到左上角的任何想法。

        File file = new File(inputDocumentName);
        PDDocument document = PDDocument.load(file);

        //Retrieving the pages of the document
        PDPage page = document.getPage(0);

        int rotation = page.getRotation();
        System.out.println("Rotation: " + rotation);

        contentStream.moveTo(0, 0);

        //Begin the Content stream
        contentStream.beginText();

        //Setting the font to the Content stream
        contentStream.setFont(PDType1Font.COURIER, 20);

        contentStream.newLineAtOffset(0, 0);

        //Adding text in the form of string
        contentStream.showText(text);

        //Ending the content stream
        contentStream.endText();

        //Closing the content stream
        contentStream.close();

        //Saving the document
        document.save(new File(outputDocumentName));

        //Closing the document
        document.close();

关于如何在 pdf 文档中找到代表哪个角 (0,0) 的任何想法。谢谢。

【问题讨论】:

  • 您是否检查过裁剪框和媒体框(如果页面)?

标签: java pdf pdfbox


【解决方案1】:

每个页面都从一个坐标系开始,x 坐标向右增加,y 坐标向上增加。坐标可以任意大,仅受常见数值数据结构范围和分辨率的限制。

在这个大平面上定义了某些框,请参阅this answer 中的 PDF 规范引用。这里特别感兴趣的是裁剪框,它定义了在显示或打印时页面内容应被裁剪(裁剪)到的区域,即它定义了可见页面区域。它默认为强制的媒体框。

这个可见区域,用于显示,按页面 Rotate 值旋转。

关于你的问题

关于如何在 pdf 文档中找到代表哪个角 (0,0) 的任何想法。

因此,您应该首先意识到用户空间坐标系的原点 (0,0)根本不需要是角,它实际上可能在可视区域内部或外部的任何位置.仅仅为了简单起见,通常裁剪框或媒体框的一角是原点。此外,每个页面可能有自己的原点位置,无需在文档页面之间保持相同。

帮助您确定给定页面的可见区域相对于坐标系的位置和方式的方法:

  • PDPage.getCropBox 返回裁剪框角的坐标。它确实考虑了继承和默认设置,并且还尝试与媒体框相交。
  • PDPage.getRotation 返回页面旋转(顺时针,90° 的倍数)。

因此,获取第一种方法返回的坐标,并根据第二种方法的输出选择您感兴趣的角落的坐标。

【讨论】:

    猜你喜欢
    • 2013-07-15
    • 2015-02-01
    • 1970-01-01
    • 2016-04-24
    • 1970-01-01
    • 2018-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多