找回密码
 立即注册
搜索
热搜: Excel discuz
查看: 2496|回复: 1

[项目代码] 提取PDF中的图片

[复制链接]

492

主题

7万

元宝

77万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
770449
发表于 2021-8-20 21:50:01 | 显示全部楼层 |阅读模式
  1. # 导入相关库
  2. import fitz
  3. import re
  4. import os
  5. # 使用正则表达式查找PDF中的图片
  6. def find_imag(path, img_path): # PDF的路径和图片保存的路径
  7.     checkXO = r"/Type(?= */XObject)"
  8.     checkIM = r"/Subtype(?= */Image)"
  9.     pdf = fitz.open(path)
  10.     img_count = 0
  11.     len_XREF = pdf._getXrefLength()
  12.     print("文件名:{}, 页数: {}, 对象: {}".format(path, len(pdf), len_XREF - 1))
  13.     for i in range(1, len_XREF):
  14.         text = pdf._getXrefString(i)
  15.         isXObject = re.search(checkXO, text)
  16.         # 使用正则表达式查看是否是图片
  17.         isImage = re.search(checkIM, text)
  18.         # 如果不是对象也不是图片,则continue
  19.         if not isXObject or not isImage:
  20.             continue
  21.         img_count += 1
  22.         # 根据索引生成图像
  23.         pix = fitz.Pixmap(pdf, i)
  24.         new_name = path.replace('\\', '_') + "_img{}.png".format(img_count)
  25.         new_name = new_name.replace(':', '')
  26.         # 如果pix.n<5,可以直接存为PNG
  27.         if pix.n < 5:
  28.             pix.writePNG(os.path.join(img_path, new_name))
  29.         else:
  30.             pix0 = fitz.Pixmap(fitz.csRGB, pix)
  31.             pix0.writePNG(os.path.join(img_path, new_name))
  32.             pix0 = None
  33.         pix = None
  34.         print("提取了{}张图片".format(img_count))

  35. if __name__ == '__main__':
  36.     pdf_path = r'笔记.pdf'
  37.     img_path = r'图片'
  38.     if os.path.exists(img_path):
  39.         print("文件夹已存在,请重新创建新文件夹!")
  40.         raise SystemExit
  41.     else:
  42.         os.mkdir(img_path)
  43.     m = find_imag(pdf_path, img_path)
复制代码



回复

使用道具 举报

492

主题

7万

元宝

77万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
770449
 楼主| 发表于 2021-8-20 21:50:20 | 显示全部楼层
只需要修改37行和38行就可以
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|五花八门论坛 ( 豫ICP备15031300号-3 )

GMT+8, 2024-12-21 22:31 , Processed in 0.070202 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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