吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 9111|回复: 51
收起左侧

[Python 转载] python pdf转图片,图片转pdf[2023-3-26日更新]

   关闭 [复制链接]
sygde 发表于 2022-5-22 16:15
本帖最后由 sygde 于 2023-3-26 19:41 编辑

首先安装两个模块
pip install fitz
pip install Pillow
pip install PyMuPDF

执行代码前,先在执行文件当前目录创建pdf和img两个文件夹
可批量将pdf转为图片文件

pdf转图片文件夹创建

pdf转图片文件夹创建

[Python] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import fitz
import os
'''
# 将PDF转化为图片
pdfPath pdf文件的路径
imgPath 图像要保存的文件夹
zoom_x x方向的缩放系数
zoom_y y方向的缩放系数
rotation_angle 旋转角度
'''
def pdf_image(pdfPath,imgPath,zoom_x,zoom_y,rotation_angle):
    #获取pdf文件名
    files = os.listdir(folder)
    print(files)
    #创建对应pdf文件的img文件夹
     
    #1.设置保存的img文件路径
    #2.获取pdf文件路径
    #3.打开pdf文件
    #4.读取PDF文件
    #5.保存img文件
    for file in files:
        #设置img文件路径
        saveImgPath = imgPath + file[0:-4] + '/'
        #创建对应pdf文件的img文件夹
        isExists=os.path.exists(saveImgPath)
        # 判断结果
        if not isExists:
        # 如果不存在则创建目录
        # 创建目录操作函数
            os.makedirs(saveImgPath)
        #获取pdf文件路径
        pdfPath = folder + file
        # 打开PDF文件
        pdf = fitz.open(pdfPath)
        # 逐页读取PDF
        for pg in range(0, pdf.page_count):
            page = pdf[pg]
            # 设置缩放和旋转系数,zoom_x和zoom_y为缩放倍数
            trans = fitz.Matrix(zoom_x, zoom_y).prerotate(rotation_angle)
            pm = page.get_pixmap(matrix=trans, alpha=False)
            # 开始写图像
            pm.save(saveImgPath+str(pg)+".png")
        pdf.close()
 
curdir = os.path.dirname(__file__)  
folder = curdir + "/pdf/" #生成pdf的文件目录
imgFile = curdir + "/img/" #png图片目录
pdf_image(folder,imgFile,1,1,0)

执行结果

pdf转图片结果

pdf转图片结果

将图片转为pdf,支持png和jpg
如对顺序有要求,可将图片按照顺序改名为从0开始的数字名称。
在执行代码前,先在该目录创建img文件夹,将要转换的图片放到img文件夹当中,转换的pdf文件,会以1.pdf的文件存放在img文件夹当中。

图片转pdf文件夹创建

图片转pdf文件夹创建

[Python] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
from PIL import Image
import os
 
Image.MAX_IMAGE_PIXELS = None
 
def combine2Pdf( folderPath, pdfFilePath ):
    files = os.listdir( folderPath )
    pngFiles = []
    sources = []
    exts = ['png','jpg']
    for file in files:
        for ext in exts:
            if ext in file:
                pngFiles.append( folderPath + file )
    pngFiles.sort()
    output = Image.open( pngFiles[0] )
    pngFiles.pop( 0 )
    for file in pngFiles:
        pngFile = Image.open( file )
        if pngFile.mode == "RGB":
            pngFile = pngFile.convert( "RGB" )
        sources.append( pngFile )
    output.save( pdfFilePath, "pdf", save_all=True, append_images=sources )
 
if __name__ == "__main__":
    curdir = os.path.dirname(__file__)
    # folder = input("请输入图片目录:")
    # pdfFile = input("请输入输出的pdf目录:")   
    folder = curdir + "/img/" #png图片目录
    pdfFile = curdir + "/img/result.pdf" #生成pdf的文件目录
    combine2Pdf( folder, pdfFile )

执行结果

图片转pdf执行结果

图片转pdf执行结果

pdf-img互转.zip (3.22 KB, 下载次数: 707)

免费评分

参与人数 7吾爱币 +12 热心值 +5 收起 理由
jimmyyq + 1 + 1 谢谢@Thanks!
gst + 1 谢谢@Thanks!
hshcompass + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
008xm + 1 + 1 我很赞同!
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
CaptainPRC + 1 谢谢@Thanks!
linil + 1 可用,谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

xizheyb 发表于 2022-5-26 10:48
zhcj66 发表于 2022-5-22 21:16
不知道下面这些错误如何解决

Traceback (most recent call last):

我也出现的这个问题,安装了 pip install PyMuPDF 这个,然后就可以用了,

Deprecation: 'preRotate' removed from class 'Matrix' after v1.19 - use 'prerotate'.
Deprecation: 'getPixmap' removed from class 'Page' after v1.19 - use 'get_pixmap'.
Deprecation: 'writePNG' removed from class 'Pixmap' after v1.19 - use 'save'.

把这几个也换了
zhcj66 发表于 2022-5-22 21:16
不知道下面这些错误如何解决

Traceback (most recent call last):
  File "D:\desk\python\python\lizi\pdf2img.py", line 2, in <module>
    import fitz
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\site-packages\fitz\__init__.py", line 1, in <module>
    from frontend import *
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\site-packages\frontend\__init__.py", line 1, in <module>
    from .events import *
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\site-packages\frontend\events\__init__.py", line 1, in <module>
    from .clipboard import *
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\site-packages\frontend\events\clipboard.py", line 2, in <module>
    from ..dom import Event
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\site-packages\frontend\dom.py", line 439, in <module>
    from . import dispatcher
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\site-packages\frontend\dispatcher.py", line 15, in <module>
    from . import config, server
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\site-packages\frontend\server.py", line 24, in <module>
    app.mount(config.STATIC_ROUTE, StaticFiles(directory=config.STATIC_DIRECTORY), name=config.STATIC_NAME)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\site-packages\starlette\staticfiles.py", line 55, in __init__
    raise RuntimeError(f"Directory '{directory}' does not exist")
RuntimeError: Directory 'static/' does not exist
xxjj999 发表于 2022-5-22 19:56
HPgold 发表于 2022-5-22 20:19
感谢原创分享!感谢有您!
mxz666 发表于 2022-5-22 20:22
刚学会用Python,就看见实用教程,赞!
zhcj66 发表于 2022-5-22 20:46
感谢分享,学习一下
gdcnjs 发表于 2022-5-22 20:53
不错,在pdf很多的时候,很实用
rrxfw 发表于 2022-5-22 21:32
试试看。。。
gaoxiaoao 发表于 2022-5-22 21:58
有用,就是个别注释不准确。。。
iamafailor 发表于 2022-5-22 22:07
不错 可以植入到小工具里面
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-5-18 21:44

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表