PDFBox - 2.0.3 - PDFTextStripper 从 cropping/rotating 之前的页面中提取旧文本

PDFBox - 2.0.3 - PDFTextStripper picking up old text from page prior to cropping/rotating

我正在尝试通过使用 Apache PDFBox 对文件中的各个 PDF 页面执行一些字符串验证。

我将使用 PDFTextStripper 来完成其中的大部分工作,所以我要解决的第一个问题是我要验证的所有 PDF 都是 2up 生成的;例如,第 1 页(共 2 页)和第 2 页(共 2 页)在同一页上,或者如果您想象自己将一本书面朝下扫描到扫描仪中 - 除此之外,它们的方向不正确,需要旋转 90 度以便 PDFTextStripper 可以读取它们正确。

使用下面的元素questions/solutions,我建立了一个方法,首先将页面精确地裁剪成两半,将裁剪的页面导出到一个新文件,将每个页面旋转到正确的方向,然后保存文件;

在 java 中使用 PDFBox 围绕其中心旋转 PDF

将 PDF 页面分成两部分 [重复]

在视觉上,我的方法似乎按预期工作,直到我 运行 PDFTextStripper 反对它 - 它似乎不仅返回我想要的页面的文本,还返回我从中裁剪的页面的文本。

为了确认这个问题,我从整个文档中提取了一页并将其另存为一个新文件 - 运行使用 PDFTextStripper 时,我仍然得到相同的结果,尽管我只能看到实际上是一页。 Adobe 搜索也不会显示隐藏的遗留数据。

我只能假设在我的转换方法中,我需要重新定义裁剪页面,只包含裁剪页面的内容。

我的问题是,我该怎么做?

p.s - 我没有发布我的代码,因为它基本上是上述链接中提供的解决方案的合并 - 但是如果我需要,我可以提供

PDFTextStripper忽略您设置的CropBox裁剪页面。它还会忽略文本是否被填充的矩形或图像覆盖,或者文本是否不可见,它会提取所有文本(图案中的文本或包含 Type 3 字体字符的文本除外)。

您可能想试试 PDFTextStripperByArea。此 class(派生自 PDFTextStripper)将自身限制在您可以定义的区域。

(不幸的是,这些区域必须使用与用于 CropBox 的坐标系不同的坐标系来定义,因此通常您必须先转换坐标。)