基于Python操作PDF文件
1.拆分PDF
import os
from PyPDF2 import PdfFileWriter, PdfFileReaderdef split_pdf(filename, filepath, save_dirpath, step=5):"""拆分PDF为多个小的PDF文件,@param filename:文件名@param filepath:文件路径@param save_dirpath:保存小的PDF的文件路径@param step: 每step间隔的页面生成一个文件,例如step=5,表示0-4页、5-9页...为一个文件@return:"""if not os.path.exists(save_dirpath):os.mkdir(save_dirpath)pdf_reader = PdfFileReader(filepath)# 读取每一页的数据pages = pdf_reader.getNumPages()for page in range(0, pages, step):pdf_writer = PdfFileWriter()# 拆分pdf,每 step 页的拆分为一个文件for index in range(page, page+step):if index < pages:pdf_writer.addPage(pdf_reader.getPage(index))# 保存拆分后的小文件save_path = os.path.join(save_dirpath, filename+str(int(page/step)+1)+'.pdf')print(save_path)with open(save_path, "wb") as out:pdf_writer.write(out)print("文件已成功拆分,保存路径为:"+save_dirpath)filename = '易方达中小盘混合型证券投资基金2020年中期报告.pdf'
filepath = os.path.join(os.getcwd(), filename)
save_dirpath = os.path.join(os.getcwd(), '易方达中小盘混合型证券投资基金2020年中期报告【拆分】')
split_pdf(filename, filepath, save_dirpath, step=5)
2.批量合并
import os
from PyPDF2 import PdfFileReader, PdfFileWriterdef concat_pdf(filename, read_dirpath, save_filepath):"""合并多个PDF文件@param filename:文件名@param read_dirpath:要合并的PDF目录@param save_filepath:合并后的PDF文件路径@return:"""pdf_writer = PdfFileWriter()# 对文件名进行排序list_filename = os.listdir(read_dirpath)list_filename.sort(key=lambda x: int(x[:-4].replace(filename, "")))for filename in list_filename:print(filename)filepath = os.path.join(read_dirpath, filename)# 读取文件并获取文件的页数pdf_reader = PdfFileReader(filepath)pages = pdf_reader.getNumPages()# 逐页添加for page in range(pages):pdf_writer.addPage(pdf_reader.getPage(page))# 保存合并后的文件with open(save_filepath, "wb") as out:pdf_writer.write(out)print("文件已成功合并,保存路径为:"+save_filepath)filename = '易方达中小盘混合型证券投资基金2020年中期报告.pdf'
read_dirpath = os.path.join(os.getcwd(), '易方达中小盘混合型证券投资基金2020年中期报告【拆分】')
save_filepath = os.path.join(os.getcwd(), '易方达中小盘混合型证券投资基金2020年中期报告-合并后.pdf')
concat_pdf(filename, read_dirpath, save_filepath)
3.提取文字
import os
import pdfplumberdef extract_text_info(filepath):"""提取PDF中的文字@param filepath:文件路径@return:"""with pdfplumber.open(filepath) as pdf:# 获取第2页数据page = pdf.pages[1]print(page.extract_text())filename = '易方达中小盘混合型证券投资基金2020年中期报告.pdf'
filepath = os.path.join(os.getcwd(), filename)
# 提取文字内容
extract_text_info(filepath)
4.提取表格内容
import os
import pandas as pd
import pdfplumberdef extract_table_info(filepath):"""提取PDF中的图表数据@param filepath:@return:"""with pdfplumber.open(filepath) as pdf:# 获取第18页数据page = pdf.pages[17]# 如果一页有一个表格,设置表格的第一行为表头,其余为数据table_info = page.extract_table()df_table = pd.DataFrame(table_info[1:], columns=table_info[0])df_table.to_csv('dmeo.csv', index=False, encoding='gbk')filename = '易方达中小盘混合型证券投资基金2020年中期报告.pdf'
filepath = os.path.join(os.getcwd(), filename)
# 提取表格内容
extract_table_info(filepath)
5.提取图片内容
import os
import re
import fitzdef extract_pic_info(filepath, pic_dirpath):"""提取PDF中的图片@param filepath:pdf文件路径@param pic_dirpath:要保存的图片目录路径@return:"""if not os.path.exists(pic_dirpath):os.makedirs(pic_dirpath)# 使用正则表达式来查找图片check_XObject = r"/Type(?= */XObject)"check_Image = r"/Subtype(?= */Image)"img_count = 0"""1. 打开pdf,打印相关信息"""pdf_info = fitz.open(filepath)# 1.16.8版本用法 xref_len = doc._getXrefLength()# 最新版本xref_len = pdf_info.xref_length()# 打印PDF的信息print("文件名:{}, 页数: {}, 对象: {}".format(filepath, len(pdf_info), xref_len-1))"""2. 遍历PDF中的对象,遇到是图像才进行下一步,不然就continue"""for index in range(1, xref_len):# 1.16.8版本用法 text = doc._getXrefString(index)# 最新版本text = pdf_info.xref_object(index)is_XObject = re.search(check_XObject, text)is_Image = re.search(check_Image, text)# 如果不是对象也不是图片,则不操作if is_XObject or is_Image:img_count += 1# 根据索引生成图像pix = fitz.Pixmap(pdf_info, index)pic_filepath = os.path.join(pic_dirpath, 'img_' + str(img_count) + '.png')"""pix.size 可以反映像素多少,简单的色素块该值较低,可以通过设置一个阈值过滤。以阈值 10000 为例过滤"""# if pix.size < 10000:# continue"""三、 将图像存为png格式"""if pix.n >= 5:# 先转换CMYKpix = fitz.Pixmap(fitz.csRGB, pix)# 存为PNG# pix.writePNG(pic_filepath)pix.save(pic_filepath)filename = '加速计算期末.pdf'
filepath = os.path.join(os.getcwd(), filename)
pic_dirpath = os.path.join(os.getcwd(), '加速计算期末【文中图片】')
# 提取图片内容
extract_pic_info(filepath, pic_dirpath)
6.添加水印
import os
from copy import copy
from PyPDF2 import PdfFileReader, PdfFileWriterdef add_watermark(filepath, save_filepath, watermark_filepath):"""添加水印@param filepath:PDF文件路径@param save_filepath:最终的文件保存路径@param watermark_filepath:水印PDF文件路径@return:""""""读取PDF水印文件"""# 可以先生成一个空白A4大小的png图片,通过 https://mp.weixin.qq.com/s/_oJA6lbsdMlRRsBf6DPxsg 教程的方式给图片加水印,将图片插入到word中并最终生成一个水印PDF文档watermark = PdfFileReader(watermark_filepath)watermark_page = watermark.getPage(0)pdf_reader = PdfFileReader(filepath)pdf_writer = PdfFileWriter()for page_index in range(pdf_reader.getNumPages()):current_page = pdf_reader.getPage(page_index)# 封面页不添加水印if page_index == 0:new_page = current_pageelse:new_page = copy(watermark_page)new_page.mergePage(current_page)pdf_writer.addPage(new_page)# 保存水印后的文件with open(save_filepath, "wb") as out:pdf_writer.write(out)filename = '易方达中小盘混合型证券投资基金2020年中期报告.pdf'
filepath = os.path.join(os.getcwd(), filename)
save_filepath = os.path.join(os.getcwd(), '易方达中小盘混合型证券投资基金2020年中期报告-水印.pdf')
watermark_filepath = os.path.join(os.getcwd(), 'watermark.pdf')
# 添加水印
add_watermark(filepath, save_filepath, watermark_filepath)
其中一页的添加水印效果如下图所示:
7.文档加密
import os
from PyPDF2 import PdfFileReader, PdfFileWriterdef encrypt_pdf(filepath, save_filepath, passwd='xiaoyi'):"""PDF文档加密@param filepath:PDF文件路径@param save_filepath:加密后的文件保存路径@param passwd:密码@return:"""pdf_reader = PdfFileReader(filepath)pdf_writer = PdfFileWriter()for page_index in range(pdf_reader.getNumPages()):pdf_writer.addPage(pdf_reader.getPage(page_index))# 添加密码pdf_writer.encrypt(passwd)with open(save_filepath, "wb") as out:pdf_writer.write(out)filename = '易方达中小盘混合型证券投资基金2020年中期报告.pdf'
filepath = os.path.join(os.getcwd(), filename)
save_filepath = os.path.join(os.getcwd(), '易方达中小盘混合型证券投资基金2020年中期报告-加密后.pdf')
# 文档加密
encrypt_pdf(filepath, save_filepath, passwd='xiaoyi')
8.文档解密
def decrypt_pdf(filepath, save_filepath, passwd='xiaoyi'):"""解密 PDF 文档并且保存为未加密的 PDF@param filepath:PDF文件路径@param save_filepath:解密后的文件保存路径@param passwd:密码@return:"""pdf_reader = PdfFileReader(filepath)# PDF文档解密pdf_reader.decrypt('xiaoyi')pdf_writer = PdfFileWriter()for page_index in range(pdf_reader.getNumPages()):pdf_writer.addPage(pdf_reader.getPage(page_index))with open(save_filepath, "wb") as out:pdf_writer.write(out)filename = '易方达中小盘混合型证券投资基金2020年中期报告-加密后.pdf'
filepath = os.path.join(os.getcwd(), filename)
save_filepath = os.path.join(os.getcwd(), '易方达中小盘混合型证券投资基金2020年中期报告-解密后.pdf')
# 文档解密
decrypt_pdf(filepath, save_filepath, passwd='xiaoyi')
9.文档旋转
import PyPDF2filename = '易方达中小盘混合型证券投资基金2020年中期报告.pdf'
filepath = os.path.join(os.getcwd(), filename)
save_filepath = os.path.join(os.getcwd(), '易方达中小盘混合型证券投资基金2020年中期报告-旋转.pdf')
pdf_reader = PdfFileReader(filepath)
page = pdf_reader.getPage(0)
page.rotateClockwise(90)
pdf_writer = PdfFileWriter()
pdf_writer.addPage(page)
with open(save_filepath, "wb") as out:pdf_writer.write(out)
基于Python操作PDF文件相关推荐
- python 操作PDF文件 之 A3页面转A4
python 操作PDF文件 A3页面转A4页面 文章目录 1. 需求概述 2. 代码实现 1. 需求概述 最近接到一份PDF资料需要打印,奈何页面是如图所示的A3格式的,奈何目前条件只支持打印A4. ...
- 基于python的pdf文件处理系统
"音符文档助手"软件操作手册 目录 1.软件介绍 2.界面展示 3.安装教程 4.操作手册 5.注意事项 6.作者鸣谢 7.代码示例 [介绍] 音符文档助手PC端是一款实现word ...
- day10 Python操作pdf文件
目录 一.PyPDF2的使用 1. pypdf2的使用 2. pypdf2的基本应用 3. 为PDF文件页面添加水印 二.reportlab的使用 0. 导入工具 1. 创建画布 2. 添加文字 3. ...
- PyPDF2:使用Python操作PDF文件
诸神缄默不语-个人CSDN博文目录 PDF是文档常用格式,使用Python包PyPDF2可以对PDF文档实现批量.迅速的操作,包括提取文字.切分或合并PDF文件.创建annotation.加密和解密等 ...
- 【实用篇】Python操作PDF文件
PDF是Portable Document Format的缩写,这类文件通常使用 .pdf 作为其扩展名.在日常开发工作中,最容易遇到的就是从PDF中读取文本内容以及用已有的内容生成PDF文档这两个任 ...
- python读取PDF文件中跨页表格思路分享
目录 背景 背景知识 实现思路 1.判断当前页面是否以表格结尾 2.判断下一页面是否以表格开头 3.注意事项 参考 背景 最近需要读取PDF文件中的表格,遇到的一个难点之一是如何识别并合并PDF中跨页 ...
- python读取pdf文件_python读取pdf文件
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 一.安装pdfminer3k模块?二. 读取pdf文件import sysimp ...
- 第19天---python办公自动化---操作PDF文件
第19天-python办公自动化-操作PDF文件 在Python中,可以使用名为PyPDF2的三方库来读取PDF文件,可以使用下面的命令来安装它. pip install PyPDF2 读取PDF并抽 ...
- python对PDF文件操作
python对PDF文件操作 下载模块PyPDF2,以页为基本单位对PDF文件进行读写操作,无法直接操作每一页内容. PDF文件读操作 导入函数 from PyPDF2 import PdfFileR ...
- Python使操作PDF文件变得有趣
大家好 我是毕加锁 (锁!) 大家在平时操作PDF文件时是不是感觉很枯燥 那么今天就教大家利用Python让操作PDF文件变得有趣起来 目录 工具 从PDF中提取文本 旋转和叠加页面 加密P ...
最新文章
- 两分钟让你知道什么是“Java重载”
- python怎么导入文件-Python 导入文件过程图解
- JS的indexOf
- mysql学习--基本使用
- .NET如何写正确的“抽奖”——数组乱序算法
- 阿里P8架构师谈:Dubbo的详细介绍、设计思路、以及4大适用场景
- 不要在意七十亿分之一对另七十亿分之一的看法
- 微信小程序官网DEMO模板
- leetcode - 96. 不同的二叉搜索树
- python定位相邻节点_Python selenium —— 父子、兄弟、相邻节点定位方式详解
- 数据结构排序系列详解之六 树形选择排序
- ORB-SLAM2-建立双目稠密点云(一)
- 关于数据中台,扎克伯格和马化腾做法不同
- HDOJ1008 Elevator
- c语言以顺序结构存储的二叉树的非递归遍历,一种二叉树非递归遍历算法的C语言实现...
- 小米air2se耳机只有一边有声音怎么办_小米真无线蓝牙耳机Air2 SE评测:仅需169元,享受随心畅听体验...
- 利用计算机视觉看懂病历,广东省中山市2019年九年级下册中考语文第二次模拟测试语文试题卷(二模含答案和解析).doc...
- 如何进行monkey测试
- 从“为什么创业”到“怎么创业”(转)
- 使用iso安装linux系统安装教程,使用光盘iso实现Linux操作系统的自动安装部署