我的问题是:
如何从按列划分的PDF文件中提取文本,以获得由该列分隔的结果?
背景:我从事一个关于文本分析(尤其是科学文本)的项目。这些文本有时以多列布局发布,每列都有单独的页码。要按布局页码对提取的文本进行排序,按列提取文本会很有用。
我使用pdfBox并尝试/搜索了以下内容:
问题是pdfBox似乎会自动将文本按列划分:如果我将PDFTextStripper的设置为true,则页面的所有符号都设置在一行中,而不识别单独的列。但如果我将setSortByPosition()设置为false,则剥离器正在进行此除法。
为此,我查看了pdfBox源代码:关键方法是PDFTextStripper的WritePage()
方法。这里空格(大多数pdf中没有给出)和换行符显然是计算出来的。但是我找不到Stripper是如何计算列中断的。
所以问题又来了:
提前谢谢
结合@mkl的答案,我使用PDFbox完成了按列提取文本的过程。
我找到两列边界的方法是不断尝试。=:
StringBuilder pdfText = new StringBuilder();
PDFTextStripperByArea stripper = new PDFTextStripperByArea();
stripper.setSortByPosition(true);
Rectangle rectLeft = new Rectangle(10, 60, 320, 820);
Rectangle rectRight = new Rectangle(330, 60, 320, 820);
stripper.addRegion("leftColumn", rectLeft);
stripper.addRegion("rightColumn", rectRight);
PDPageTree allPages = document.getDocumentCatalog().getPages();
int pageNumber = document.getNumberOfPages();
String leftText = "";
String rightText = "";
for (int i = 0; i < pageNumber; i++) {
PDPage page = (PDPage) allPages.get(i);
stripper.extractRegions(page);
leftText = stripper.getTextForRegion("leftColumn");
rightText = stripper.getTextForRegion("rightColumn");
pdfText.append(leftText);
pdfText.append(rightText);
}
如果我将PDFTextStripper的setSortByPosition()设置为true,则页面的所有符号都设置在一行中,而不识别单独的列。但如果我将setSortByPosition()设置为false,则剥离器将执行此除法。
[...] PDFTextStripper如何计算列分隔符?
它不是。
通过将SortByPotion
设置为false
,您告诉PDFBox不要尝试对页面内容流中的文本片段进行排序,而是按照它们出现的顺序接受它们。
在您的文档中,文本片段似乎是按照阅读顺序绘制的,即逐列绘制。并非所有文档都是如此,为了应对其他文档,PDFBox提供了从左到右、从上到下对文本片段进行排序的选项。
在文档中激活该选项(将SortByPotion
设置为true
)会返回不尊重列的文本。
pdfBox API中是否有方法捕获此内容/按列提取文本?
PDFBox不分析页面内容以识别列。但是,如果您进行分析,如果您提供列矩形作为规则,它允许您逐列提取文本。
问题内容: 我需要使用iText从pdf文件中提取文本。 问题是:一些pdf文件包含2列,当我提取文本时,我得到一个文本文件,其中的列作为结果合并(即同一行中两列的文本) 这是代码: 你能帮我完成这个任务吗? 问题答案: 我是iText文本提取子系统的作者。您需要做的是开发自己的文本提取策略(如果您看一下如何实现的话,就会发现您可以提供可插拔的策略)。 您将如何确定列的开始和停止位置完全取决于您-
以下是从PDF中提取内容和元数据的程序。 import java.io.File; import java.io.FileInputStream; import java.io.IOException; import org.apache.tika.exception.TikaException; import org.apache.tika.metadata.Metadata; import o
问题内容: 我想知道是否可以仅使用Javascript将文本包含在PDF文件中?如果是,谁能告诉我如何? 我知道有一些服务器端的Java,C#等库,但我宁愿不使用服务器。谢谢 问题答案: 这是一个古老的问题,但是由于pdf.js多年来一直在发展,所以我想给出一个新的答案。也就是说,它可以在本地完成,而无需涉及任何服务器或外部服务。新的pdf.js具有一个函数:page.getTextContent
假设我的用户去了他们办公室的扫描仪。扫描仪能够生成扫描文档的PDF。这基本上就是我拥有的文件类型。 我想做的是从这个PDF中提取文本。这不是“第一代”pdf,因为文本没有嵌入到pdf中。文本嵌入在PDF中的图像中。 PDFBox的iText中是否有允许检索此数据的功能?如果可能的话,我正在尝试避免对图像进行OCR。我希望IText或PDFBox中有一些内置的东西可以做到这一点。 请注意,我不是在谈
问题内容: 我正在尝试使用提取此 PDF文件中包含的文本。 我正在使用PyPDF2模块,并具有以下脚本: 运行代码时,得到以下输出,该输出与PDF文档中包含的输出不同: 如何提取PDF文档中的文本? 问题答案: 要从PDF提取文本,请使用以下代码
问题内容: 如何 使用PHP 从PDF文档中提取文本? (我不能使用其他工具,我没有root用户访问权限) 我发现一些函数可用于纯文本,但是它们不能很好地处理Unicode字符: http://www.hashbangcode.com/blog/zend-lucene-and-pdf-documents-part-2-pdf- data-extraction-437.html 问题答案: 下载 c