PDFBox - 2.0.3 - PDFTextStripper在裁剪/旋转之前从页面中拾取旧文本

时间:2017-10-09 21:30:46

标签: java pdfbox

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

我将大部分时间都使用PDFTextStripper,因此我要解决的第一个问题是,我要验证的所有PDF都是以2up生成的;例如,第1页的第2页和第2页的第2页是在同一页上,或者如果您认为您真正将书面朝下扫描到扫描仪中 - 除此之外,它们的方向不正确,需要旋转90度,因此PDFTextStripper可以读取它们正常。

使用以下问题/解决方案的元素,我建立了一种方法,首先将页面精确地裁剪为一半,导出裁剪的页面以便新文件,将每个页面旋转到正确的方向,然后保存文件;

Rotate PDF around its center using PDFBox in java

Split a PDF page in two parts [duplicate]

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

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

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

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

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

1 个答案:

答案 0 :(得分:2)

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

您可能想尝试使用PDFTextStripperByArea。此类(派生自PDFTextStripper)将自身限制为您可以定义的区域。

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