在日常工作中,要保护一下我们的商业机密嘛~ 如果按名单向客户逐一发文件,如果就发几份,那么可以采取用pdf软件逐份编辑,打个水印、加个密码咯。但面对成百上千份文件,就需要批量处理了!菜鸡在熬夜加班后终于发掘了这个东西的用法,分享给大家~

很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!??¤
QQ群:623406465

# encoding:utf-8
import os;
import pandas as pd;
import numpy as np;
import openpyxl;
import shutil;
# -*- coding: utf-8 -*-
# 读入pdf路径为path0,写出pdf路径为path1
path0 = 'D:\\举例\\文件夹1'
path1 = 'D:\\举例\\文件夹2'
filelist=os.listdir(path0)# 读入新文件,假设新文件仅有一页,文件夹1中的文件均仅有2页
pdf2 = open( 'D:\\举例\\新文件.pdf','rb')
pdf_reader2 = PdfFileReader(pdf2)for file in filelist:what = os.path.join(path0,file)pdf1 = open(what,'rb')pdf_reader = PdfFileReader(pdf1)pdf_writer = PdfFileWriter() # 第一页为文件夹1中的文件第一页pdf_writer.addPage(pdf_reader.getPage(0))# 第二页为新文件第一页pdf_writer.addPage(pdf_reader2.getPage(0))# 第三页为文件夹1中的文件第二页pdf_writer.addPage(pdf_reader.getPage(1))
# 写入合并的pdfpdf_writer.encrypt(user_pwd="123123")output = os.path.join(path1,file)with open(output, 'wb') as out:pdf_writer.write(out)
# 写函数:复制原文件并逐一对pdf文件按照name.txt更改文件名为【机构名称】,name.txt文件内仅有一列数据【机构名称】
def get_files():path='D:\\举例\\文件夹1'name = pd.read_table('D:\\举例\\文件夹1\\name.txt');name2 = np.array(name['机构名称']) ;n = name.iloc[:,0].size;for file in range(1,n+1):path_o = 'D:\\举例\\文件夹1\\正文.pdf'filename_new = name2[file]path_n = os.path.join(path,filename_new+'.pdf')shutil.copyfile(path_o, path_n);print(filename_new);# 执行函数
get_files()
# 安装pyPDF2,准备批量打水印
#pip install pypdf2
from PyPDF2 import PdfFileReader, PdfFileWriter,PdfFileMerger
#!/usr/bin/env python
#!pip install reportlab
# encoding:utf-8
from PyPDF2 import PdfFileReader, PdfFileWriter
from reportlab.lib.units import cm
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfgen import canvas
from reportlab.pdfbase.ttfonts import TTFont
pdfmetrics.registerFont(TTFont('song', 'C:/Windows/Fonts/simsun.ttc'))#宋体
import xlrd
# 因name.txt中【机构名称】字数不一,因此水印按照字数分组设置大小、位置、旋转角度等。
# 5个字以下的水印
# encoding:utf-8
def create_watermark5(content):"""水印信息"""# 默认大小为21cm*29.7cmfile_name = "mark.pdf"c = canvas.Canvas(file_name, pagesize=(30*cm, 30*cm))# 移动坐标原点(坐标系左下为(0,0))c.translate(4*cm, 14*cm)# 设置字体c.setFont('song', 120)# 指定描边的颜色c.setStrokeColorRGB(0, 1, 0)# 指定填充颜色c.setFillColorRGB(0, 1, 0)# 画一个矩形# c.rect(cm, cm, 7*cm, 17*cm, fill=1)# 旋转45度,坐标系被旋转c.rotate(45)# 指定填充颜色c.setFillColorRGB(0, 0, 0, 0.1)# 设置透明度,1为不透明# c.setFillAlpha(0.1)# 画几个文本,注意坐标系旋转的影响c.drawString(3*cm, 0*cm, content)c.setFillAlpha(0.6)# 关闭并保存pdf文件c.save()return file_name
# 打水印函数
def add_watermark(pdf_file_in, pdf_file_mark, pdf_file_out):"""把水印添加到pdf中"""pdf_output = PdfFileWriter()input_stream = open(pdf_file_in, 'rb')pdf_input = PdfFileReader(input_stream, strict=False)# 获取PDF文件的页数pageNum = pdf_input.getNumPages()# 读入水印pdf文件pdf_watermark = PdfFileReader(open(pdf_file_mark, 'rb'), strict=False)# 给每一页打水印for i in range(pageNum):page = pdf_input.getPage(i)page.mergePage(pdf_watermark.getPage(0))page.compressContentStreams()  # 压缩内容pdf_output.addPage(page)# 添加密码pdf_writer.encrypt(user_pwd="abc")output = os.path.join(path1,file)with open(output, 'wb') as out:pdf_writer.write(out)pdf_output.write(open(pdf_file_out, 'wb'))
# 设置打水印读入、写出路径,打水印读入文件路径为path00,写出文件路径为path11
# 注意:前置步骤需将文件夹1中全部未打水印的文件复制到文件夹2中
path00 = 'D:\\举例\\文件夹1'
path11 = 'D:\\举例\\文件夹2'
filelist00=os.listdir(path00)
filelist11=os.listdir(path11)
# 写条件循环语句,完成不同字数长度的文件水印
# encoding:utf-8
if __name__ == '__main__':for i,j in zip(filelist00,filelist11):pdf_file_in = os.path.join(path00,i)pdf_file_out = os.path.join(path11,j)mark_name = os.path.splitext(i)[0]if len(mark_name) <= 5:pdf_file_mark = create_watermark5(mark_name)elif len(mark_name) <= 8:pdf_file_mark = create_watermark8(mark_name)elif len(mark_name) <= 13:pdf_file_mark = create_watermark13(mark_name)elif len(mark_name) <= 15:pdf_file_mark = create_watermark15(mark_name)else: pdf_file_mark = create_watermark18(mark_name)add_watermark(pdf_file_in, pdf_file_mark, pdf_file_out)print(mark_name)
# 写电子章函数,可重复调用add_watermark进行打批量电子章
def create_stamp(content):"""盖章"""# 默认大小为21cm*29.7cmfile_name = "stamp.pdf"c = canvas.Canvas(file_name, pagesize=(30*cm, 30*cm))# 移动坐标原点(坐标系左下为(0,0))c.translate(10*cm, 0.5*cm)# 设置字体c.setFont('song', 120)# 指定描边的颜色c.setStrokeColorRGB(0, 1, 0)# 指定填充颜色c.setFillColorRGB(0, 1, 0)# 画一个矩形# c.rect(cm, cm, 7*cm, 17*cm, fill=1)# 旋转45度,坐标系被旋转c.rotate(45)# 指定填充颜色c.setFillColorRGB(0, 0, 0, 0.1)# 设置透明度,1为不透明# c.setFillAlpha(0.1)# 画几个文本,注意坐标系旋转的影响c.drawString(3*cm, 0*cm, content)c.setFillAlpha(0.6)# 关闭并保存pdf文件c.save()return file_name
# 按分支机构地区进行文件分类,location的格式是两列数据,分别为【机构名称】、【分支机构地区】
# encoding:utf-8
name11 = pd.read_table('D:\\举例\\location.txt')
name11 = pd.DataFrame(name11)# 循环逻辑:如【机构名称】中带有“公司”二字,划分至企业文件夹,其余按照location.txt划分至对应的【分支机构地区】
# -*- coding: utf-8 -*-
for file in filelist:filename=os.path.splitext(file)[0]if  filename.find('公司') > 0:old_path = os.path.join(path0,file)new_pat = os.path.join(path1,'企业')new_path = os.path.join(new_pat,file)os.rename(old_path,new_path)print("移动到企业")else:location = name11[name11['机构名称'] == filename]location = location['分支机构地区'].iloc[0]old_path = os.path.join(path0,file)new_pat = os.path.join(path1,location)new_path = os.path.join(new_pat,file)os.rename(old_path,new_path)print("移动到分支机构")

至此,文件已复制为按照【机构名称】命名的文件,文件上每页均有【机构名称】字样、由左下角至右上角的灰色大水印,每一个文件都需要输入密码“abc”才能打开,且按照分类移动至所属文件夹。

Pypdf2作为Python批量处理pdf文件的包,其功能完整,操作难度小,可以说有效提升办公效率。

在此感谢csdn上各位大佬,菜鸡只是copy-paste各位的教程,完善出了自己的版本,避免了熬夜加班肝pdf!!!把这个版本分享给更多非科班同学们,抄一抄,改一改,单车变摩托,6点下班近在咫尺!!!

Python自动化办公:PDF批量处理(打水印、加密码、分类放置)相关推荐

  1. 【Python自动化办公】批量将Excel表格数据导出为PDF文件

    前言 嗨喽~大家好呀,这里是魔王呐 ! Excel 格式在我们工作中经常需要用到的 不管是做数据统计还是做信息登记,Excel 都能发挥很强大的作用 也是目前最流行的个人计算机数据处理软件. Exce ...

  2. 偷偷学Python,怎么高空建楼(Python自动化办公实现批量替换Word)

    文章目录 前言 一.项目 二.工具 1.Word:域 2.Python 安装 代码 三.敲黑板 前言 最近在学Python,主要是用于自动化办公.在这之前,我没学过Python,硬要说有那就是两年前看 ...

  3. python自动化pdf报告_[Python] 自动化办公 PDF提取文字、表格、图片

    转载请注明:陈熹 chenx6542@foxmail.com (简书号:半为花间酒) 若公众号内转载请联系公众号:早起Python 本例可以学到的知识点: 使用 pdfplumber 提取 PDF 中 ...

  4. python自动办公pdf_[Python] 自动化办公 PDF提取文字、表格、图片

    转载请注明:陈熹 chenx6542@foxmail.com (简书号:半为花间酒) 若公众号内转载请联系公众号:早起Python 本例可以学到的知识点: 使用 pdfplumber 提取 PDF 中 ...

  5. Python自动化办公:批量将文件按分类保存,文件再多,只需一秒钟解决

    文章目录 序言 代码展示 效果展示 序言 当我们电脑里面的文本或者或者文件夹太多了,有时候想找到自己想要的文件,只能通过去搜索文件名,要是名字忘记了的话,那你也搜不了吧,当然你可通过后缀名去搜索,但是 ...

  6. python自动化办公之爬取HTML图片写入PPT实战

    python自动化办公之批量图片导入PPT 昨天,大Boss找到一个网页,觉得里面的图片内容特别好,想把它下载下来作为学习资料,整理整理教导下属.但是,手动一张一张的保存图片太慢了,问我可不可以下载下 ...

  7. python自动化办公——定制化将电子签名批量签写到PDF文件

    python自动化办公--定制化将电子签名批量签写到PDF文件 文章目录 python自动化办公--定制化将电子签名批量签写到PDF文件 1.安装依赖 2.需求分析 3.代码 1.安装依赖 首先需要下 ...

  8. 【python自动化办公】Python自动化之pdf——PyPDF2、pdfplumber、fitz、pdf2image库介绍

    目录 前言 1. 学习python自动化办公目的 2. 未来持续打卡内容 3. 资料来源与思维导图 一.PDF处理库 1.PyPDF2--基础操作 2.pdfplumber--表格抽取 3.fitz- ...

  9. Python自动化办公文章,开放下载共97页PDF

    发现很多读者对python自动化办公(python操作Excel.Word.PDF.PPT)的文章都很喜欢,并希望能够应用到工作中去. 因此,我直接写了一个文档<python自动化办公系列文章& ...

最新文章

  1. automake使用说明
  2. Python中的ThreadLocal变量
  3. 故障码123401_电力系统规划设计对电力工程设计的应用
  4. arduino的IDE开发stm32的板子
  5. BZOJ 2115 Wc2011 Xor DFS+高斯消元
  6. 麻雀虽小,五脏俱全:分析CVS活动情况的小工具(有源码供学习)
  7. Java LocalDate类| 带示例的getEra()方法
  8. vue js 和原生app调用回调方法问题
  9. 创建您自己的.NET DynamicObject 为什么、何时和如何
  10. java零碎要点010---Java实现office文档与pdf文档的在线预览功能
  11. 杭电2100Lovekey
  12. php disable-ipv6,強迫 PHP Curl 使用 IPv4 , 忽略 IPv6
  13. 数学篇--初中数学知识
  14. 【网络覆盖优化】基于matlab的网络覆盖遗传优化问题仿真
  15. php中wamp具体指的是,phpwamp和wampserver有什么关系,为什么名字都带wamp这几个字母,两者有区别吗?我应该用哪个?...
  16. 直角三角形用计算机怎么做,‎App Store 上的“直角三角形计算器”
  17. 期刊投稿参考文献格式注意要点
  18. [翻译]Reactor Netty参考指南 - 8.UDP客户端
  19. 深度学习的hand-crafted和end-to-end的一些概念和区别
  20. 2022年中国现制咖啡行业市场规模及重点企业经营现状分析:市场规模达89.7亿元[图]

热门文章

  1. 【万字长文】这40个Python可视化图表案例,强烈建议收藏!
  2. 利用Udig配置地图样式,应用到geoserver中
  3. 一台计算机的组装和配置方案,自己组装一台吃鸡电脑 从入门到高端吃鸡配置方案推荐 (2)...
  4. Redis数据丢失讨论及规避和解决的几点总结
  5. AIX服务器(Unix系统)下安装gcc
  6. Windows下解决adb连接不上的终极解决方案
  7. R将matrix导出为csv
  8. win10家庭版怎么在一间办公室实现打印机共享
  9. hp服务器如何ghost系统安装,【引用】惠普电脑无法安装GHOST系统的三种方法
  10. MapReduce:大型集群上的简单数据处理