使用 pdfbox 时在 pdf 页面中的坐标



我在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( 代表的任何想法。谢谢。

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

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

此可见区域用于显示,由页面旋转值旋转

关于您的问题

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

因此,您应该首先意识到用户空间坐标系的原点 (0,0(根本不需要是角,它几乎可以在可见区域内部或外部的任何位置。只是为了保持情况简单,通常作物盒或媒体盒的一角是原产地。此外,每个页面可能都有自己的原点位置,没有必要在文档页面之间保持相同。

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

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

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

最新更新