作者:J哥
项目背景
- 网上PDF转换工具眼花缭乱,选择困难症,有些甚至还收费;
- 直接以其他格式打开PDF效果一般较差;
- 有些小可爱通过复制粘贴的方式进行操作,浪费了大量的时间。
那么,有没有什么办法可以秒速解决这些问题呢?没错,Python可以。废话不多说,直接上实操。
项目实操
一
PDF转Text
首先,安装一下操作PDF的库pdfplumber。pdfplumber 可以很好的读取 PDF 文件内容和提取 PDF 中的表格,这个库不属于 Python 标准库,需要单独安装。
pip3 install pdfplumber
安装好了之后,咱导入pdfplumber。
import pdfplumber
打开PDF论文,并提取论文第2页面内容。
with pdfplumber.open("兴业B信托项目风险管理研究.pdf") as p:
page = p.pages[2]
textdata = page.extract_text()
打印一下textdata,提取到了第2页的内容如下:
重庆大学硕士学位论文 中文摘要
摘 要
风险管理始终是金融业发展过程中永恒主题。信托行业属于高风险行业,我国信托
行业进入快速发展时期,日趋增多的金融创新业务及金融混业经营的趋势,对信托公司
在风险管理方面提出了更高的要求。随着信托业务对社会经济的不断渗透,横跨货币市
场、资本市场和产业市场的信托行业在我国宏观经济中的地位愈加明显。在信托行业中,
作为重点业务类型的房地产信托在整个信托行业的发展过程中作用不容小觑,因此探讨
信托公司房地产行业风险管理研究具有必要的理论价值和现实意义。
此时,你也许疑问了,一篇硕士论文至少也50多页吧。没错,我下载的这篇论文有75页,咱还得加个for循环,把所有页面内容提取下来。
with pdfplumber.open("兴业B信托项目风险管理研究.pdf") as p:
for i in range(75):
page = p.pages[i]
textdata = page.extract_text()
#print(textdata)
内容都提取出来了,接下来就是保存为text文本。"a"为指定写入模式为追加写入。完整代码如下:
#PDF转Text1import pdfplumber
2with pdfplumber.open("兴业B信托项目风险管理研究.pdf") as p:
3 for i in range(75):
4 page = p.pages[i]
5 textdata = page.extract_text()
6 #print(textdata)
7 data = open("text.text", "a")
8 data.write(textdata)
二
PDF转Word
需要安装一下操作Word的库python-docx。
pip3 install python-docx
导入Document方法。
from docx import Document
打开PDF论文,并提取论文第2页面内容。
with pdfplumber.open("兴业B信托项目风险管理研究.pdf") as p:
page = p.pages[2]
textdata = page.extract_text()
#print(textdata)
新建Word文档,并将提取的内容存储到里面。
document = Document() #新建一个空白的word文档
content = document.add_paragraph(textdata) #在文档中添加正文段落,将变量textdata导进去
document.save("word.docx") #保存文档docx,命名为word
完整代码如下:
#PDF转Word1import pdfplumber
2from docx import Document
3with pdfplumber.open("兴业B信托项目风险管理研究.pdf") as p:
4 page = p.pages[2]
5 textdata = page.extract_text()
6 #print(textdata)
7 document = Document() #新建一个空白的word文档
8 content = document.add_paragraph(textdata) #在文档中添加正文段落,将变量textdata导进去
9 document.save("word.docx") #保存文档docx,命名为word
如果要提取全部,加循环。
三
PDF转Excel
这里所说的PDF转Excel不是全文转Excel,而是对论文中的部分表格进行格式转换,方便在Excel中对数据进行筛选、计算等操作。
本案例PDF论文中第69-75页为附录部分,贴的是财务报表数据,截取部分内容,长这样:
首先,安装并导入操作Excel表格的库openpyxl。
pip3 install openpyxlfrom openpyxl import Workbook
打开PDF论文,提取论文第69-75页表格内容,注意这里range左开右闭。
with pdfplumber.open("兴业B信托项目风险管理研究.pdf") as p:
for i in range(68,75): #遍历69页-75页
page = p.pages[i]
table = page.extract_table()
#print(table)
新建空白的Excel文件,按行写入从PDF提取的表格数据内容。完整代码如下:
#PDF转Excel 1import pdfplumber
2from openpyxl import Workbook
3with pdfplumber.open("兴业B信托项目风险管理研究.pdf") as p:
4 workbook = Workbook() #新建空白Excel工作簿
5 sheet = workbook.active #激活sheet
6 for i in range(68,75): #遍历69页-75页
7 page = p.pages[i]
8 table = page.extract_table() #提取表格数据
9 #print(table)
10 for row in table: #遍历所有行
11 #print(row)
12 sheet.append(row) #按行追加写入数据
13 workbook.save("Excel.xlsx") #保存文件,命名为Excel
14 i += 1
15 print("第%d页PDF提取完成"%i) #提示提取进度
最终效果如下,好像还可以。
结 语
到这呢,Python对PDF论文的简单操作就基本结束了。但还有一些值得探讨的问题,比如如果有100个PDF且页数都不一样怎么办?即使全部提取下来,文件的格式问题如果优化?提取的多个Excel表格如何合并到一个sheet?首先肯定的告诉你,python都能解决,我以后也还会写相关的Python操作。
最后,祝所有即将毕业或以后要毕业的朋友们降重顺利,毕业快乐!
参考链接:
pdfplumber :https://github.com/jsvine/pdfplumber;
python-docx: https://python-docx.readthedocs.io/en/latest/;
openpyxl:https://openpyxl.readthedocs.io/en/stable/;