python生成pdf报表,python输出pdf文件

  python生成pdf报表,python输出pdf文件

  大家好,从PDF中提取信息是办公场景中经常用到的操作,也是读者经常在后台询问的操作。

  内容少的话我们可以手动复制粘贴,但是如果需要批量提取,可以考虑使用Python。之前转载过相关文章,提到主要是用pdfplumber库。今天,我们再举一个例子。

  通常PDF中的表格分为图片型和文本型。文本分为简单类型和复杂类型。本文将举例说明这三个部分。

  选择一个简单的表格。

  选择一个更复杂的表。

  选择图片表。

  使用的模块主要包括

  pdf木材

  熊猫

  宇宙魔方

  太平航运

  本文出现的PDF资料是从巨潮资讯官网下载的公开PDF文件。主题是关于理财的,相关发布信息如下:

  一共6页,后面会有例子展示。

  一、简单文本类型数据简单文本类型表格是指一个PDF页面中只有一个表格,表格内容完整且可复制。例如,我们选择了PDF中包含以下内容的第四页:

  如您所见,该页面中只有一个表。我们先把这个表写入Excel,编码。

  importpdfplumeraprimportpandasaspdpdf=pr . open(关于用自有资金购买银行理财产品的进展公告. pdf )PS=pdf . page pg=PS[3]tables=pg . extract _ tables()table=tables[0]print(table)df=PD。DataFrame(table[1:],columns=table[0])for iinrange(len(table)):for jinrange(len(table[I])):table[I][j]=table[I][j]。replace(\n ,)DF1=pd.dataframe (table [1:],columns=table[0])DF1 . to _ excel( page 2 . xlsx )获取以下结果:

  与PDF上的原表相比,内容完全一致,唯一不同的是主营业务内容较多,导致显示不完整。现在我们来谈谈这段代码。

  首先导入要使用的两个库。在pdfplumber中,open()函数用于打开PDF文件,代码使用相对路径。打开()。页数是PDF的页数,打印的ps值可通过以下方式获得

  Pg=ps[3]代表我们选择的第三页。

  Pg.extract_tables():可以输出页面中的所有表格,并返回一个嵌套列表,结构层次为表格行单元格。此时,页面上的整个表被放入一个大列表中,原始表中的行组成大列表中的每个子列表。如果您需要输出一个外部列表元素,您将得到一个由原始表的同一行中的元素组成的列表。

  同样,pg.extract_table()返回多个独立的列表,结构级别为rowcell。如果页面中有多个行数相同的表格,默认输出最上面的表格;否则,将只输出行数最多的表。此时,表格的每一行都被视为一个单独的列表,列表中的每个元素都是原始表格中每个单元格的内容。

  因为这个页面中只有一个表格,所以我们需要tables集合中的第一个元素。按如下方式打印表格值:

  大家可以看到,上面有\n这种不必要的字符,它的作用其实就是换行,只是我们在Excel中不需要。因此,有必要消除它,并用代码中的for循环和replace函数替换带有空格的控件(即delete \n)。观察表是一个包含两个元素的列表。

  最后df1=pd.dataframe (table [1:],columns=table [0])。这段代码的功能是创建一个数据框,并将内容放在相应的行中。

  这段代码只是将数据存储到Excel中。如果需要进一步调整样式,可以使用openpyxl等模块进行修改。具体可参考之前的文章Python操作Excel。

  二。复杂表格提取复杂表格是指表格样式不统一或者一页有多个表格。以PDF的第五页为例:

  您可以看到这个页面中有两个大表,如果您仔细观察,实际上有四个表。根据简单的表式提取方法,结果如下:

  如你所见,只是将全部表格文本提取出来,但实际上第一个表格又细分为两个表,所以我们需要进一步修改并再次拆分此表!例如,提取代码的上半部分,如下所示:

  importpdfplumeraprimportpandasaspdpdf=pr . open(关于用自有资金购买银行理财产品的进展公告. pdf )PS=pdf . page pg=PS[4]tables=pg . extract _ tables()table=tables[0]print(table)df=PD。DataFrame(table[1:],columns=table[0])for iinrange(len(table)):for jinrange(len(table[I])):table[I][j]=table[I][j]。替换为( \n ,)DF1=pd.dataframe (table [1:],columns=table[0])DF2=DF1 . iloc[2:]DF2=DF2 . rename(columns={ 2019年12月31日: 2019年1月-12月9月30日: 2020年1月-9月 }) DF2=DF2.loc [3:] DF1=DF1.loc [:1,] WithPD。Excel Writer( Company impact . xlsx )ASI:df1 . to _ Excel Header=True)#放入资产数据df2.to_excel(i,sheet_name= business ,index=False,Header=True)#放入业务数据此代码是在简单表格提取的基础上修改的。第14行代码的作用是提取另一个头的信息,赋给df2,然后重命名df2(使用rename函数

  打印df2显示列名和第一行信息是重复的,因此我们需要重复前面的步骤,并使用loc()函数来剪切数据帧。

  注意我们用的是稀有的熊猫。此处为循环设置了Excelwriter函数。这是为了避免直接写入造成的最后数据覆盖原始数据。如果您感兴趣,可以不使用withopen方法来尝试结果。最终结果如下:

  正如您所看到的,这个表现在分别显示在两个表中。当然,也可以放在一个表格里对比。

  说到底,复杂表单的主观性很大,需要根据不同情况进行不同处理,很难写出一劳永逸的解决方案!

  第三,最后也是最难处理的是图片形式。人们经常问如何从图片PDF中提取表格/文本等信息。

  其实本质上就是提取图片,之后如何进一步处理图片,提取信息,和Python提取PDF表单这个主题关系不大!

  这里也简单介绍一下,就是先提取图片再OCR识别提取表格。在Python中,可以使用Tesseract库,首先需要安装pip。

  Pipinstallpytesseract在Python中安装了这个库之后,我们需要安装exe文件,以便后面的代码使用。

  3358 digi . bib . uni-mannheim . de/tessera CT/tessera CT-ocr-setup-4 . 00 . 00 dev . exe可以下载安装。注意,目前如果按照正常步骤,是不会识别中文的,所以需要安装简体中文语言包。在3359github.com/Tesseract-OCR/tessdata/find/master/chi _ sim . trained data下载地址,放在tesseract-ocr的tessdata目录下。

  接下来,我们使用一个简单的基于图像的pdf,如下所示:

  第一步是提取图片。这里使用GUI办公自动化系列中的图片提取软件对PDF中的图片进行提取,得到如下图片:

  然后执行以下代码来识别图片内容:

  importpytesserac from pilimportimageimportpandasaspdpytessract . pytesserac . tesserac t _ cmd= C://program files(x86)/tesserac t-OCR/tes act . exe tiqu=pytesserac t . image _ to _ string(image . open( picture-type . jpg ))print(tiqu)tiqu=tiqu . split( \ N )while intiqu:#不能使用forticu . remove()first=tiqu[:6]second=tiquxlsx)#转换为xlsx文件。我们的想法是用Tesseract-OCR解析图片,得到一个字符串,然后对字符串应用split函数,把字符串变成列表,同时删除\ n。

  然后我们可以发现我们的列表中还有空格。这时,我们使用while循环删除这些空字符。注意这里不能使用for循环,因为每删除一个,列表中的元素就前进一个,这样会导致删除不完全。最后,pandas用于将这些转换成数据帧。最终结果如下:

  如你所见,图片表的内容经过了完美的分析和处理!当然,之所以能轻松搞定,也和这个表格的足够简单有关,在真实场景中的图片可能会有更复杂的干扰因素,而这需要大家在处理的同时,自己找到最合适的方式!

  如果你喜欢这篇文章,可以给我一系列评论(喜欢再转发)。如果你有想看的文章题目,可以给我留言。想快速推进Python办公自动化,可以点击阅读原文~

  -END-

  文末推荐一本《用Python轻松处理Excel数据》的书,是针对非IT领域上班族的Python数据处理基础指南。为了让读者在学习过程中对Python的知识点有更深的印象,本书采用边学边用的写法:在介绍知识点的同时,将知识点及时穿插到案例应用中。主要内容包括Python基础、Python第三方库、Python自定义函数、常用高阶函数应用、openpyxl库以及Python和Excel的综合应用案例等。?

  按照惯例,如果你喜欢,你可以获得2份评论,我将从另外3个用户那里发出5份高质量的消息。只有没有收到书礼的粉丝才能参与,没有意义的留言不会被选中。一旦发现他们,将永久取消资格(有先例),直到下周二上午9点。

  点击阅读原文

  查看早起Python的办公自动化一对一指导!

  精选十大案例,手把手带你复现 + 需求解决 + 答疑????

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: