• 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("
    转换为图片",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("
    转换为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("
    转换完成!")
    

    当然如果使用图片转PDF时的图片类型不是 .png 的话,可以修改 getimgfile 中的文件类型 file_type

    任世事无常,勿忘初心
  • 相关阅读:
    Echarts——一个简单的嵌套饼图
    Gephi——使用map of countries和Geo Layout实现包含地理坐标的数据可视化
    PMP知识点(五)——资源管理表示方法
    Python——LOL官方商城皮肤信息爬取(一次练手)
    Python——一个简单的进度条的实现
    Python——阶段总结(一)
    PMP知识点(六)——项目经理权利类型
    PMP知识点(五)——配置管理
    Python——使用高德API获取指定城指定类别POI并实现XLSX文件合并
    PMP知识点(一)——风险登记册
  • 原文地址:https://www.cnblogs.com/FlameBlog/p/14714819.html
Copyright © 2020-2023  润新知