当前位置: 首页 > news >正文

如何基于pdf2image实现pdf批量转换为图片

       最近为了将pdf报告解析成为文本和图片,需要将大量多页的pdf文件拆分下单独的一页一页的图像,以便后续进行OCR和图像处理,因此就需要实现将pdf2image,本文主要结合开源的pdf2image和poppler,实现了pdf转换为png格式图片的简单转换工具,供大家参考,具体步骤和应用测试示例如下。

1.安装pdf2image包

需要先安装pdf2image包,安装命令:pip3 install pdf2image

2.安装poppler用于实现pdf2image

安装poppler-windows,下载地址:https://github.com/oschwartz10612/poppler-windows/releases/tag/v23.11.0-0

3.配置环境变量

将上述压缩包解压缩之后,将路径配置到环境变量path中,如path=:D:\tools\poppler-24.08.0\Library\bin

4.修改poppler_path指向的路径

修改pdf2image包的pdf2image.py文件,将poppler路径为上述路径,具体如下。

# pdf2image.py文件修改
def convert_from_path(pdf_path: Union[str, PurePath],output_file: Any = uuid_generator(),poppler_path=r'D:\tools\poppler-24.08.0\Library\bin',  # 需要修改为path中配置的poppler路径。grayscale: bool = False
) -> List[Image.Image]:...
5.测试示例代码
import fitz  # PyMuPDF  
from pdf2image import convert_from_path  
import os,sys
def extract_fullpage_images(filename,pdf_path,output_folder):  # 打开PDF文件  doc = fitz.open(pdf_path)  # output_folder = "extracted_content_pdf"  os.makedirs(output_folder, exist_ok=True)  os.makedirs(output_folder + "/png-full/", exist_ok=True)  # 遍历每一页  for page_num in range(len(doc)):  page = doc.load_page(page_num)        # 使用pdf2image将整个页面转换为图像  images = convert_from_path(pdf_path, first_page=page_num + 1, last_page=page_num + 1) for img_index, img in enumerate(images):  img.save(f"{output_folder}/png-full/page_{page_num + 1}_full_img_{img_index + 1}.png", 'PNG')  print(f"Processed page {page_num + 1}================================")  doc.close()# 示例: python pdfSplitAdapterPMI.py D:\xxx\report.pdf
if __name__ == '__main__':  # 检查参数个数  argc = len(sys.argv)  if (argc <= 1):  print('missing Parameter' % locals())  sys.exit()  filepath = sys.argv[1]  pdf_path = filepathfilename=filepath.split('\\')[-1][:-4]  output_folder = filepath[:filepath.rfind('\\')]+"\extracted_content2_"+filename  extract_fullpage_images(filename,pdf_path,output_folder)
6.转换结果对比

1.原始pdf文件

2.转换后每一页的图片文件列表

http://www.lryc.cn/news/478425.html

相关文章:

  • Tomcat(1) 什么是Tomcat?
  • 商务礼仪与职场沟通
  • C语言必做30道练习题
  • Linux信号_信号的产生
  • 数据库基础(7) . DML-基本操作
  • windows运行ffmpeg的脚本报错:av_ts2str、av_ts2timestr、av_err2str => E0029 C4576
  • [mysql]mysql的DML数据操作语言增删改,以及新特性计算列,阿里巴巴开发手册mysql相关
  • Github 2024-11-07 Go开源项目日报 Top10
  • 【黑盒测试】等价类划分法及实例
  • LeetCode17. 电话号码的字母组合(2024秋季每日一题 59)
  • SQLite数据库是什么?DB Browser for SQLite是什么?
  • 核心概念解析Caffeine 缓存模型与策略
  • ubuntu 22.04 防火墙
  • 【数据结构-合法括号字符串】力扣678. 有效的括号字符串
  • ThreadX在STM32上的移植:F1,F4通用启动文件tx_initialize_low_level.s
  • 【算法】递归+深搜:814.二叉树剪枝
  • spring Framework 特定条件下目录遍历漏洞(CVE-2024-38816)修复
  • ESP32-C3 入门笔记03:VScode + flash_download_tool 下载烧录程序(ESP-IDF + PlatformIO)
  • Node.js——fs模块-文件重命名和移动
  • vue2.0版本引入Element-ui问题解决
  • qt QTableView详解
  • 将Notepad++添加到右键菜单【一招实现】
  • Nature Methods | 基于流形约束的RNA速度推断精准解析细胞周期动态调节规律
  • 在离线环境中使用sealos工具快速部署一套高可用的k8s服务集群
  • ReactPress系列—Next.js 的动态路由使用介绍
  • DevOps业务价值流:需求设计最佳实践
  • A15基于Spring Boot的宠物爱心组织管理系统的设计与实现
  • RC高通滤波器Bode图分析(传递函数零极点)
  • SpeechT5 模型
  • 网站用户行为分析:方法、工具与实践