python pdf和图片互转


一、pdf转图片

安装依赖

pip install PyMuPDF==1.18.17

实现

import fitz


def pdf2img(pdf_path, img_dir):
    doc = fitz.open(pdf_path)  # 打开pdf
    for page in doc:  # 遍历pdf的每一页

        zoom_x = 2.0  # 设置每页的水平缩放因子
        zoom_y = 2.0  # 设置每页的垂直缩放因子
        mat = fitz.Matrix(zoom_x, zoom_y)
        pix = page.get_pixmap(matrix=mat)
        pix.save(r"{}page-{}.png".format(img_dir, page.number))     # 保存


if __name__ == '__main__':
	
	# pdf路径
    pdf_path = r"./赵季平影视音乐成功因素分析.pdf"
    # 图片保存位置
    img_dir = r"./img/"
	
	# pdf转图片
    pdf2img(pdf_path, img_dir)

ps:将缩放因子 zoom_x 和 zoom_y 设为 2.0 之后,可以将转换出来的图片大小提高四倍
在这里插入图片描述


二、图片转pdf

方法1(不推荐,需要调用GUI库,体验不好)

安装依赖

pip install PySimpleGUI==4.47.0    

实现

import os, fitz
import PySimpleGUI as psg  # for showing a progress bar


def img2pdf(pdf_path, imgdir):
    doc = fitz.open()  # PDF with the pictures
    imglist = os.listdir(imgdir)  # list of them
    imgcount = len(imglist)  # pic count

    for i, f in enumerate(imglist):
        img = fitz.open(os.path.join(imgdir, f))  # open pic as document
        rect = img[0].rect  # pic dimension
        pdfbytes = img.convert_to_pdf()  # make a PDF stream
        img.close()  # no longer needed
        imgPDF = fitz.open("tar_pdf", pdfbytes)  # open stream as PDF
        page = doc.new_page(width=rect.width,  # new page with ...
                            height=rect.height)  # pic dimension
        page.show_pdf_page(rect, imgPDF, 0)  # image fills the page
        psg.OneLineProgressMeter("Import Images",  # show our progress
                                 i + 1, imgcount)

    doc.save(pdf_path)

def clear_dir(imgdir):
    imglist = os.listdir(imgdir)
    for img in imglist:
        img_path = os.path.join(imgdir, img)
        os.remove(img_path)


if __name__ == '__main__':
	# 图片文件夹路径
    img_dir = r"./img/"
    
    # 要生成的pdf路径
    pdf_path = r"./赵季平影视音乐成功因素分析.pdf"
	
	# 图片转pdf
    img2pdf(pdf_path, img_dir)
	
	# 清空图片
    # clear_dir(img_dir)

ps:其实这个 PyMuPDF 包还有很多功能,具体可以参考官网文档
https://pymupdf.readthedocs.io/en/latest/faq.html#how-to-make-images-from-document-pages


方法2(推荐)

安装依赖

pip install img2pdf

实现

import os 
import img2pdf

def img2pdf_(pdf_path, img_dir):
    try:
        with open(pdf_path, 'wb+') as f:
            img_list =[]
            for img_name in os.listdir(img_dir):
                img_path = os.path.join(img_dir, img_name)
                img_list.append(img_path)
            f.write(img2pdf.convert(img_list))
            print(f"pdf保存成功: {pdf_path}")
    except OSError as err:
        print("OS error: {0}".format(err))


def clear_dir(imgdir):
    imglist = os.listdir(imgdir)
    for img in imglist:
        img_path = os.path.join(imgdir, img)
        os.remove(img_path)


if __name__ == '__main__':
    # 图片文件夹路径
    img_dir = r"../mid_img/"

    # 要生成的pdf路径
    pdf_path = r"./测试.pdf"

    # 图片转pdf
    img2pdf_(pdf_path, img_dir)

	# 清空图片
	# clear_dir(img_dir)


ps:千万注意 自己的方法名不要和包名重复了,方法名方法的文件名 都不要叫 img2pdf,否则会报错

  • 16
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 12
    评论
要在Python中将PDF换为图片,您可以使用pymupdf库。首先,您需要安装pymupdf库并导入所需的模块。然后,您可以使用fitz.open()方法打开PDF文件并创建一个文件对象。接下来,您可以使用for循环遍历每一页,并使用page.getPixmap()方法获取每一页的像素图像。您可以设置图像的分辨率和其他参数。最后,您可以使用pix.writePNG()方法将像素图像保存为PNG格式的图片。下面是一个示例代码: ``` import fitz import re import os def pdf2image(pdf_path, image_dir): pdf = fitz.open(pdf_path) for page_num in range(pdf.pageCount): page = pdf<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [python成功将PDF文件图片,一次成功,不再踩坑!](https://blog.csdn.net/ZhouDevin/article/details/125489011)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Python怎么将pdf图片Python如何实现pdf文件图片](https://blog.csdn.net/Rick_M/article/details/129572194)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

什么都干的派森

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值