带坐标的PDF文本提取

问题描述 投票:38回答:3

我想使用Ghostscript从PDF的一部分(使用坐标)中提取文本。

谁能帮我吗?

pdf ghostscript text-extraction
3个回答
91
投票

是的,使用Ghostscript,您可以从PDF中提取文本。但不,它不是这项工作的最佳工具。不,你不能在“部分”(单页的部分)中这样做。您可以做什么:仅提取特定范围页面的文本。

第一:Ghostscript's txtwrite输出设备(不太好)

 gs \
   -dBATCH \
   -dNOPAUSE \
   -sDEVICE=txtwrite \
   -dFirstPage=3 \
   -dLastPage=5 \
   -sOutputFile=- \
   /path/to/your/pdf

这会将第3-5页中包含的所有文本输出到stdout。如果要输出到文本文件,请使用-sOutputFile=textfilename.txt


gs更新:

最近版本的Ghostscript已经看到txtwrite设备和bug修复方面的重大改进。有关详细信息,请参阅recent Ghostscript changelogs(在该页面上搜索txtwrite)。


第二名:Ghostscript的ps2ascii.ps PostScript utility(更好)

这个要求您从Ghostscript Git source code repository下载文件ps2ascii.ps的最新版本。您必须将PDF转换为PostScript,然后在PS文件上运行此命令:

gs \
  -q \
  -dNODISPLAY \
  -P- \
  -dSAFER \
  -dDELAYBIND \
  -dWRITESYSTEMDICT \
  -dSIMPLE \
   /path/to/ps2ascii.ps \
   input.ps \
  -c quit

如果未定义-dSIMPLE参数,则每个输出行包含一些除纯字文本内容之外的有关使用的字体和字体大小的其他信息。

如果您用-dCOMPLEX替换该参数,您将获得有关所用颜色和图像的其他信息。

阅读ps2ascii.ps中的注释以了解有关此实用程序的更多信息。它使用起来不舒服,但对我而言,它在大多数情况下都适用我需要它....

第三:XPDF's pdftotext CLI实用程序(比Ghostscript更舒服)

一种更舒适的文本提取方法:使用pdftotext(适用于Windows以及Linux / Unix或Mac OS X)。此实用程序基于Poppler或XPDF。这是您可以尝试的命令:

 pdftotext \
   -f 13 \
   -l 17 \
   -layout \
   -opw supersecret \
   -upw secret \
   -eol unix \
   -nopgbrk \
   /path/to/your/pdf
   - |less

这将显示页面范围13(第一页)到17(最后一页),保留双密码保护的命名PDF文件的布局(使用用户和所有者密码secret和supersecret),使用Unix EOL约定,但不插入分页符在PDF页面之间,通过更少的管道...

qazxsw poi显示所有可用的命令行选项。

当然,这两种工具仅适用于PDF的文本部分(如果有的话)。哦,数学公式也不会太好...... ;-)


pdftotext -h更新:

Poppler的pdftotext的最新版本现在可以选择提取“PDF的一部分(使用坐标)”页面,就像OP要求的那样。参数是:

  • pdftotext:作物区域的左上角x坐标
  • -x <int>:左上角的作物区域的y坐标
  • -y <int>:裁剪区域的宽度(以像素为单位)(默认为0)
  • -W <int>:裁剪区域的高度(以像素为单位)(默认为0)

最好,如果与-H <int>参数一起使用。


第四:MuPDF的-layout命令也可以提取文本

跨平台,开源mutool draw应用程序(由同一家也开发Ghostscript的公司制作)捆绑了一个命令行工具MuPDF。要使用此工具从PDF中提取文本,请使用:

mutool

将提取的文本发送到mutool draw -F txt the.pdf 。使用<stdout>将其写入文件。

第五:PDFLib的文本提取工具包(TET)(最重要的......但它是PayWare)

来自-o filename.txt系列产品的文本提取工具包TET可以在PDF文件中找到文本内容的x-y坐标(以及更多)。 TET有一个命令行界面,它是我所知道的所有文本提取工具中最强大的。 (它甚至可以处理连字......)来自他们网站的引用:

几何 TET为文本提供精确的度量标准,例如页面上的位置,字形宽度和文本方向。页面上的特定区域可以被排除或包括在文本提取中,例如,忽略页眉和页脚或页边距。

根据我的经验,虽然它不具备您可以想象的最直接的CLI界面:在您习惯它之后,它会做它承诺要做的事情,对于您投向它的大多数PDF ...


还有更多选择:

  1. 来自PoDoFo项目的pdflib(CLI工具)(开源)
  2. podofotxtextract(通常是处理电子书,开源的GUI程序)有一个命令行选项,可以从PDF中提取文本
  3. calibre(一个GUI文字处理器,开源)可以导入PDF并将其文件保存为.txt:AbiWord

1
投票

我不确定GhostScript是否可以接受坐标,但您可以将PDF转换为图像并将其作为从给定坐标裁剪的子图像或作为整个图像以及坐标发送到OCR引擎。某些OCR API接受矩形参数以缩小OCR的区域。

查看abiword --to=txt --to-name=output.txt input.pdf的一个工作示例,它使用VietOCR作为其OCR引擎,GhostScript作为PDF到图像转换器。


1
投票

Tesseract可以从页面上的已定义区域提取文本。 Debenu Quick PDF Library函数允许您指定x和y坐标,然后您还可以指定区域的宽度和高度。

  • Left =区域左边缘的水平坐标
  • Top =区域上边缘的垂直坐标
  • 宽度=区域的宽度
  • 高度=区域的高度

然后可以在此之后立即调用SetTextExtractionArea函数以从该定义的区域中提取文本。

以下是使用C#的示例(尽管该库是多平台的,可以与许多不同的编程语言一起使用):

GetPageText

使用GetPageText,还可以仅返回位于该区域中的文本或位于该区域中的文本以及有关文本字体的信息,如名称,颜色和大小。

© www.soinside.com 2019 - 2024. All rights reserved.