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文件相关推荐

  1. python 操作PDF文件 之 A3页面转A4

    python 操作PDF文件 A3页面转A4页面 文章目录 1. 需求概述 2. 代码实现 1. 需求概述 最近接到一份PDF资料需要打印,奈何页面是如图所示的A3格式的,奈何目前条件只支持打印A4. ...

  2. 基于python的pdf文件处理系统

    "音符文档助手"软件操作手册 目录 1.软件介绍 2.界面展示 3.安装教程 4.操作手册 5.注意事项 6.作者鸣谢 7.代码示例 [介绍] 音符文档助手PC端是一款实现word ...

  3. day10 Python操作pdf文件

    目录 一.PyPDF2的使用 1. pypdf2的使用 2. pypdf2的基本应用 3. 为PDF文件页面添加水印 二.reportlab的使用 0. 导入工具 1. 创建画布 2. 添加文字 3. ...

  4. PyPDF2:使用Python操作PDF文件

    诸神缄默不语-个人CSDN博文目录 PDF是文档常用格式,使用Python包PyPDF2可以对PDF文档实现批量.迅速的操作,包括提取文字.切分或合并PDF文件.创建annotation.加密和解密等 ...

  5. 【实用篇】Python操作PDF文件

    PDF是Portable Document Format的缩写,这类文件通常使用 .pdf 作为其扩展名.在日常开发工作中,最容易遇到的就是从PDF中读取文本内容以及用已有的内容生成PDF文档这两个任 ...

  6. python读取PDF文件中跨页表格思路分享

    目录 背景 背景知识 实现思路 1.判断当前页面是否以表格结尾 2.判断下一页面是否以表格开头 3.注意事项 参考 背景 最近需要读取PDF文件中的表格,遇到的一个难点之一是如何识别并合并PDF中跨页 ...

  7. python读取pdf文件_python读取pdf文件

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 一.安装pdfminer3k模块?二. 读取pdf文件import sysimp ...

  8. 第19天---python办公自动化---操作PDF文件

    第19天-python办公自动化-操作PDF文件 在Python中,可以使用名为PyPDF2的三方库来读取PDF文件,可以使用下面的命令来安装它. pip install PyPDF2 读取PDF并抽 ...

  9. python对PDF文件操作

    python对PDF文件操作 下载模块PyPDF2,以页为基本单位对PDF文件进行读写操作,无法直接操作每一页内容. PDF文件读操作 导入函数 from PyPDF2 import PdfFileR ...

  10. Python使操作PDF文件变得有趣

    大家好 我是毕加锁 (锁!) 大家在平时操作PDF文件时是不是感觉很枯燥 那么今天就教大家利用Python让操作PDF文件变得有趣起来  目录  工具  从PDF中提取文本  旋转和叠加页面  加密P ...

最新文章

  1. 两分钟让你知道什么是“Java重载”
  2. python怎么导入文件-Python 导入文件过程图解
  3. JS的indexOf
  4. mysql学习--基本使用
  5. .NET如何写正确的“抽奖”——数组乱序算法
  6. 阿里P8架构师谈:Dubbo的详细介绍、设计思路、以及4大适用场景
  7. 不要在意七十亿分之一对另七十亿分之一的看法
  8. 微信小程序官网DEMO模板
  9. leetcode - 96. 不同的二叉搜索树
  10. python定位相邻节点_Python selenium —— 父子、兄弟、相邻节点定位方式详解
  11. 数据结构排序系列详解之六 树形选择排序
  12. ORB-SLAM2-建立双目稠密点云(一)
  13. 关于数据中台,扎克伯格和马化腾做法不同
  14. HDOJ1008 Elevator
  15. c语言以顺序结构存储的二叉树的非递归遍历,一种二叉树非递归遍历算法的C语言实现...
  16. 小米air2se耳机只有一边有声音怎么办_小米真无线蓝牙耳机Air2 SE评测:仅需169元,享受随心畅听体验...
  17. 利用计算机视觉看懂病历,广东省中山市2019年九年级下册中考语文第二次模拟测试语文试题卷(二模含答案和解析).doc...
  18. 如何进行monkey测试
  19. 从“为什么创业”到“怎么创业”(转)
  20. 使用iso安装linux系统安装教程,使用光盘iso实现Linux操作系统的自动安装部署

热门文章

  1. nc608串口服务器型号,NC608R系列 机架型串口服务器
  2. b直播html5,B-HTML5-Video
  3. Hyper-V虚拟机的两种外网连接方式
  4. 视频压缩与编解码的基本原理
  5. 公司ios开发者账号申请
  6. 第9章、编译期元编程和AST转换
  7. 达梦 mysql区别_达梦数据库(DM6)和ORACLE 10g的异同点
  8. 解读:健康大数据如何改变生活
  9. Flutter中有意思的滚动效果 - Sliver系列
  10. 寄生参数提取——StarRC