带坐标的PDF文本提取

AME*_*MER 42 pdf text-extraction ghostscript

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

谁能帮我吗?

Kur*_*fle 102

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

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

 gs \
   -dBATCH \
   -dNOPAUSE \
   -sDEVICE=txtwrite \
   -dFirstPage=3 \
   -dLastPage=5 \
   -sOutputFile=- \
   /path/to/your/pdf
Run Code Online (Sandbox Code Playgroud)

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


txtwrite 更新:

最新版本的Ghostscript已经看到了ps2ascii.ps设备和bug修复方面的重大改进.有关详细信息,请参阅最近的Ghostscript更改日志(在该页面上搜索txtwrite).


第二:Ghostscript的-dSIMPLEPostScript实用程序(更好)

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

   -sOutputFile=textfilename.txt
Run Code Online (Sandbox Code Playgroud)

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

如果您替换该参数pdftotext,您将获得有关使用的颜色和图像的其他信息.

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

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

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

gs \
  -q \
  -dNODISPLAY \
  -P- \
  -dSAFER \
  -dDELAYBIND \
  -dWRITESYSTEMDICT \
  -dSIMPLE \
   /path/to/ps2ascii.ps \
   input.ps \
  -c quit
Run Code Online (Sandbox Code Playgroud)

这将显示页面范围13(˚F IRST页)到17( AST页面),保留双密码保护的名为PDF文件的布局(使用用户和所有者密码秘密绝密),对Unix EOL惯例,但不在PDF页面之间插入分页符,通过更少的管道...

pdftotext 显示所有可用的命令行选项.

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


pdftotext 更新:

Poppler的最新版本-x <int>现在可以选择提取"一部分(使用坐标)的PDF"页面,就像OP要求的那样.参数是:

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

最好,如果与mutool draw参数一起使用.


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

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

 pdftotext \
   -f 13 \
   -l 17 \
   -layout \
   -opw supersecret \
   -upw secret \
   -eol unix \
   -nopgbrk \
   /path/to/your/pdf
   - |less
Run Code Online (Sandbox Code Playgroud)

将提取的文本发送到-o filename.txt.用于podofotxtextract将其写入文件.

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

TET,来自 pdflib系列产品的Text Extraction Toolkit可以在PDF文件中找到文本内容的xy坐标(等等).TET有一个命令行界面,它是我所知道的所有文本提取工具中最强大的.(它甚至可以处理连字......)来自他们网站的引用:

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

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


还有更多选择:

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