python压缩pdf(指定缩放比例)

python压缩pdf(指定缩放比例)

原理

pdf文件处理使用https://pymupdf.readthedocs.io/en/latest/index.html库可以轻松实现,该库的官方说明文档见
https://pymupdf.readthedocs.io/en/latest/index.html

之前博主在[https://blog.csdn.net/qq_41280654/article/details/117770187]{Python实现PDF文件压缩}中介绍的方法是pdf转jpg图片,压缩jpg图片后转pdf。

安装PyMuPDF库

在[https://blog.csdn.net/qq_41280654/article/details/117770187]{Python实现PDF文件压缩}给出了python脚本,但是由于PyMuPDF版本不同出现了很多报错。我将其中的函数进行了一些修改,可以成功跑通。

首先安装最新版的pymupdf

pip install pymupdf=1.20.2

pdf任意比例压缩或放大

注意需要在运行前修改三个参数,并且在zoom指定放大或缩小的比例。

import fitz
import os

def covert2pic(zoom):
	if os.path.exists('.pdf'):
		os.removedirs('.pdf')
	os.mkdir('.pdf')
	for pg in range(totaling):
		page  = doc.load_page(pg)
		zoom  = int(zoom)
		lurl  = '.pdf/%s.png' % str(pg+1)
		trans = fitz.Matrix(zoom/100.0,zoom/100.0)
		pm    = page.get_pixmap(matrix=trans,alpha=False)
		pm.save(lurl)
		print(page)
	doc.close()

def pic2pdf(obj):
	doc = fitz.open()
	for pg in range(totaling):
		img      = '.pdf/%s.png' % str(pg+1)
		imgdoc   = fitz.open(img)
		pdfbytes = imgdoc.convert_to_pdf()
		imgpdf   = fitz.open("pdf",pdfbytes)
		os.remove(img)
		doc.insert_pdf(imgpdf)
	if os.path.exists(obj):
		os.remove(obj)
	doc.save(obj)
	doc.close()

def pdfz(sor,obj,zoom):
	covert2pic(zoom)
	pic2pdf(obj)

if __name__ == "__main__":
# ===============================================
# 运行前修改以下三个参数
	zoom = 100 #50代表缩小50%,200代表放大200%,100代表既不放大也不缩小
	sor  = "Input.pdf" #输入文件名
	obj  = "Input_Compressed.pdf" #输出文件名 
# ===============================================
	doc  = fitz.open(sor)
	totaling = doc.page_count
	pdfz(sor,obj,zoom)
	os.removedirs('.pdf')

posted @ 2022-08-30 15:40  Philbert  阅读(3132)  评论(2编辑  收藏  举报