IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 第15章:处理PDF和Word文档(笔记) -> 正文阅读

[Python知识库]第15章:处理PDF和Word文档(笔记)

15.1:PDF文档

15.1.1:从PDF提取文本

import PyPDF2

pdfFileObj = open("meetingminutes.pdf", 'rb')
pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
print(pdfReader.numPages)

pageObj = pdfReader.getPage(0)
print(pageObj.extractText())

以二进制模式打开文件,然后将他传入PdfFileReader()中得到它的PdfFileReader对象

PdfFileReader的namePages属性:获取PDF共有几页

PdfFileReader的getPage()函数:获取传入页号中的页面信息(索引从0开始)

extractText()函数:放回改文本页的字符串。提取文本信息但并不完美

15.1.2:解密PDF

import PyPDF2

pdfReader = PyPDF2.PdfFileReader(open('encrypted.pdf', 'rb'))
print(pdfReader.isEncrypted)
print(pdfReader.decrypt('rosebud'))

PdfFileReader的isEncrypted属性:判断PDF是否加密,是返回True,否则False

PdfFileReader的decrypt()函数:传入口令字符串进行解密,如果加密文件没有调用这个函数在调用getPage()函数就会报错,并且该函数只解密了PdfFileReader对象,不是实际的PDF文档。

15.1.3:创建PDF

与PdfFileReader对象相对的PdfFileWriter对象,它可以创建一个新的PDF文档,但不能将任意的文本写入PDF,不像python可以写入纯文本文件,能力仅限于从其他PDF中复制页面、旋转页面、重叠页面和加密页面,不允许直接编辑PDF。

  1. 打开一个或多个已有的PDF,得到PdfFileReader对象
  2. 创建一个新的PdfFileWrite对象
  3. 将页面从PdfFileReader对象复制到PdfFileWrite对象中
  4. 利用PdfFileWrite对象写入输出的PDF

复制页面

import PyPDF2

pdf1File = open('meetingminutes.pdf', 'rb')
pdf2File = open('meetingminutes2.pdf', 'rb')
pdf1Reader = PyPDF2.PdfFileReader(pdf1File)
pdf2Reader = PyPDF2.PdfFileReader(pdf2File)
pdfWriter = PyPDF2.PdfFileWriter()

for pageNum in range(pdf1Reader.numPages):
    pdfObj = pdf1Reader.getPage(pageNum)
    pdfWriter.addPage(pdfObj)
for pageNum in range(pdf2Reader.numPages):
    pdfObj = pdf2Reader.getPage(pageNum)
    pdfWriter.addPage(pdfObj)

pdfOutputFile = open('combinedminutes.pdf', 'wb')
pdfWriter.write(pdfOutputFile)
pdfOutputFile.close()
pdf1File.close()
pdf2File.close()

PdfFileWrite的addPage()函数:将数据传递给PdfFileWrite对象

PdfFileWrite的write()函数:将对象中的数据写入到文件中

旋转页面

import PyPDF2

minutesFile = open('meetingminutes.pdf', 'rb')
pdfReader = PyPDF2.PdfFileReader(minutesFile)
page = pdfReader.getPage(0)
page.rotateClockwise(90)

pdfWriter = PyPDF2.PdfFileWriter()
pdfWriter.addPage(page)
resultPdfFile = open('rotatedPage.pdf', 'wb')
pdfWriter.write(resultPdfFile)
minutesFile.close()
resultPdfFile.close()
rotateClockwise()和rotateCounterClockwise()函数可以用旋转文档页面,rotateClockwise()是顺时针rotateCounterClockwise()是逆时针。

叠加页面

import PyPDF2

minutesFile = open('meetingminutes.pdf', 'rb')
pdfReader = PyPDF2.PdfFileReader(minutesFile)
minutesFirstPage = pdfReader.getPage(0)
pdfWatermarkReader = PyPDF2.PdfFileReader(open('watermark.pdf', 'rb'))
minutesFirstPage.mergePage(pdfWatermarkReader.getPage(0))

pdfWriter = PyPDF2.PdfFileWriter()
pdfWriter.addPage(minutesFirstPage)

for pageNum in range(1, pdfReader.numPages):
    pageObj = pdfReader.getPage(pageNum)
    pdfWriter.addPage(pageObj)

resultPdfFile = open('watermarkedCover.pdf', 'wb')
pdfWriter.write(resultPdfFile)
minutesFile.close()
resultPdfFile.close()
mergePage()函数:将两张PDF页面合并到一起,传入的参数的PDF文档一般是公司的标志等等。

加密PDF

import PyPDF2

pdfFile = open('meetingminutes.pdf', 'rb')
pdfReader = PyPDF2.PdfFileReader(pdfFile)
pdfWriter = PyPDF2.PdfFileWriter()

for pageNum in range(pdfReader.numPages):
    pdfWriter.addPage(pdfReader.getPage(pageNum))

pdfWriter.encrypt('swordfish')
resultPdf = open('encryptedminutes.pdf', 'wb')
pdfWriter.write(resultPdf)
pdfFile.close()
resultPdf.close()

encrypt()函数:传入字符串,将字符串作为文件的加密口令

15.2:项目:从多个PDF中合并选择的页面

第一步:找到所有PDF

第二步:打开每个PDF文档

第三步:添加每一页

第四步:保存结果

import PyPDF2, os

pdfFiles = []
for filename in os.listdir('.'):
    if filename.endswith('.pdf'):
        pdfFiles.append(filename)
pdfFiles.sort(key=str.lower)
pdfWriter = PyPDF2.PdfFileWriter()

for filename in pdfFiles:
    pdfFileObj = open(filename, 'rb')
    pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
    if not pdfReader.isEncrypted:
        for pageNum in range(1, pdfReader.numPages):
            pageObj = pdfReader.getPage(pageNum)
            pdfWriter.addPage(pageObj)
    pdfFileObj.close()

pdfOutput = open('allminutes.pdf', 'wb')
pdfWriter.write(pdfOutput)
pdfOutput.close()

15.3:Word文档

安装python-docx模块

pip install --user -U python-docx

?注意要安装python-docx而不是docx,但在导入时需要执行import docx

15.3.1:读取Word文档

import docx

doc = docx.Document('demo.docx')
print(len(doc.paragraphs))
print(doc.paragraphs[0].text)
print(len(doc.paragraphs[1].runs))
print(doc.paragraphs[1].runs[0].text)
Document:表示整个文档
paragraphs:表示文档中的段落
runs:每个paragraphs对象都至少包含一个Run对象的列表,它表示一段样式相同的数据

15.6.2:从docx文档中取出完整的文本

import docx

doc = docx.Document('demo.docx')
fullText = []
for para in doc.paragraphs:
    fullText.append(para.text)
print('\n'.join(fullText))

15.3.3:设置Paragraph和Run样式

对Paragraph设置样应该使用:Paragraph[**].style = '? ** '

对Run设置runs[**].style = ' ** '

15.3.4:创建带有非默认样式的Word文档

15.3.5:Run属性

属性描述
bold文本以粗体出现
italic文本以斜体出现
underlin文本带下划线
strike文本带删除线
double_strike文本带双删除线
all_caps文本以大写字母出现
small_caps文本以大写字母出现,但大小与小写字母一样
shadow文本带阴影
outline文本以轮廓线出现,而不是以实心出现
rtl文本从右到左书写
imprint文本以刻入页面的方式出现
emboss文本以凹出页面的方式出现
import docx

doc = docx.Document('demo.docx')
print(doc.paragraphs[0].text)

doc.paragraphs[0].style = 'Normal'
doc.paragraphs[1].runs[0].style = 'QuoteChar'
doc.paragraphs[1].runs[1].underline = True

doc.save('restyled.docx')

15.3.6:写入Word文档

import docx

doc = docx.Document()
doc.add_paragraph('Hello World')
paraObj1 = doc.add_paragraph('This is a second paragraphs.')
paraObj2 = doc.add_paragraph('This is a yet another paragraphs.')
paraObj1.add_run('This text is being added to the second paragraphs.')

doc.save('multipleParagraphs.docx')
add_paragraph()函数将一段新文本添加到文档中,只能添加到文档末尾。
add_run()函数:将一段文本添加到paragraph对象中,只能添加在paragraph对象末尾。

15.3.7:添加标题

import docx

doc = docx.Document()
doc.add_heading('Header 0', 0)
doc.add_heading('Header 1', 1)
doc.add_heading('Header 2', 2)
doc.add_heading('Header 3', 3)
doc.add_heading('Header 4', 4)
doc.save('headings.docx')

add_heading()函数添加一个段落,并使用一种标题样式,参数是一个标题文本的字符串和一个0到4的整数

15.3.8:添加换行符和换页符

import docx
from docx import Document

doc = docx.Document()
doc.add_paragraph('This is on the first page!')
doc.add_page_break()
doc.add_paragraph('This is on the second page!')
doc.save('twoPage.docx')

add_page_break()函数:添加换页符

15.3.9:添加图像

import docx

doc = docx.Document()
doc.add_paragraph('This is cat')
doc.add_picture('zophie.png')
doc.save('twoPage.docx')

add_picture()函数可以在文档末尾添加图像,可选的width和height关键参数设置图像在文档的宽度和高度

15.4:从Word文档中创建PDF

pip install --user --U pywin32==224

?比较高的版本安装不了需要下载后导入

import docx
import win32.client

wordFilename = 'your_word_document.docx'
pdfFilename = 'your_pdf_filename.pdf'

doc = docx.Document()
doc.save(wordFilename)

wdFormatPDF = 17
wordObj = win32com.client.Dispatch('Word.Application')
docObj = wordObj.Documents.Open(wordFilename)
docObj.SaveAs(pdfFilename, FileFormat=wdFormatPDF)
docObj.Close()
wordObj.Quit()

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-08-03 11:08:04  更:2021-08-03 11:09:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/25 14:54:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计