python 处理PDF文件

python PDF 文档转图片

"""
将PDF文档每一页提取为图片
"""
import fitz
import os


def mkdir(path):
    if not os.path.exists(path):
        os.makedirs(path)
    else:
        return


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


def pdf_image(pdfPath, imgPath, zoom_x, zoom_y):
    """
    :param pdfPath: pdf文件的路径
    :param imgPath: 图像要保存的文件夹
    :param zoom_x: 横方向的缩放系数
    :param zoom_y: 纵方向的缩放系数
    :return: None
    """
    # 打开PDF文件
    pdf = fitz.open(pdfPath)
    name = get_filename(pdfPath)
    # 逐页读取PDF
    for page_num in range(0, pdf.pageCount):
        page_obj = pdf[page_num]
        # 设置缩放
        trans = fitz.Matrix(zoom_x, zoom_y)
        pm = page_obj.getPixmap(matrix=trans, alpha=False)
        # 每个PDF文件的图片放在一个文件夹
        mkdir(imgPath + name)
        # 转图片
        pm.writePNG(imgPath + name + '/' + str(page_num + 1) + ".png")
    pdf.close()


def get_all_filepath(file_dir=r'pdfs/'):
    """拿到每个文件的文件路径"""
    for items in os.walk(file_dir, topdown=False):
        return [file_dir+file_name for file_name in items[2]]


def get_image():
    """循环得到每个PDF自己的图片"""
    for file_path in get_all_filepath():
        pdf_image(file_path, r"images/", 3, 3)


if __name__ == '__main__':
    get_image()

复制PDF文档并加密

"""
复制PDF文档 PDF文档加密
"""
import PyPDF2

from PyPDF2.pdf import PageObject

reader = PyPDF2.PdfFileReader('resources/XGBoost.pdf')
writer = PyPDF2.PdfFileWriter()
for page_num in range(reader.getNumPages()):
    page_odj = reader.getPage(page_num)  # type: PageObject
    # page_odj.rotateClockwise(0)  # 设置旋转度数
    writer.addPage(page_odj)
    # writer.addBlankPage()  # 添加空白页
writer.encrypt('123456')  # 添加密码(加密)

with open('resources/new_XGBoost.pdf', 'wb') as file:
    writer.write(file)

为PDF文档添加水印

"""
PDF文档添加水印
"""
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()):
    # 将水印页合并到现有的pdf文件的页面上
    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)

创建自定义的PDF水印文件

"""
创建自定义的水印PDF文件
"""
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('demo.pdf', pagesize=A4)
width, height = A4
print(width, height)

# 显示当前页
# pdf_canvas.showPage()

# 注册字体文件 - 可以使用你自己的字体文件
pdfmetrics.registerFont(TTFont('Font1', 'fonts/Action.ttf'))
pdfmetrics.registerFont(TTFont('Font2', '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.showPage()

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()
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

azured_xu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值