栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python第二阶段学习总结

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python第二阶段学习总结

【第23天】Python第二阶段学习总结 2021/10/20 一. Python操作PDF文件 1. 抽取文字

如果要从PDF文件中抽取中文,建议直接使用光学文字识别(OCR)

安装三方库:pip install easyocr

import PyPDF2
from PyPDF2.pdf import PageObject

reader = PyPDF2.PdfFileReader('resources/XGBoost.pdf')
page = reader.getPage(0)  # type: PageObject
print(page.extractText())
2. 将PDF转成JPG图片

安装三方库:pip install fitz

import fitz
import os.path


def get_filename(file_path):
    """获取不带路径和后缀的文件名
    :param file_path: 文件路径
    :return: 文件名
    """
    
    # 拆分路径和文件名
    _, fullname = os.path.split(file_path)
    # 拆分文件名和后缀
    filename, _ = os.path.splitext(fullname)
    return filename


def pdf_image(pdf_file, img_path, zoom_x=4, zoom_y=4, rotation_angle=0):
    """将PDF文件转成PNG图片
    :param pdf_file: PDF文件路径
    :param img_path: 保存图片的路径
    :param zoom_x: 缩放比例(横向)
    :param zoom_y: 缩放比例(纵向)
    :param rotation_angle: 旋转角度
    """
    # 打开PDF文件
    pdf = fitz.open(pdf_file)
    # 逐页读取PDF
    for page_num in range(pdf.pageCount):
        page_obj = pdf[page_num]
        # 创建用于图像变换的矩阵
        trans = fitz.Matrix(zoom_x, zoom_y).preRotate(rotation_angle)
        # 将PDF页面处理成图像
        pm = page_obj.getPixmap(matrix=trans, alpha=False)
        temp = get_filename(pdf_file)
        pm.writePNG(f'{img_path}{temp}_{page_num + 1}.png')
    pdf.close()


def main():
    if not os.path.exists('resources/images/'):
        os.makedirs('resources/images/')
    pdf_image('resources/XGBoost.pdf', 'resources/images/')
    
if __name__ == '__main__':
    main()

3. 旋转和叠加页面
import PyPDF2
from PyPDF2.pdf import PageObject

reader = PyPDF2.PdfFileReader('resources/XGBoost.pdf')
writer = PyPDF2.PdfFileWriter()
for page_num in range(reader.getNumPages()):
    # 读取原文件
    page_obj = reader.getPage(page_num)  # type:PageObject
    page_obj.rotateClockwise(90)
    # 写入新文件
    writer.addPage(page_obj)
    blank_page = writer.addBlankPage()  # type:PageObject
    blank_page.rotateClockwise(90)

with open('resources/XGBoost_modified.pdf', 'wb') as file:
    writer.write(file)
4. 加密PDF文件
writer.encrypt('python')
5. 添加水印
import PyPDF2
from PyPDF2.pdf import PageObject

reader = PyPDF2.PdfFileReader('resources/watermark.pdf')
wm_page = reader.getPage(0)

reader = PyPDF2.PdfFileReader('resources/XGBoost.pdf')
writer = PyPDF2.PdfFileWriter()
for page_num in range(reader.getNumPages()):
    # 读取原文件
    page_obj = reader.getPage(page_num)  # type:PageObject
    page_obj.mergePage(wm_page)
    writer.addPage(page_obj)

with open('resources/XGBoost_watermarked.pdf', 'wb') as file:
    writer.write(file)
from reportlab.lib.pagesizes import A4
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.pdfgen import canvas

pdf_canvas = canvas.Canvas('resources/demo.pdf', pagesize=A4)
width, height = A4

# 绘图
image = canvas.ImageReader('resources/guido.jpg')
pdf_canvas.drawImage(image, 20, height - 395, 250, 375)

# 显示当前页
pdf_canvas.showPage()

# 注册字体文件
pdfmetrics.registerFont(TTFont('Font1', 'resources/fonts/Action.ttf'))
pdfmetrics.registerFont(TTFont('Font2', 'resources/fonts/青呱石头体.ttf'))

# 写字
pdf_canvas.setFont('Font2', 40)
pdf_canvas.setFillColorRGB(0.9, 0.5, 0.3, 1)   # 前面三个参数是电脑三原色,最后一个参数0-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()
import os

# 列出所有文件和文件夹
for file in os.listdir():
    # 判断是否是文件夹
    if os.path.isdir(file):     # isfile 是否是文件
        print(os.listdir(file))
    else:
        _, suffix = os.path.splitext(file)
        print(file, suffix)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/339630.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号