Python对PDF文档和PPT文档的操作详解

 更新时间:2023年12月22日 09:30:05   作者:逃逸的卡路里  
Python办公⾃动化是利⽤Python编程语⾔来创建脚本和程序,以简化、加速和⾃动化⽇常办公任务和⼯作流程的过程,它基于Python的强⼤功能和丰富的第三⽅库,使得能够处理各种办公任务,本文给大家介绍了Python对PDF文档和PPT文档的操作,需要的朋友可以参考下

前言

Python办公⾃动化是利⽤Python编程语⾔来创建脚本和程序,以简化、加速和⾃动化⽇常办公任务和⼯作流程的过程。它基于Python的强⼤功能和丰富的第三⽅库,使得能够处理各种办公任务,如⽂档处理、数据分析、电⼦邮件管理、⽹络通信等等。

一、用Python自动化PDF文档生成

要使⽤Python⾃动化PDF⽂档的⽣成,可以使⽤第三⽅库来创建、编辑和操作PDF⽂件。⼀个常⽤的库是ReportLab,它允许以编程⽅式创建PDF⽂档,并在其中添加⽂本、图像、表格等内容。
其中,Canvas类是ReportLab库中的一个重要类,用于创建和操作PDF文档。它提供了一系列方法和属性,可以在PDF文档中添加文本、图形、图像等内容。

Canvas类的构造函数如下所示:

def __init__(self, filename, pagesize=(595.27,841.89), bottomup=1, pageCompression=0, encoding=rl_config.defaultEncoding, verbosity=0, encrypt=None)

参数说明:

  • filename:生成的PDF文件的名称。
  • pagesize:页面尺寸,默认为A4纸的尺寸。
  • bottomup:页面坐标系的方向,默认为1,表示坐标原点在左下角。
  • pageCompression:页面压缩级别,默认为0,表示不压缩。
  • encoding:文档编码,默认为rl_config.defaultEncoding。
  • verbosity:输出信息的详细程度,默认为0,表示不输出。
  • encrypt:加密选项,默认为None,表示不加密。

Canvas类的常用方法包括:

  • drawString(x, y, text):在指定坐标位置绘制文本。
  • drawImage(image, x, y, width=None, height=None):在指定坐标位置绘制图像。
  • drawRect(x, y, width, height):绘制矩形。
  • drawLine(x1, y1, x2, y2):绘制直线。
  • setFont(fontname, fontsize, leading=None):设置字体和字号。
  • setFillColor(color):设置填充颜色。
  • setStrokeColor(color):设置描边颜色。
  • showPage():保存当前页面并开始新页面。
  • save():保存PDF文档。

下面⼀个基本的⽰例,演⽰如何使⽤ReportLab来⽣成PDF⽂档:

1、安装ReportLab库(如果尚未安装)

pip install reportlab

2、创建⼀个简单的PDF文档

from reportlab.lib.pagesizes import letter
# canvas模块有个Canvas类,是创建PDF文档的入口。通过help函数可以查询它的用法。
from reportlab.pdfgen import canvas  
# 创建⼀个PDF⽂件
c = canvas.Canvas("example.pdf", pagesize=letter)
# 添加⽂本到PDF
c.drawString(100, 750, "Hello, World!")
# 添加图片到pdf
c.drawImage("image.jpg", 200, 200, width=100, height=100)
c.showPage()
# 保存PDF
c.save()

在上述⽰例中,导⼊了ReportLab库,创建了⼀个PDF⽂档对象,然后使⽤ drawString ⽅法在PDF上添加⽂本。最后,保存了⽣成的PDF⽂件。
ReportLab还提供了更复杂的功能,如创建表格、添加图形、⾃定义⻚⾯布局等。可以根据具体的需求进⼀步扩展这个⽰例,以⽣成更复杂的PDF⽂档。
除了ReportLab,还有其他⼀些库,如PDFKit(基于wkhtmltopdf)、FPDF、PyPDF2等,可以⽤于PDF⾃动化⽣成和操作。可以根据项⽬的具体需求选择适合的库来处理PDF⽂档。

以下是一些简单示例,需要的小伙伴可以看下:

  • PDFKit:
import pdfkit

# 将HTML内容转换为PDF
pdfkit.from_file('input.html', 'output.pdf')

# 将URL转换为PDF
pdfkit.from_url('http://example.com', 'output.pdf')

# 将字符串转换为PDF
pdfkit.from_string('Hello, world!', 'output.pdf')
  • FPDF:
from fpdf import FPDF

# 创建PDF对象
pdf = FPDF()

# 添加页面
pdf.add_page()

# 设置字体和字号
pdf.set_font('Arial', size=12)

# 添加文本
pdf.cell(0, 10, 'Hello, world!', ln=True)

# 保存PDF
pdf.output('output.pdf')
  • PyPDF2:
from PyPDF2 import PdfFileReader, PdfFileWriter

# 读取PDF文件
pdf = PdfFileReader('input.pdf')

# 获取页面数量
num_pages = pdf.getNumPages()

# 获取第一页内容
page1 = pdf.getPage(0)

# 旋转页面
page1.rotateClockwise(90)

# 创建新的PDF文件
output_pdf = PdfFileWriter()

# 添加页面
output_pdf.addPage(page1)

# 保存新的PDF文件
with open('output.pdf', 'wb') as f:
    output_pdf.write(f)

二、Python读取PDF文件内容

要在Python中读取PDF⽂件的内容,可以使⽤第三⽅库来解析和提取⽂本信息。⼀种常⽤的库是PyPDF2,它允许从PDF⽂档中提取⽂本、⻚⾯、书签等信息。
下面是⼀个基本⽰例,演⽰如何使⽤PyPDF2来读取PDF⽂件内容:

1、安装PyPDF2库(如果尚未安装)

pip install reportlab

2、读取PDF⽂件内容

代码如下(示例):

import PyPDF2
# 打开PDF⽂件
pdf_file = open('example.pdf', 'rb')
# 创建⼀个PDF⽂件阅读器对象
pdf_reader = PyPDF2.PdfFileReader(pdf_file)
# 获取PDF⽂件的总⻚数
total_pages = pdf_reader.numPages
# 读取每⼀⻚的⽂本内容
for page_num in range(total_pages):
	page = pdf_reader.getPage(page_num)
	page_text = page.extractText()
	print(f"第 {page_num + 1} ⻚内容:")
	print(page_text)
	print("\n")
# 关闭PDF⽂件
pdf_file.close()

在上述⽰例中,⾸先打开了⼀个PDF⽂件,然后创建了⼀个PdfFileReader对象来读取该⽂件。然后,获取PDF⽂件的总⻚数,并使⽤ getPage ⽅法读取每⼀⻚的⽂本内容,最后关闭⽂件。

请注意,PDF⽂本提取可能不总是⾮常精确,特别是对于包含复杂排版、图像或⾃定义字体的PDF⽂件。在处理不同类型的PDF⽂件时,可能需要根据具体情况进⾏⼀些后处理来提⾼⽂本提取的准确性。

除了PyPDF2,还有其他⼀些库,如pdfminer、slate等,也可以⽤于读取PDF⽂件的内容。选择适合需求的库并根据需要处理提取到的⽂本数据。

import slate3k as slate

# 打开PDF文件
with open('example.pdf', 'rb') as pdf_file:
    # 创建PDF解析器对象
    pdf_text = slate.PDF(pdf_file)

# 提取PDF文件的文本内容
text = ' '.join(pdf_text)
print("Text in PDF:", text)

三、Python操作PowerPoint演示文稿

要在Python中操作PowerPoint演⽰⽂稿,可以使⽤第三⽅库 python-pptx 。这个库允许创建、编辑和操作PowerPoint演⽰⽂稿。

先了解下PPT基本结构在python分别是什么含义:

Slide:幻灯片,就是演示文稿中每一页的页面。

Shape:方框,在每页幻灯片内插入的方框,可以是形状,也可以是文本框。

Run:文字块,一般为较少字符。

Paragraph:段落,通常有序号ㆍ、1.等。

以下是⼀些常⻅的操作⽰例:

1、安装 python-pptx 库(如果尚未安装)

pip install python-pptx

使用windows系统,如果出现无法安装情况,可以在cmd模式下输入网址选择国内清华镜像。

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple python-pptx

2、创建⼀个新的PowerPoint演示文稿

from pptx import Presentation
# 创建⼀个新的演⽰⽂稿对象
prs = Presentation()
# 添加⼀张幻灯⽚
slide = prs.slides.add_slide(prs.slide_layouts[0])
# 添加标题和正⽂
title = slide.shapes.title
title.text = "这是标题"
content = slide.shapes.placeholders[1]
content.text = "这是正⽂"
# 保存演⽰⽂稿
prs.save("example.pptx")

3、打开现有的PowerPoint演示文稿并编辑

from pptx import Presentation
# 打开现有的演⽰⽂稿
prs = Presentation("example.pptx")
# 遍历所有幻灯⽚
for slide in prs.slides:
	for shape in slide.shapes:
		if shape.has_text_frame:
		text_frame = shape.text_frame
		for paragraph in text_frame.paragraphs:
			for run in paragraph.runs:
				run.text = run.text.upper() # 将⽂本转换为⼤写
# 保存修改后的演⽰⽂稿
prs.save("modified_example.pptx")

4、插入图片和形状

from pptx import Presentation
from pptx.util import Inches
# 打开现有的演⽰⽂稿
prs = Presentation("example.pptx")
# 添加⼀张幻灯⽚
slide = prs.slides.add_slide(prs.slide_layouts[5])
# 添加图⽚
left = Inches(1)
top = Inches(1)
width = Inches(4)
height = Inches(3)
pic = slide.shapes.add_picture("image.jpg", left, top, width, height)
# 添加形状
left = Inches(5)
top = Inches(1)
width = Inches(2)
height = Inches(2)
shape = slide.shapes.add_shape(1, left, top, width, height)
shape.text = "⾃定义形状"
# 保存修改后的演⽰⽂稿
prs.save("modified_example.pptx")

python-pptx 库提供了丰富的功能,⽤于创建、编辑和操作PowerPoint演⽰⽂稿中的⽂本、图像、形状、表格等。可以根据具体的需求进⼀步扩展这些⽰例,以满⾜的项⽬要求。

总结

以上就是Python对PDF文档和PPT文档的操作详解的详细内容,更多关于Python PDF文档和PPT文档操作的资料请关注脚本之家其它相关文章!

相关文章

  • pycharm中出现no module named xlwt的原因及解决

    pycharm中出现no module named xlwt的原因及解决

    这篇文章主要介绍了pycharm中出现no module named xlwt的原因及解决方案,具有很好的参考价值,希望对大家有所帮助。
    2023-05-05
  • python数据类型强制转换实例详解

    python数据类型强制转换实例详解

    这篇文章主要介绍了python数据类型强制转换实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • Python 中将秒转换为小时、分钟和秒的示例代码

    Python 中将秒转换为小时、分钟和秒的示例代码

    这篇文章主要介绍了在 Python 中将秒转换为小时、分钟和秒,本篇文章将讨论使用 Python 中的四种不同方法来使用、管理秒并将其转换为天、小时、分钟和秒,需要的朋友可以参考下
    2023-05-05
  • 出现module 'queue' has no attribute 'Queue'问题的解决

    出现module 'queue' has no attrib

    这篇文章主要介绍了出现module 'queue' has no attribute 'Queue'问题的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • pycharm 使用心得(三)Hello world!

    pycharm 使用心得(三)Hello world!

    作为PyCharm编辑器的起步,我们理所当然的先写一个Hello word,并运行它。(此文献给对IDE不熟悉的初学者)
    2014-06-06
  • Python可以实现栈的结构吗

    Python可以实现栈的结构吗

    在本篇文章里小编给各位整理的是关于Python实现栈的结构的条件的相关知识点,有需要的朋友们可以学习下。
    2020-05-05
  • Python中http请求方法库汇总

    Python中http请求方法库汇总

    最近在使用python做接口测试,发现python中http请求方法有许多种,今天抽点时间把相关内容整理,对python http请求相关知识感兴趣的朋友一起学习吧
    2016-01-01
  • Python获取当前目录下所有文件的6种方法总结

    Python获取当前目录下所有文件的6种方法总结

    这篇文章主要给大家介绍了关于Python获取当前目录下所有文件的6种方法,要获取当前目录下的所有目录,可以使用Python内置的os模块中的listdir()函数和isdir()函数,需要的朋友可以参考下
    2023-08-08
  • 九个Python列表生成式高频面试题汇总

    九个Python列表生成式高频面试题汇总

    本文为大家整理了九个Python列表生成式的面试题(从简单到困难排序),可以帮助大家提高列表生成式的理解水平,感兴趣的小伙伴可以学习一下
    2022-05-05
  • Python爬虫之必备chardet库

    Python爬虫之必备chardet库

    这篇文章主要介绍了Python爬虫之必备chardet库,文中有非常详细的代码示例,对正在学习python的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04

最新评论