gpt4 book ai didi

Pdfbox PDFTextStripperByArea 坐标移动

转载 作者:行者123 更新时间:2023-12-04 06:02:55 34 4
gpt4 key购买 nike

我有坐标问题。 PDFTextStripperByArea 区域似乎被推得太高了。

考虑以下示例片段:

...
PDPage page = (PDPage) allPages.get(0);
PDFTextStripperByArea stripper = new PDFTextStripperByArea();

// define region for extraction -- the coordinates and dimensions are x, y, width, height
Rectangle2D.Float region = new Rectangle2D.Float(x, y, width, height);
stripper.addRegion("test region", region);

// overlay the region with a cyan rectangle to check if I got the coordinates and dimensions right
PDPageContentStream contentStream = new PDPageContentStream(document, page, true, true);
contentStream.setNonStrokingColor( Color.CYAN );
contentStream.fillRect(x, y, width, height );
contentStream.close();

// extract the text from the defined region
stripper.extractRegions(page);
String content = stripper.getTextForRegion("test region");
...
document.save(...); ...

青色矩形很好地覆盖了所需的区域。另一方面,剥离器错过了矩形底部的几条线,并包括矩形上方的几条线——它看起来像是“向上”移动(通过 y 坐标)。到底是怎么回事?

最佳答案

正如 Christian 在他的评论中所说,问题在于 fillRect() 方法的坐标系和 PDFTextStripperByArea 方法的坐标系不同。

第一个期望原点是页面的左下角,而第二个期望它是左上角。

因此,要使其工作,请将提供给 PDFTextStripperByArea 的区域更改为:

Rectangle2D.Float region = new Rectangle2D.Float(x, ph - y - height, width, height);

其中 ph 是页面高度:
float ph = page.getMediaBox().getUpperRightY();

PS:我知道这是一个非常古老的问题,但是当我遇到同样的问题时,谷歌把我带到了这里,所以我会添加我的答案。

关于Pdfbox PDFTextStripperByArea 坐标移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8727419/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com