Python 實現 PDF轉圖片 & 圖片轉PDF


這里使用了三個工具包分別為 PyMuPDFreportlab 以及 PIL,所以這三個工具包需要提前安裝,但是注意不要使用 pip install fitz 安裝 fitz,因為這里使用的 fitzPyMuPDF 里的,如果再安裝 fitz, 會因為命名沖突導致調用失敗。

首先是庫的導入:

import os
import sys
import fitz
from reportlab.lib.pagesizes import portrait
from reportlab.pdfgen import canvas
from PIL import Image

先進行 PDF 轉圖片的操作,使用 fitz 打開后縮放保存:

def pdf2img(filename=r'./document.pdf'):
	#  打開PDF文件,生成一個對象
	doc = fitz.open(filename)
	print("共",doc.pageCount,"頁")
	for pg in range(doc.pageCount):
		print("\r轉換為圖片",pg+1,"/",doc.pageCount,end="")
		page = doc[pg]
		rotate = int(0)
		# 每個尺寸的縮放系數為8,這將為我們生成分辨率提高64倍的圖像。
		zoom_x = 8.0
		zoom_y = 8.0
		trans = fitz.Matrix(zoom_x, zoom_y).preRotate(rotate)
		pm = page.getPixmap(matrix=trans, alpha=False)
		pm.writePNG(r'./tu'+'{:02}.png' .format(pg))
	print()

然后是圖片轉 PDF ,使用 PIL.Image 獲取圖片大小后使用 reportlab.pdfgen.canvas 保存為 PDF:

def getimgfile(input_paths, file_type=".png"):
	pathDir =  os.listdir(input_paths)
	imglist = list()
	for i in pathDir:
		if file_type in i:
			imglist.append(i)
	return imglist

def imgtopdf(input_paths="./", outputpath="./docimg.pdf", file_type=".png"):
	imglist = getimgfile(input_paths, file_type)
	(maxw, maxh) = Image.open(imglist[0]).size
	c = canvas.Canvas(outputpath, pagesize=portrait((maxw, maxh)))
	for i in range(len(imglist)):
		print("\r轉換為PDF",i+1,"/",len(imglist),end="")
		c.drawImage(imglist[i], 0, 0, maxw, maxh)
		c.showPage()
		os.remove(imglist[i])
	c.save()

最后使用一下語句便可實現轉換:

if __name__ == "__main__":
	pdf2img(filename=r'./document.pdf')
	imgtopdf(input_paths="./", outputpath="./docimg.pdf", file_type=".png")
	print("\n轉換完成!")

當然如果使用圖片轉PDF時的圖片類型不是 .png 的話,可以修改 getimgfile 中的文件類型 file_type


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM