标签: pdf-parsing

Ruby:阅读PDF文件

我正在寻找一种快速可靠的方法来读取/解析Ruby中的大型PDF文件(在Linux和OSX上).

到目前为止,我已经找到了相当古老而简单的PDF工具包(pdftotext -wrapper)和PDF阅读器,它无法读取我的大部分文件.虽然这两个库提供了我正在寻找的功能.

我的问题:我错过了什么吗?是否有更适合(更快,更可靠)的工具来解决我的问题?

ruby pdf ruby-on-rails pdf-parsing

33
推荐指数
1
解决办法
2万
查看次数

从PDF文件集合中提取表格内容

我有一堆PDF - 可能有数百或数千.它们的格式不一样,但是它们中的任何一个都可能有一个或多个表,其中包含我想要收集到单独数据库中的有趣信息.

当然,我知道我必须写一些东西来做这件事.Perl是我的选择 - 或者也许是Java.我不关心什么语言,只要它是免费的(或者在免费试用期间便宜以确保它适合我的目的).

我正在看CAM :: Parse(使用草莓Perl),但我不确定如何使用它来定位和提取文件中的表.我想我确实偏爱Perl,但实际上我想要一些可靠的工作,并且相当容易进行字符串操作.

这样的事情有什么好办法?我是第一个,所以如果java(或python等)有更好的钩子,现在是了解它的好时机.一般指针好; 首选代码将是首选代码.

pdf parsing extract pdf-parsing

26
推荐指数
1
解决办法
4万
查看次数

使用PDFMiner解析没有/ Root对象的PDF

我正在尝试使用PDFMiner python绑定从大量PDF中提取文本.我写的模块适用于许多PDF,但是对于一部分PDF,我得到了一些有些神秘的错误:

ipython堆栈跟踪:

/usr/lib/python2.7/dist-packages/pdfminer/pdfparser.pyc in set_parser(self, parser)
    331                 break
    332         else:
--> 333             raise PDFSyntaxError('No /Root object! - Is this really a PDF?')
    334         if self.catalog.get('Type') is not LITERAL_CATALOG:
    335             if STRICT:

PDFSyntaxError: No /Root object! - Is this really a PDF?
Run Code Online (Sandbox Code Playgroud)

当然,我立即检查这些PDF是否已损坏,但它们可以被正确读取.

尽管没有根对象,有没有办法阅读这些PDF?我不太确定从哪里开始.

非常感谢!

编辑:

我尝试使用PyPDF试图获得一些差异诊断.堆栈跟踪如下:

In [50]: pdf = pyPdf.PdfFileReader(file(fail, "rb"))
---------------------------------------------------------------------------
PdfReadError                              Traceback (most recent call last)
/home/louist/Desktop/pdfs/indir/<ipython-input-50-b7171105c81f> in <module>()
----> 1 pdf = pyPdf.PdfFileReader(file(fail, "rb"))

/usr/lib/pymodules/python2.7/pyPdf/pdf.pyc in __init__(self, stream)
    372         self.flattenedPages = None
    373         self.resolvedObjects = …
Run Code Online (Sandbox Code Playgroud)

python pdf-parsing pypdf pdf-manipulation

11
推荐指数
2
解决办法
8922
查看次数

这是什么(cid:51)在pdf2txt的输出中?

所以我试图从pdf文件中提取文本,我需要它的位置,宽度,高度,字体.

我尝试了很多,但最有用和最完整的解决方案看起来是PDFMiner,在这种情况下,更确切地说是pdf2txt.py.

我已经按照文档和示例进行操作,并尝试Learn More使用以下命令从我的pdf中提取文本:

pdf2txt.py -Y normal -t xml -o buttons.xml buttons.pdf
Run Code Online (Sandbox Code Playgroud)

输出buttons.xml看起来像这样:

<?xml version="1.0" encoding="utf-8" ?>
  <pages>
      <page id="1" bbox="0.000,0.000,799.900,449.944" rotate="0">
      <textbox id="0" bbox="164.979,213.240,247.680,235.944">
          <textline bbox="164.979,213.240,247.680,235.944">
              <text font="KZNUUP+HelveticaNeue-Bold" bbox="164.979,213.240,178.978,235.944" size="22.704">(cid:51)</text>
              <text font="KZNUUP+HelveticaNeue-Bold" bbox="173.280,213.240,187.278,235.944" size="22.704">(cid:76)</text>
              <text font="KZNUUP+HelveticaNeue-Bold" bbox="181.315,213.240,195.313,235.944" size="22.704">(cid:72)</text>
              <text font="KZNUUP+HelveticaNeue-Bold" bbox="189.350,213.240,203.348,235.944" size="22.704">(cid:89)</text>
              <text font="KZNUUP+HelveticaNeue-Bold" bbox="194.795,213.240,208.793,235.944" size="22.704">(cid:85)</text>
              <text font="KZNUUP+HelveticaNeue-Bold" bbox="203.096,213.240,217.094,235.944" size="22.704">(cid:3)</text>
              <text font="KZNUUP+HelveticaNeue-Bold" bbox="206.987,213.240,220.986,235.944" size="22.704">(cid:52)</text>
              <text font="KZNUUP+HelveticaNeue-Bold" bbox="219.684,213.240,233.682,235.944" size="22.704">(cid:86)</text>
              <text font="KZNUUP+HelveticaNeue-Bold" bbox="228.237,213.240,242.235,235.944" size="22.704">(cid:89)</text>
              <text font="KZNUUP+HelveticaNeue-Bold" bbox="233.682,213.240,247.680,235.944" size="22.704">(cid:76)</text>
              <text></text>
          </textline>
          </textbox>
          <textgroup bbox="164.979,213.240,419.659,235.944"> …
Run Code Online (Sandbox Code Playgroud)

python xml pdf-parsing

11
推荐指数
1
解决办法
2904
查看次数

PDF.js无法在IE中正确呈现pdf

我正在使用PDF.js框架来呈现PDF.我正在使用base64数据来呈现PDF.但在IE 11 pdf看起来模糊.

从IE 11中查看以下屏幕

在此输入图像描述

见下面的代码:

var renderPDF = function(url, canvasContainer,data) {
        var scale= 0.9;  //"zoom" factor for the PDF

        function renderPage(page) {
            var canvas = document.createElement('canvas');
            var viewport = page.getViewport(scale);

            var ctx = canvas.getContext('2d');
            var renderContext = {
                canvasContext: ctx,
                viewport: viewport
            };

            canvas.height = viewport.height;
            canvas.width = viewport.width;

            canvasContainer.appendChild(canvas);

            page.render(renderContext);
        }

        function renderPages(pdfDoc) {
            for(var num = 1; num <= pdfDoc.numPages; num++)
                pdfDoc.getPage(num).then(renderPage);
        }

        PDFJS.disableWorker = false;

        var pdfAsDataUri = "data:application/pdf;base64,"+data; // shortened
        var pdfAsArray = convertDataURIToBinary(pdfAsDataUri);
        PDFJS.getDocument(pdfAsArray).then(renderPages); …
Run Code Online (Sandbox Code Playgroud)

javascript canvas pdf-parsing pdf-rendering pdf.js

11
推荐指数
1
解决办法
6296
查看次数

Camelot-py 从 pdf 中提取同一个表两次

我正在尝试使用camelot-py v0.7.3 从多页PDF 文件中提取表格。

到目前为止,它对我来说是最好的 pdf 阅读器工具。我只需要逐行阅读 pdf 并手动检测表格。我尝试了许多其他工具,例如 tabula、PyPDF2/4、pdfminer 等。其中一些无法正确检测文本本身,其中一些扰乱了单词序列或列之间的间距。

但camelot-py 为我提供了最适合我的应用程序的格式的数据。

在使用camelot-py从pdf中提取数据的过程中,它几乎很好地检测了所有表的数据,除了很少的错误:

  1. 它将多个表分组到同一个“TableList”元素中。但我可以将这些分组的表分开。所以这里不需要担心。

  2. 这些分组表中的最后一个表在单独的“TableList”元素中重复。这种重复是我最关心的问题。

上述过程使用的代码如下:

tables = camelot.read_pdf('test.pdf', pages='1-end', flavor='stream')
tables.export('foo.csv', f='csv', compress=False)

for table in tables:
    table_df = table.df
    # Code to parse data from tables in each element converted into datafram
Run Code Online (Sandbox Code Playgroud)

为什么camelot-py 会重复一些表?有什么办法可以处理这种重复吗?

更多信息:

输入 PDF 文件:由于敏感数据,我无法共享 pdf 文件。但这里有一些细节可以让您很好地了解其结构: 所有页面仅包含表格。第 1 页:包含表 1,其中包含客户信息。表2至表4结构相同

第 2 页:包含表 4 和表 5 至 7 中的一些行,其结构与表 2 相同

第3页:表8至10,结构与表2相同

输出 CSV 文件:

foo-page-1-table-1:包含表 1

foo-page-1-table-2:包含表 1 和表 2 至 4 …

python pdf-parsing pdf-reader python-camelot

11
推荐指数
0
解决办法
1382
查看次数

解析PDF时出现奇怪的空格

我需要解析PDF文档.我已经实现了解析器并使用了库iText,直到现在它都没有任何问题.

但是,我不需要解析另一个在单词中间会得到非常奇怪的空格的文档.作为例子,我得到:

Vo rber eitung auf die Motorr adsaison.Viele Motorr ADF AHR呃

所有大胆的单词都应该连接起来,但不知何故,PDF Parser会在单词中添加空格.但是当我将PDF中的内容复制并粘贴到文本文件中时,我得不到这些空格.

首先我认为这是因为我正在使用的PDF解析库,而且还有另一个库我得到了完全相同的问题.

singleSpaceWidth从解析过的单词中查看了一下,我发现当它添加一个空格时,它总是变化的.我试图将它们手动放在一起.但由于没有真正重新组合单词的模式,这几乎是不可能的.

是否有其他人有类似的问题,甚至解决了这个问题?

根据要求,这里有一些更多的信息:

使用SemTextExtractionStrategy进行解析:

PdfReader reader = new PdfReader("data/SpecialTests/SuedostSchweiz/" + src);

SemTextExtractionStrategy semTextExtractionStrategy = new SemTextExtractionStrategy();

for (int i = 1; i <= reader.getNumberOfPages(); i++) {
    // Set the page number on the strategy. Is used in the Parsing strategies.
    semTextExtractionStrategy.pageNumber = i;

    // Parse text from page
    PdfTextExtractor.getTextFromPage(reader, i, semTextExtractionStrategy);
}
Run Code Online (Sandbox Code Playgroud)

这里实际解析文本的SemTextExtractionStrategy方法.我在每个解析的单词之后手动添加一个空格,但不知何故它会在检测中拆分单词:

@Override
public void parseText(TextRenderInfo …
Run Code Online (Sandbox Code Playgroud)

java pdf whitespace itext pdf-parsing

9
推荐指数
2
解决办法
1906
查看次数

如何在pdf文件中找到空白页面

我无法在pdf文件中检测到空白页面.我已经搜索了互联网,但找不到一个好的解决方案.

使用Itextsharp我尝试了页面大小,Xobjects.但他们没有给出确切的结果.

我试过了

if(xobjects==null || textcontent==null || size <20 bytes )
  then "blank"
else
 not blank
Run Code Online (Sandbox Code Playgroud)

但是它返回错误答案的最长时间.我用过Itextsharp

代码如下......我正在使用Itextsharp Librabry

对于xobjects

PdfDictionary xobjects = resourceDic.GetAsDict(PdfName.XOBJECT);
//here resourceDic is PdfDictionary type
//I know that if Xobjects is null then page is blank. But sometimes blank page gives xobjects which is not null.
Run Code Online (Sandbox Code Playgroud)

对于contentstream

 RandomAccessFileOrArray f = reader.SafeFile;
 //here reader = new PdfReader(filename);

 byte[] contentBytes = reader.GetPageContent(pageNum, f);
 //I have measured the size of contentbytes but sometimes it gives more than …
Run Code Online (Sandbox Code Playgroud)

.net c# pdf itextsharp pdf-parsing

8
推荐指数
1
解决办法
7483
查看次数

寻找有关如何将PDF转换为结构化格式的建议

我想对即将拍卖中列出的一些房产做一些分析.不幸的是,运营拍卖的城市并没有以结构化格式发布信息,而是提供了700多页的拍卖物业PDF.

我想知道社区是否有任何关于如何解析所述PDF到结构化格式以插入数据库或创建属性的电子表格的想法.

这是每个页面代表的图像: 物业指南

这是一个列出一些属性的页面: 样本列表

我对python和ruby很满意所以我没有任何问题编写解决方案,但因为"列"和那些列中的数据没有必要捆绑在一起,看起来这可能是一个可疑的命题.

任何想法将不胜感激.

ruby python pdf parsing pdf-parsing

8
推荐指数
1
解决办法
3067
查看次数

struct.error:unpack需要长度为16的字符串参数

使用pdfminer(pdf2txt.py)处理PDF 文件(2.pdf)时收到以下错误:

pdf2txt.py 2.pdf 

Traceback (most recent call last):
  File "/usr/local/bin/pdf2txt.py", line 115, in <module>
    if __name__ == '__main__': sys.exit(main(sys.argv))
  File "/usr/local/bin/pdf2txt.py", line 109, in main
    interpreter.process_page(page)
  File "/usr/local/lib/python2.7/dist-packages/pdfminer/pdfinterp.py", line 832, in process_page
    self.render_contents(page.resources, page.contents, ctm=ctm)
  File "/usr/local/lib/python2.7/dist-packages/pdfminer/pdfinterp.py", line 843, in render_contents
    self.init_resources(resources)
  File "/usr/local/lib/python2.7/dist-packages/pdfminer/pdfinterp.py", line 347, in init_resources
    self.fontmap[fontid] = self.rsrcmgr.get_font(objid, spec)
  File "/usr/local/lib/python2.7/dist-packages/pdfminer/pdfinterp.py", line 195, in get_font
    font = self.get_font(None, subspec)
  File "/usr/local/lib/python2.7/dist-packages/pdfminer/pdfinterp.py", line 186, in get_font
    font = PDFCIDFont(self, spec)
  File "/usr/local/lib/python2.7/dist-packages/pdfminer/pdffont.py", line 654, in __init__ …
Run Code Online (Sandbox Code Playgroud)

python pdf pdf-parsing pdftotext pdfminer

7
推荐指数
1
解决办法
3984
查看次数