您当前的位置:首页 > 计算机 > 编程开发 > Python

Python实现PDF和图片互转

时间:08-24来源:作者:点击数:
城东书院 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
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐