2025年4月15日 星期二 乙巳(蛇)年 正月十六 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > Python

Python实现PDF和图片互转

时间:08-24来源:作者:点击数:50
城东书院 www.cdsy.xyz
python实现高质量PDF转PNG

需要的库:traits

  • pip install traits‑5.2.0‑cp37‑cp37m‑win_amd64.whl

注意,fitz要先在下面的网址下载

https://www.lfd.uci.edu/~gohlke/pythonlibs/#traits​www.lfd.uci.edu

fitz

  • pip install fitz

PyMuPDF

  • pip install PyMuPDF
  • 代码
  • # -*- coding;utf-8 -*-
  • import fitz
  • '''
  • # 将PDF转化为图片
  • pdfPath pdf文件的路径
  • imgPath 图像要保存的文件夹
  • zoom_x x方向的缩放系数
  • zoom_y y方向的缩放系数
  • rotation_angle 旋转角度
  • zoom_x和zoom_y一般取相同值,值越大,图像分辨率越高。
  • '''
  • def pdf_image(pdfPath, imgPath, zoom_x=5, zoom_y=5, rotation_angle=0):
  • # 打开PDF文件
  • pdf = fitz.open(pdfPath)
  • page_count=pdf.pageCount
  • # 逐页读取PDF
  • for pg in range(0, page_count):
  • page = pdf[pg]
  • # 设置缩放和旋转系数
  • trans = fitz.Matrix(zoom_x, zoom_y).preRotate(rotation_angle)
  • pm = page.getPixmap(matrix=trans, alpha=False)
  • # 开始写图像
  • pm.writePNG(imgPath + str(pg) + ".jpg")
  • pdf.close()
  • if __name__ == '__main__':
  • pdf_image(r"./P26.pdf", r"./pdf2pic/", 5, 5, 0)

zoom_x和zoom_y一般取相同值,值越大,图像分辨率越高。

python大法确实好,但是Adobe Acrobat DC更好,安装了破解版Adobe Acrobat DC,发现其处理PDF功能真强大,分享给大家:

链接: https://pan.baidu.com/s/1YdyeUv43WUmlKR9SVrPSkQ 提取码: gw87

PNG转PDF
  • # -*- coding;utf-8 -*-
  • import glob,fitz,os
  • '''图片合并为 PDF 文件
  • 将所需合并的图片放置与文件夹 pic2pdf 中
  • '''
  • #多张图片转pdf
  • def pic2pdf():
  • doc = fitz.open()
  • for img in sorted(glob.glob("pic2pdf/*")): # 读取图片,确保按文件名排序
  • print(img)
  • imgdoc = fitz.open(img) # 打开图片
  • pdfbytes = imgdoc.convertToPDF() # 使用图片创建单页的 PDF
  • imgpdf = fitz.open("pdf", pdfbytes)
  • doc.insertPDF(imgpdf) # 将当前页插入文档
  • if os.path.exists("allimages.pdf"):
  • os.remove("allimages.pdf")
  • doc.save("allimages.pdf") # 保存pdf文件
  • doc.close()
  • #单张图片转pdf
  • def convert_to_pdf1(im_name,pdf_name):
  • # pip install reportlab
  • from reportlab.pdfgen import canvas
  • import io
  • from reportlab.lib.pagesizes import A4, landscape,B0
  • (w, h) = landscape(B0)
  • with open(pdf_name,'wb') as f:
  • c = canvas.Canvas(f,pagesize=B0)
  • c.drawImage(im_name,0,0)
  • c.showPage()
  • c.save()
  • if __name__ == '__main__':
  • pic2pdf()
  • convert_to_pdf1('./pic2pdf/0.jpg','./pic2pdf/0.pdf')
Wand将PDF转换成图片(运行报错后续再看)

wand是包装接口(bindings),而实际进行转换的工具是ImageMagick.

Wind官网:http://docs.wand-py.org/en/0.5.6/

ImageMagick: https://imagemagick.org/script/download.php#windows

  • from wand.image import Image
  • filename="somefile.pdf"
  • with(Image(filename=filename, resolution=120)) as source:
  • images = source.sequence
  • pages = len(images)
  • for i in range(pages):
  • n = i + 1
  • newfilename = filename[:-4] + str(n) + '.jpeg'
  • Image(images[i]).save(filename=newfilename)
  • from wand.image import Image
  • with Image(filename='./P26.pdf') as img:
  • with img.convert('jpg') as converted:
  • converted.save(filename='./image.jpg')

这种方法底层也是调用了Magick库,如果没有安装的话,在import Color时则会抛出异常,异常信息中会给出下载地址,记得选择与Python版本相同的第三方库进行下载安装。

下载地址:http://docs.wand-py.org/en/latest/guide/install.html#install-imagemagick-on-windows

这种方法可以实现转换,但是问题是这种方法所得出的图片都是A4大小的,也就是595*842。如果使用市面上的PDF转换器所得到的图片,是2482*3506大小的,也就是说比我们自己写代码得出的图片要清晰很多,倘若我们将得到的图片再转回成pdf,得到的pdf文件明显模糊不清,干扰阅读。

城东书院 www.cdsy.xyz
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐