当前位置:   article > 正文

Python压缩PDF_python fitz 无损压缩

python fitz 无损压缩

使用fitz模块

fitz模块(PyMuPDF库的一部分),将PDF文件压缩为图片,然后再将图片合并为新的PDF文件。
在运行代码之前,你需要安装PyMuPDF库:

安装PyMuPDF库

pip install PyMuPDF
  • 1

代码示例

import fitz
import os


def convert_to_pic(zoom):
    if os.path.exists('squeeze_pdf\.pdf'):  # 临时文件夹,需要为空
        os.removedirs('squeeze_pdf\.pdf')
    os.mkdir('squeeze_pdf\.pdf')
    for pg in range(totaling):
        page = doc[pg]
        zoom = int(zoom)  # 值越大,分辨率越高,文件越清晰
        rotate = int(0)
        print(page)
        trans = fitz.Matrix(zoom / 100.0, zoom / 100.0).prerotate(rotate)
        pm = page.get_pixmap(matrix=trans, alpha=False)

        img_path = 'squeeze_pdf\.pdf/%s.jpg' % str(pg + 1)
        pm.save(img_path)  # 保存为图像文件
    doc.close()


def pic_to_pdf(output_path):
    doc = fitz.open()
    for pg in range(totaling):
        img_path = 'squeeze_pdf\.pdf/%s.jpg' % str(pg + 1)
        imgdoc = fitz.open(img_path)  # 打开图片
        # print(dir(imgdoc))
        pdfbytes = imgdoc.convert_to_pdf()  # 使用图片创建单页的PDF
        os.remove(img_path)
        imgpdf = fitz.open("pdf", pdfbytes)
        # print(dir(doc))
        doc.insert_pdf(imgpdf)  # 将当前页插入文档
    if os.path.exists(output_path):  # 若文件存在先删除
        os.remove(output_path)
    doc.save(output_path)  # 保存PDF文件
    doc.close()


def compress_pdf(source_path, output_path, zoom):
    convert_to_pic(zoom)
    pic_to_pdf(output_path)


if __name__ == "__main__":
    source_path = "squeeze_pdf\source.pdf"  # 需要压缩的PDF文件
    output_path = "squeeze_pdf\compressed.pdf"  # 压缩后的PDF文件路径
    doc = fitz.open(source_path)
    totaling = doc.page_count

    zoom = 200  # 清晰度调节,缩放比率
    compress_pdf(source_path, output_path, zoom)
    os.removedirs('squeeze_pdf\.pdf')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52

代码分析

另外,代码中使用了一个.pdf目录来存储临时图片文件,并在压缩完成后将其删除。

你可以将source.pdf替换为要压缩的PDF文件的路径,并将compressed.pdf替换为输出压缩后的PDF文件的路径。同时,你可以调整zoom参数来控制输出图片的清晰度和分辨率

请确保代码所在的目录具有读写权限,并且没有与代码中使用的.pdf同名的文件或目录,以免冲突。

运行代码后,将生成一个压缩后的PDF文件,并且.pdf目录中的临时文件将被清理删除。

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号