带坐标的PDF文本提取

时间:2011-05-31 11:59:39

标签: pdf ghostscript text-extraction

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

任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:93)

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

首先:Ghostscript's txtwrite输出设备(不太好)

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

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


gs更新:

最新版本的Ghostscript已经在txtwrite设备和错误修复方面取得了重大改进。有关详细信息,请参阅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( f 第一页)到17( l ast页面),保留双密码保护的命名PDF文件的布局(使用用户和所有者密码 secret supersecret ),使用Unix EOL约定,但没有在PDF页面之间插入分页符,通过较少的管道...

pdftotext -h显示所有可用的命令行选项。

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


pdftotext更新:

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

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

最好,如果与-layout参数一起使用。


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

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

mutool draw -F txt the.pdf

会将提取的文本发送到<stdout>。使用-o filename.txt将其写入文件。

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

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

  

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

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


还有更多选择:

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

答案 1 :(得分:1)

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

查看VietOCR的工作示例,该示例使用Tesseract作为其OCR引擎,GhostScript作为PDF到图像转换器。

答案 2 :(得分:1)

Debenu Quick PDF Library可以从页面上的已定义区域中提取文本。 SetTextExtractionArea功能可让您指定x和y坐标,然后您还可以指定区域的宽度和高度。

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

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

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

DPL.LoadFromFile(@"Sample.pdf", "");
DPL.SetOrigin(1); // Sets 0,0 coordinate position to top left of page, default is bottom left
DPL.SetTextExtractionArea(35, 35, 229, 30); // Left, Top, Width, Height
string ExtractedContent = DPL.GetPageText(8);
Console.WriteLine(ExtractedContent);

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