最近为了将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 = filepath
filename=filepath.split('\\')[-1][:-4]
output_folder = filepath[:filepath.rfind('\\')]+"\extracted_content2_"+filename
extract_fullpage_images(filename,pdf_path,output_folder)
6.转换结果对比
1.原始pdf文件
2.转换后每一页的图片文件列表