Python操作Word模块库文档
python文档 — python-docx 0.8.11 文档 (osgeo.cn)
python-docx — python-docx 0.8.11 documentation
Word转换PDF
使用office组件将word转换成PDF文件(缺点:只支持windows平台)
原理:使用python win32 库 调用word底层vba,将word转成pdf
安装
pip install pywin32
本地选装 office 套件,可以安装比较稳定的版本
常用方法与属性
函数名&属性&类 | 含义 |
win32com.client.gencache.EnsureDispatch() | 设置word应用 |
ensureDispatch.Documents.Open(path) | 读取数据 |
doc.ExportAsFixedFormat(pdfPath) | 导出数据 |
代码
from win32com.client import gencache from win32com.client import constants,gencache def createPdf(wordPath, pdfPath): """ word转pdf :param wordPath: word文件路径 :param pdfPath: 生成pdf文件路径 """ word = gencache.EnsureDispatch('Word.Application') doc = word.Documents.Open(wordPath,ReadOnly=1) doc.ExportAsFixedFormat(pdfPath, constants.wdExportFormatPDF, Item=constants.wdExportDocumentWithMarkup, CreateBookmarks=constants.wdExportCreateHeadingBookmarks) word.Quit(constants.wdDoNotSaveChanges) if __name__ == "__main__": # 路径填写绝对路径 createPdf( r'D:\code\python\auto_code_word\base_data\原数据.docx',r'D:\code\python\auto_code_word\create_data \10_word转换成pdf.pdf' ) # 命令要安装pywin32模块,命令:pip install pywin32
PDF读取内容
安装
pip install pypdf2
pip install pdfplumber
常用方法与属性
函数名&属性&类 | 含义 |
PyPDF2.PdfFileReader(file) | 读取PDF |
pdf.getNumPages() | 获取总页码 |
pdf.getPage(num) | 获取第num页数据 |
page.extractText() | 获取页面数据 |
代码
#pip install pypdf2 from PyPDF2 import PdfFileReader def read_pdf1(): # 打开文件 with open('./base_data/10_word转换成pdf.pdf','rb') as f: # 将打开的文件传递给Reader对象 reader = PdfFileReader(f) # 获取页面的总页数 number = reader.getNumPages() print(number) # 获取单页 page = reader.getPage(0) # 提取文本 info = page.extractText() print(info) # pip install pdfplumber def read_pdf2(): import pdfplumber # 打开文件 with pdfplumber.open('./base_data/10_word转换成pdf.pdf') as f: # 获取数据 print(f.pages) for p in f.pages: print(p.extract_text()) if __name__ =='__main__': # read_pdf1() read_pdf2()
PDF合并文件
在工作时,有时会碰到多个同类型内容的PDF文件,页码数又少,一个一个的打开又比较麻烦。这时应该如何处理呢?
这时就需要一个合并PDF的操作,而合并PDF操作的思路是:
1、读取源PDF文件
2、写入到一个新的PDF文件中
常用方法与属性
函数名&属性&类 | 含义 |
PyPDF2.PdfFileWriter() | 创建一个pdf文件 |
write.addPage(page) | 增加一页数据 |
代码
def merger_file(*m_path): from PyPDF2 import PdfFileReader,PdfFileWriter # 创建一个写入的对象 writer = PdfFileWriter() # 读数据 for path in m_path: # 创建reader reader = PdfFileReader(open(path,'rb')) # 读取页面数据 for p in reader.pages: # 写新的pdf writer.addPage(p) # 保存 with open('./create_data/02_合并pdf.pdf','wb') as f: writer.write(f) if __name__ =='__main__': path = r'.\base_data\10_word转换成pdf.pdf' merger_file(path,path,path)
PDF拆分文件
在工作时,有时会碰到一个比较大的PDF的文件,页码数比较多。而我们又想将数据进行分割,又如何处理呢?
这时就需要一个操作拆分PDF,而拆分PDF的操作的思路是:
1、读取源PDF文件
2、写入到一个新的PDF文件中
代码
from PyPDF2 import PdfFileReader,PdfFileWriter def chai_pdf(path): # 读取文件 reader = PdfFileReader(open(path,'rb')) # 获取页面数据 for i,p in enumerate(reader.pages): writer = PdfFileWriter() writer.addPage(p) # 保存新pdf文件 with open(f'./create_data/03_拆分pdf_{i}.pdf','wb') as f: writer.write(f) if __name__ =='__main__': path = './create_data/02_合并pdf.pdf' chai_pdf(path)
PDF加密文件
代码
from asyncore import write from PyPDF2 import PdfFileReader,PdfFileWriter def jia_mi(path): # 读取数据 reader = PdfFileReader(open(path,'rb')) # 创建写Pdf的对象 writer = PdfFileWriter() # 写入密码 writer.encrypt('123') # 把内容复制pdf的writer中 for p in reader.pages: writer.addPage(p) # 保存数据 with open('./create_data/04_加密pdf.pdf','wb') as f: writer.write(f) if __name__ =='__main__': path = r'base_data\10_word转换成pdf.pdf' jia_mi(path)
PPT基本操作-增加幻灯片
当内容比较简洁时,使用Word编写内容比较单调,这时可以考虑使用PPT编写内容,而Python如何操作PPT呢?
这时可以使用第3方库 python-pptx 来操作PPT
安装
pip install python-pptx
常用方法与属性
函数名&属性&类 | 含义 |
pptx.Presentation() | 创建PPT文件对象 |
ppt.slide_layouts[num] | 选择PPT页面布局 |
ppt.slides.add_slide() | 增加PPT页面 |
presentation.save(path) | 保存文件 |
代码
# pip install python-pptx def create_ppt(): from pptx import Presentation # 创建ppt ppt = Presentation() # 增加幻灯片 ppt.slides.add_slide(ppt.slide_layouts[0]) ppt.slides.add_slide(ppt.slide_layouts[1]) ppt.slides.add_slide(ppt.slide_layouts[3]) ppt.slides.add_slide(ppt.slide_layouts[6]) # 保存 ppt.save('./create_data/01_创建PPT.pptx') if __name__ == '__main__': create_ppt()
PPT基本操作-增加内容
常用方法与属性
函数名&属性&类 | 含义 |
slide.shapes | 获取内容框 |
slide.shapes.title | 获取内容框标题对象 |
slide.shapes.title.text | 获取/设置内容框标题值 |
slide.shapes.placeholders[num] | 获取第num个内容框 |
slide.placeholder.text | 获取/设置内容框内容 |
slide.placeholder.text_frame.add_paragraph() | 增加一个段落 |
paragraph.text | 获取/设置段落内容 |
paragraph.level | 获取/设置段落等级 |
paragraph.font.bold | 设置段落字体 |
paragraph.font.size | 设置段落字体大小 |
slide.shapes.add_textbox() | 增加一个内容文本域 |
代码
from pptx import Presentation from pptx.util import Pt def create_info(): # 创建一个ppt ppt = Presentation() # 添加内容 # 增加第1个页面 slide = ppt.slides.add_slide(ppt.slide_layouts[1]) # 获取标题 title = slide.shapes.title title.text = 'This is Python Title' # 获取内容框 content = slide.placeholders[1] content.text = 'Content Info' # 增加第2个页面 slide2 = ppt.slides.add_slide(ppt.slide_layouts[1]) # 获取内容占位框 content2 = slide2.placeholders[1] # 获取内容frame框对象 tf = content2.text_frame # 增加段落内容 par = tf.add_paragraph() # 设置段落内容 par.text = '1级内容' # 设置内容等级 par.level = 1 par2 = tf.add_paragraph() par2.text = '2级内容' par2.level = 2 par3 = tf.add_paragraph() par3.text = '3级内容' par3.level = 3 # 增加第3个页面 slide3 = ppt.slides.add_slide(ppt.slide_layouts[6]) left = top = right = bottom = Pt(200) # 增加文本框 tb = slide3.shapes.add_textbox(left,top,right,bottom) # 增加内容 tf4 = tb.text_frame par4 = tf4.add_paragraph() par4.text = '1级内容' par4.font.bold = True par4.font.size = Pt(30) # 保存ppt ppt.save('./create_data/02_增加内容.pptx') if __name__ =='__main__': create_info()