Python实现图片与PDF互相转换

编程入门 行业动态 更新时间:2024-10-09 03:22:44

Python实现<a href=https://www.elefans.com/category/jswz/34/1770705.html style=图片与PDF互相转换"/>

Python实现图片与PDF互相转换

目录

    • 图片转PDF
      • 文件夹所有图片转为1个PDF
      • 文件夹指定图片转为1个PDF
      • 文件夹所有图片分别转为PDF
      • 举例
    • PDF转图片
      • 指定PDF转为图片
      • 文件夹所有PDF转为图片
      • 举例

图片转PDF

之前的一篇博客《Python合并拼接图片》,可对图片进行合并拼接
使用前需要安装PyMuPDF库,以下代码使用的PyMuPDF(1.23.6),以及自然排序库natsort(8.4.0)

文件夹所有图片转为1个PDF

import fitz
from glob import glob
from natsort import natsorteddef img2pdf_1(img_path, pdf_path, pdf_name):"""将文件夹中所有格式图片全部转换为一个指定名称的pdf文件,并保存至指定文件夹:param str img_path: 待转换图片所在文件夹:param str pdf_path: 转换后PDF保存文件夹:param str pdf_name: 转换后PDF文件名,不含扩展名"""doc = fitz.open()filepath = []for x in [r'\*.jpg', r'\*.png']:  # 获取所有格式的图片filepath.extend(glob(img_path + x))  # 将列表元素追加到列表中for img in natsorted(filepath):  # 读取图片,确保按文件名按自然排序imgdoc = fitz.open(img)                 # 打开图片pdfbytes = imgdoc.convert_to_pdf()      # 使用图片创建单页的 PDFimgpdf = fitz.open('pdf', pdfbytes)doc.insert_pdf(imgpdf)                  # 将当前页插入文档doc.save(pdf_path + '\\' + pdf_name + '.pdf')  # 保存pdf文件doc.close()print('转换完成')

文件夹指定图片转为1个PDF

import fitz
from natsort import natsorteddef img2pdf_2(img_path, pdf_path, img_list, pdf_name):"""将文件夹中指定1个或多个图片转换为1个指定名称的pdf文件,并保存至指定文件夹:param str img_path: 待转换图片所在文件夹:param str pdf_path: 转换后PDF保存文件夹:param str img_list: 指定的图片文件名,含扩展名:param str pdf_name: 转换后PDF文件名,不含扩展名"""doc = fitz.open()pic_list = [img_path + '\\' + i for i in img_list]for img in natsorted(pic_list):  # 读取图片列表,确保按文件名排序imgdoc = fitz.open(img)pdfbytes = imgdoc.convert_to_pdf()imgpdf = fitz.open('pdf', pdfbytes)doc.insert_pdf(imgpdf)doc.save(pdf_path + '\\' + pdf_name + '.pdf')doc.close()print('转换完成')

文件夹所有图片分别转为PDF

import fitz
from glob import glob
from natsort import natsorted
import os.pathdef img2pdf_3(img_path, pdf_path):"""将文件夹中所有jpg图片分别转换为同一名称的pdf文件,并保存至指定文件夹:param str img_path: 待转换图片所在文件夹:param str pdf_path: 转换后PDF保存文件夹"""filepath = []for x in [r'\*.jpg', r'\*.png']:  # 获取所有格式的图片filepath.extend(glob(img_path + x))  # 将列表元素追加到列表中for img in filepath:  # 读取图片img_type = os.path.splitext(img)[1]  # 获取图片格式,splitext分割文件路径名和扩展名file_name = os.path.basename(img).replace(img_type, '.pdf')  # 获取不含路径文件名,替换为pdf后缀名doc = fitz.open()imgdoc = fitz.open(img)pdfbytes = imgdoc.convert_to_pdf()imgpdf = fitz.open('pdf', pdfbytes)doc.insert_pdf(imgpdf)doc.save(pdf_path + '\\' + file_name)doc.close()print('转换完成')

举例

if __name__ == '__main__':img_path = r'E:\测试\jpg\五共'pdf_path = r'E:\测试\jpg\五共'img_list = ['青瓦台是黑社会老巢吗.jpg', '天无二日,只有总统一个太阳.jpg']img2pdf_1(img_path, pdf_path, '全部图片')img2pdf_2(img_path, pdf_path, img_list, '2张图片')img2pdf_3(img_path, pdf_path)

对《Python合并拼接图片》中同样的18张图片进行转换,转换前

img2pdf_1转换结果

img2pdf_2转换结果

img2pdf_3转换结果,以及前2个的转换结果(选中)

PDF转图片

使用前需要安装PyMuPDF库,以下代码使用的PyMuPDF(1.23.6)

指定PDF转为图片

import fitz
import os.pathdef pdf2png1(filename, outpath, zoom_x=1.25, zoom_y=1.25):"""指定PDF文件转换为图片,并保存至指定文件夹:param str filename: 待转换的PDF文件,文件名含路径:param str outpath: 转换后图片保存文件夹:param int zoom_x: 图片横向缩放比例:param int zoom_y: 图片纵向缩放比例"""save_name = os.path.basename(filename).replace('.pdf', '')  # 获取不含路径文件名save_name = outpath + '\\' + save_namedoc = fitz.open(filename)  # 打开PDF文件,生成一个对象rotate = int(0)  # 设置图片的旋转角度,顺时针度数trans = fitz.Matrix(zoom_x, zoom_y).prerotate(rotate)for pg in range(doc.page_count):page = doc[pg]pm = page.get_pixmap(matrix=trans, alpha=False)if doc.page_count == 1:pm.save(f'{save_name}.png')else:pm.save('{}-{:04d}.png'.format(save_name, pg))doc.close()print('转换完成')

文件夹所有PDF转为图片

import fitz
from glob import glob
import os.pathdef pdf2png2(filepath, outpath, zoom_x=1.25, zoom_y=1.25):"""指定文件夹中所有PDF文件转换为图片,并保存至指定文件夹:param str filepath: 待转换的PDF所在文件夹:param str outpath: 转换后图片保存文件夹:param int zoom_x: 图片横向缩放比例:param int zoom_y: 图片纵向缩放比例"""pdf_list = glob(filepath + r'\*.pdf')for f in pdf_list:save_name = os.path.basename(f).replace('.pdf', '')  # 获取不含路径文件名save_name = outpath + '\\' + save_namedoc = fitz.open(f)rotate = int(0)  # 设置图片的旋转角度trans = fitz.Matrix(zoom_x, zoom_y).prerotate(rotate)for pg in range(doc.page_count):page = doc[pg]pm = page.get_pixmap(matrix=trans, alpha=False)if doc.page_count == 1:pm.save(f'{save_name}.png')else:pm.save('{}-{:04d}.png'.format(save_name, pg))doc.close()print('转换完成')

举例

对上面图片转PDF举例中,图片转换为PDF文件,缩放系数zoom_x和zoom_y设为1.25转换为图片后,分辨率与原始图片差不多

if __name__ == '__main__':filename = r'E:\测试\jpg\五共1\2张图片.pdf'filepath = r'E:\测试\jpg\五共1'#pdf2png1(filename, filepath)pdf2png2(filepath, filepath)

转换前

转换后

更多推荐

Python实现图片与PDF互相转换

本文发布于:2023-11-15 19:43:06,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1605232.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:图片   Python   PDF

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!