标签: pdfminer

python PDFminer只解析部分页面

我正在使用模块pdfminerpython模块解析PDF文档.我只是想从这个文档中提取文本.

这个过程很顺利但是,当我提取LTText*对象时,我意识到我没有得到该LTText*对象内的所有文本.它似乎有一个内部缓冲区或类似的东西导致文本被切割在每一页.

我的代码:

...
for lt_text_obj in lt_objs:
    if isinstance(lt_text_obj, LTTextBox) or isinstance(lt_text_obj, LTTextLine):
         if lt_text_obj._objs:
             for text_obj in lt_text_obj._objs:
                 if isinstance(text_obj, LTTextBox) or isinstance(text_obj,LTTextLine)]:
                     text_content.append(text_obj)
...
Run Code Online (Sandbox Code Playgroud)

text_obj变量永远不会包含整个文本,即使pdf文件页面中的此文本始终格式相同也是如此.

我不认为问题出在代码中,因为我还使用pdf2txt.py脚本将pdf文件转换为txt,并且生成的txt文件的页面也被"剪切".

似乎问题可能是pdfminer配置或我的pdf文件格式......我完全迷失了.

有任何想法吗?

python pdf parsing pdfminer

5
推荐指数
1
解决办法
1214
查看次数

从pdf提取表格

我正在尝试从本PDF表格中获取数据。我已经尝试了pdfminer和pypdf,但还是有些运气,但是我不能真正从表中获取数据。

这是其中一张表的样子: 在此处输入图片说明

如您所见,有些列标有“ x”。我正在尝试将此表放入对象列表。

到目前为止,这是代码,我现在正在使用pdfminer。

# pdfminer test
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.pdfdevice import PDFDevice, TagExtractor
from pdfminer.pdfpage import PDFPage, PDFTextExtractionNotAllowed
from pdfminer.converter import XMLConverter, HTMLConverter, TextConverter, PDFPageAggregator
from pdfminer.cmapdb import CMapDB
from pdfminer.layout import LAParams, LTTextBox, LTTextLine, LTFigure, LTImage
from pdfminer.image import ImageWriter
from cStringIO import StringIO
import sys
import os


def pdfToText(path):
    rsrcmgr = PDFResourceManager()
    retstr = StringIO()
    codec = 'utf-8'
    laparams = LAParams()
    device = …
Run Code Online (Sandbox Code Playgroud)

python ocr python-2.7 pdfminer

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

pdfminer上的警告

我已经发现并(稍微)修改了stackoverflow中的这个脚本,以便它可以在python 3.3上运行:

from pdfminer.pdfinterp import PDFResourceManager, process_pdf
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from io import StringIO

def convert_pdf(path):

    rsrcmgr = PDFResourceManager()
    retstr = StringIO()
    codec = 'utf-8'
    laparams = LAParams()
    device = TextConverter(rsrcmgr, retstr, laparams=laparams)

    fp = open(path, 'rb')
    process_pdf(rsrcmgr, device, fp)
    fp.close()
    device.close()

    string = retstr.getvalue()
    retstr.close()
    return string


print(convert_pdf('abc.pdf'))
Run Code Online (Sandbox Code Playgroud)

它工作正常,但我似乎有两个问题:

  • 在运行脚本时,我收到了大量的警告:

    警告:root:undefined:PDFCIDFont:basefont ='LKOELN + Wingdings-Regular',cidcoding ='Adobe-Identity',139
    警告:root:undefined:PDFCIDFont:basefont ='LKKPCF + Wingdings2',cidcoding ='Adobe-Identity' ,132

在印刷文本中看起来(cid:139)如何,我如何捕获此警告并用其他内容替换该文本?

  • 请注意,我有一个编解码器行,在原始脚本中进入TextConverter(rsrcmgr, retstr, laparams=laparams),但我得到:

    回溯(最近一次调用最后一次):文件"C:/Users/rodrigo/Desktop/csp_pdf/csp_pdf2.py",第46行,在convert_pdf('abc.pdf')文件中"C:/ Users/rodrigo/Desktop/csp_pdf /csp_pdf2.py",第33行,在convert_pdf设备= TextConverter(rsrcmgr,retstr,codec ='utf-8',laparams …

python pdf python-3.x pdfminer

5
推荐指数
1
解决办法
6173
查看次数

Python PDFMIner - PDF到CSV

我希望能够将PDF转换为CSV文件,并找到了几个有用的脚本,但是对Python来说,我有一个问题:

在哪里指定PDF的文件路径和要打印的CSV?

我正在使用Python 2.7.11和PDFMiner 20140328.

import sys
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.pdfpage import PDFPage
from pdfminer.converter import XMLConverter, HTMLConverter, TextConverter
from pdfminer.layout import LAParams
from cStringIO import StringIO

def pdfparser(data):

    fp = file(data, 'rb')
    rsrcmgr = PDFResourceManager()
    retstr = StringIO()
    codec = 'utf-8'
    laparams = LAParams()
    device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
    interpreter = PDFPageInterpreter(rsrcmgr, device)


    for page in PDFPage.get_pages(fp):
    interpreter.process_page(page)
    data =  retstr.getvalue()

    print data

if __name__ == '__main__':
pdfparser(sys.argv[1]) 
Run Code Online (Sandbox Code Playgroud)

python csv pdf pdfminer

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

Python pdfminer 提取图片每页生成多张图片(应该是单张图片)

我正在尝试提取 PDF 中的图像。我正在处理的文件有 2 页以上。第 1 页是文本,第 2-n 页是图像(每页一个,或者它可能是跨越多个页面的单个图像;我无法控制原点)。

我能够从第 1 页解析出文本,但是当我尝试获取图像时,每个图像页面会得到 3 个图像。我无法确定使保存变得困难的图像类型。另外尝试将每页 3 张图片保存为单个 img 没有结果(因为无法通过 OSX 上的查找器打开)

样本:

fp = open('the_file.pdf', 'rb')
parser = PDFParser(fp)
document = PDFDocument(parser)
rsrcmgr = PDFResourceManager()
laparams = LAParams()
device = PDFPageAggregator(rsrcmgr, laparams=laparams)
interpreter = PDFPageInterpreter(rsrcmgr, device)


for page in PDFPage.create_pages(document):
    interpreter.process_page(page)
    pdf_item = device.get_result()
    for thing in pdf_item:
        if isinstance(thing, LTImage):
            save_image(thing)
        if isinstance(thing, LTFigure):
            find_images_in_thing(thing)


def find_images_in_thing(outer_layout):
    for thing in outer_layout:
        if isinstance(thing, LTImage):
            save_image(thing)
Run Code Online (Sandbox Code Playgroud)

save_image要么pageNum_imgNum'wb' …

python-2.7 pdfminer

5
推荐指数
1
解决办法
9239
查看次数

PDFminer:PDFTextExtractionNotAllowed错误

我试图从pdfs中提取文本我已经从互联网上删除了,但当我尝试下载它们时,我收到错误:

File "/usr/local/lib/python2.7/dist-packages/pdfminer/pdfpage.py", line 124, in get_pages
    raise PDFTextExtractionNotAllowed('Text extraction is not allowed: %r' % fp)
PDFTextExtractionNotAllowed: Text extraction is not allowed <cStringIO.StringO object at 0x7f79137a1ab0>
Run Code Online (Sandbox Code Playgroud)

我检查了stackoverflow,其他有此错误的人发现他们的pdf用密码保护.但是,我可以通过我的mac上的预览访问pdfs.

有人提到预览可能无论如何都可以查看安全的pdf,所以我也在Adobe Acrobat Reader中打开文件,但仍然可以访问pdf.

以下是我从以下网站下载pdf的示例:http: //www.sophia-project.org/uploads/1/3/9/5/13955288/aristotle_firstprinciples.pdf

我发现如果我手动打开pdf并将其作为pdf重新导出到同一个文件路径(基本上用'new'文件替换原始文件),那么我就能从中提取文本.我猜这与从网站下载它们有关.我只是使用urllib下载pdfs,如下所示:

if not os.path.isfile(filepath):
    print '\nDownloading pdf'
    urllib.urlretrieve(link, filepath)
else:
    print '\nFile {} already exists!'.format(title)
Run Code Online (Sandbox Code Playgroud)

我也尝试将文件重写为新的文件路径,但它仍然导致相同的错误.

if not os.path.isfile(filepath):
    print '\nDownloading pdf'
    urllib.urlretrieve(link, filepath)

    with open(filepath) as f:
        new_filepath = re.split(r'\.', filepath)[0] + '_.pdf'
        new_f = file(new_filepath, 'w')
        new_f.write(f.read())
        new_f.close()

    os.remove(filepath)
    filepath = new_filepath …
Run Code Online (Sandbox Code Playgroud)

python pdf text nlp pdfminer

5
推荐指数
2
解决办法
4617
查看次数

如何在Python中检测PDF文档中的旋转页面?

给定一个多页 PDF 文档,如何检查给定页面是否旋转(-90、90 或 180\xc2\xba)?最好使用 Python (pdfminer, pyPDF) ...

\n\n

更新:页面是扫描的,大部分页面都是由文本组成的。

\n

python pdf image-processing pypdf pdfminer

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

在 pdfminer.6 python 中保留提取文本的布局

我想提取此pdf的文本:https://github.com/pdfminer/pdfminer.six/files/1887670/Wochenkarte-KW-15-Neu.pdf

\n\n

当我使用以下代码提取文本时:

\n\n
def convert_pdf_to_txt(path):\n    resource_manager = PDFResourceManager()\n    device = None\n    try:\n        with StringIO() as string_writer, open(path, \'rb\') as pdf_file:\n            device = TextConverter(resource_manager, string_writer, codec=\'utf-8\', laparams=LAParams())\n            interpreter = PDFPageInterpreter(resource_manager, device)\n\n            for page in PDFPage.get_pages(pdf_file, maxpages=1):\n                interpreter.process_page(page)\n\n            pdf_text = string_writer.getvalue()\n    finally:\n        if device:\n            device.close()\n    return pdf_text\n
Run Code Online (Sandbox Code Playgroud)\n\n

该文本与 pdf 的文本布局不对应。\n当前结果:

\n\n
Montag 09.04.2018 \nMen\xc3\xbc 1 \n\nKl. Salat \n\n\nMen\xc3\xbc 2 \n\nKl. Salat \n\nSeelachs-Spinat-T\xc3\xbcrmchen mit Spinat-\nMasalla-Sauce und Reis \nCurrywurst mit Pommes \n
Run Code Online (Sandbox Code Playgroud)\n\n

预期结果:

\n\n
Montag 09.04.2018 \nMen\xc3\xbc 1 \n\nKl. Salat …
Run Code Online (Sandbox Code Playgroud)

python pdf text python-3.x pdfminer

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

如何处理 PDFMiner 提取的文本中的 CID?

我有一些印地语的 PDF,并且有可提取的文本。我使用pdfminer.six for python 3.6 来进行提取。输出看起来像:
在此处输入图片说明

如您所见,有许多字符被转换为“(cid :number)”形式。

在进一步分析中,我发现 PDF 包含将字符代码映射到字形索引的 CMAP。因此,CID 是 CMAP 表中它映射到的字形的字符标识。

但是这些字符代码与 Unicode 值有什么关系呢?基本上,PDF 查看器如何使用此映射显示字形?

此外,根据对这个类似问题的评论,这个过程可能不合法。但我并不是要窃取某人的字体。我要正文。这个过程如何成为非法的?

由于像这样的问题很多,我想澄清一下,我的目的不是解决“cid”问题。我想澄清问题的原因和违法的原因。

编辑: 问题pdfminer讨论这个问题,在这里笔者清楚地说,似乎有此问题没有可靠的解决方法。是否有一些通用的基本限制(例如,无法访问字体)使此问题持续存在?

python pdf text pdfminer

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

XMLConverter 中出现意外的关键字参数“codec”

以下错误消息:

device = XMLConverter(rsrcmgr, retstr, laparams=laparams, codec=codec)
TypeError: __init__() got an unexpected keyword argument 'codec'
Run Code Online (Sandbox Code Playgroud)

原始代码:

rsrcmgr = PDFResourceManager()
retstr = BytesIO()
codec = 'utf-8'
laparams = LAParams()
device = XMLConverter(rsrcmgr, retstr, laparams=laparams, codec=codec)
Run Code Online (Sandbox Code Playgroud)

令人惊讶的是,这在我的项目设置(python 3.5.3)中运行良好,但在新设置(python 3.7.4)中则不然。不确定这是否是一个问题,或者现在是否有新版本的 XMLConverter 可用

codec xmlconvert python-3.x pdfminer

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

标签 统计

pdfminer ×10

python ×8

pdf ×7

python-3.x ×3

text ×3

python-2.7 ×2

codec ×1

csv ×1

image-processing ×1

nlp ×1

ocr ×1

parsing ×1

pypdf ×1

xmlconvert ×1