使用pdfbox时pdf页面中的坐标

时间:2019-09-08 08:57:49

标签: java pdf pdfbox

我正在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)的任何想法。谢谢。

1 个答案:

答案 0 :(得分:1)

每个页面均以一个坐标系开始,其 x 坐标向右增加,而 y 坐标向上增加。坐标可以任意大,仅受通用数值数据结构范围和分辨率限制。

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

此可见区域(用于显示)由页面的旋转值旋转。

关于您的问题

  

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

因此,您首先应该知道用户空间坐标系的原点(0,0)根本不需要是拐角,它实际上可能在可见区域之内或之外的任何位置。 。仅仅为了使情况简单,往往是作物箱或媒体箱的一角。此外,每个页面可能都有其原始位置,无需在文档页面之间保持相同。

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

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

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