文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python对PDF文件的常用操作方法有哪些

2023-06-30 16:05

关注

这篇文章主要介绍“Python对PDF文件的常用操作方法有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python对PDF文件的常用操作方法有哪些”文章能帮助大家解决问题。

工具

python3.7

Pycharm

PDF

PyPDF2

reportlab

从PDF中提取文本

PyPDF2没有办法从PDF文档中提取图像、图表或其他媒体,但它可以提取文本,并将其返回为Python字符串。

import PyPDF2reader = PyPDF2.PdfFileReader('test.pdf')page = reader.getPage(0)print(page.extractText())

旋转和叠加页面

上面的代码中通过创建PdfFileReader对象的方式来读取PDF文档,该对象的getPage方法可以获得PDF文档的指定页并得到一个PageObject对象,通过PageObject对象的rotateClockwise和rotateCounterClockwise方法可以实现页面的顺时针和逆时针方向旋转,通过PageObject对象的addBlankPage方法可以添加一个新的空白页,代码如下所示。

import PyPDF2from PyPDF2.pdf import PageObject# 创建一个读PDF文件的Reader对象reader = PyPDF2.PdfFileReader('resources/xxx.pdf')# 创建一个写PDF文件的Writer对象writer = PyPDF2.PdfFileWriter()# 对PDF文件所有页进行循环遍历for page_num in range(reader.numPages):    # 获取指定页码的Page对象    current_page = reader.getPage(page_num)  # type: PageObject    if page_num % 2 == 0:        # 奇数页顺时针旋转90度        current_page.rotateClockwise(90)    else:        # 偶数页反时针旋转90度        current_page.rotateCounterClockwise(90)    writer.addPage(current_page)# 最后添加一个空白页并旋转90度page = writer.addBlankPage()  # type: PageObjectpage.rotateClockwise(90)# 通过Writer对象的write方法将PDF写入文件with open('resources/xxx.pdf', 'wb') as file:    writer.write(file)

加密PDF文件

使用PyPDF2中的PdfFileWrite对象可以为PDF文档加密,如果需要给一系列的PDF文档设置统一的访问口令,使用Python程序来处理就会非常的方便。

import PyPDF2reader = PyPDF2.PdfFileReader('resources/XGBoost.pdf')writer = PyPDF2.PdfFileWriter()for page_num in range(reader.numPages):    writer.addPage(reader.getPage(page_num))# 通过encrypt方法加密PDF文件,方法的参数就是设置的密码writer.encrypt('foobared')with open('resources/XGBoost-encrypted.pdf', 'wb') as file:    writer.write(file)

创建PDF文件

创建PDF文档需要三方库reportlab的支持,使用 pip install reportlab 命令安装

from reportlab.lib.pagesizes import A4from reportlab.pdfbase import pdfmetricsfrom reportlab.pdfbase.ttfonts import TTFontfrom reportlab.pdfgen import canvaspdf_canvas = canvas.Canvas('resources/python创建.pdf', pagesize=A4)width, height = A4# 绘图image = canvas.ImageReader('resources/xxx.jpg')pdf_canvas.drawImage(image, 20, height - 395, 250, 375)# 显示当前页pdf_canvas.showPage()# 注册字体文件pdfmetrics.registerFont(TTFont('Font1', 'resources/fonts/Vera.ttf'))pdfmetrics.registerFont(TTFont('Font2', 'resources/fonts/青呱石头体.ttf'))# 写字pdf_canvas.setFont('Font2', 40)pdf_canvas.setFillColorRGB(0.9, 0.5, 0.3, 1)pdf_canvas.drawString(width // 2 - 120, height // 2, '你好,世界!')pdf_canvas.setFont('Font1', 40)pdf_canvas.setFillColorRGB(0, 1, 0, 0.5)pdf_canvas.rotate(18)pdf_canvas.drawString(250, 250, 'hello, world!')# 保存pdf_canvas.save()

补充

合并PDF

from PyPDF2 import PdfFileReader, PdfFileWriterdef merge_pdfs(paths, output): pdf_writer = PdfFileWriter() for path in paths:  pdf_reader = PdfFileReader(path)  for page in range(pdf_reader.getNumPages()):   # 将每页添加到writer对象   pdf_writer.addPage(pdf_reader.getPage(page)) # 写入合并的pdf with open(output, 'wb') as out:  pdf_writer.write(out)if __name__ == '__main__': paths = ['document1.pdf', 'document2.pdf'] merge_pdfs(paths, output='merged.pdf')

添加水印

from PyPDF2 import PdfFileWriter, PdfFileReaderdef create_watermark(input_pdf, output, watermark): watermark_obj = PdfFileReader(watermark) watermark_page = watermark_obj.getPage(0) pdf_reader = PdfFileReader(input_pdf) pdf_writer = PdfFileWriter() # 给所有页面添加水印 for page in range(pdf_reader.getNumPages()):  page = pdf_reader.getPage(page)  page.mergePage(watermark_page)  pdf_writer.addPage(page) with open(output, 'wb') as out:  pdf_writer.write(out)if __name__ == '__main__': create_watermark(  input_pdf='Jupyter_Notebook_An_Introduction.pdf',    output='watermarked_notebook.pdf',  watermark='watermark.pdf')

关于“Python对PDF文件的常用操作方法有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网行业资讯频道,小编每天都会为大家更新不同的知识点。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯