pdftoppm和pdftocairo命令行工具的包装器,用于将pdf转换为pil图像列表。
pdf2image的Python项目详细描述
pdf2图像
一个Python2.7和3.4+模块,它包装了pdftoppm和pdftocairo,将PDF转换为PIL图像对象
如何安装
首先你需要poppler utils
pdftoppm和pdftocairo是一款真正具有魔力的软件。它作为名为poppler的更大包的一部分分发。
使用pip
windows用户必须安装poppler for Windows,然后将bin/
文件夹添加到PATH。
Mac用户必须安装poppler for Mac。
Linux用户将预装Ubuntu16.04+和ArchLinux两种工具。如果不是,则运行sudo apt install poppler-utils
使用conda
conda install -c conda-forge poppler
然后你就可以安装pip包了!
pip install pdf2image
安装Pillow
如果您还没有安装pip install pillow
它是如何工作的?
from pdf2image import convert_from_path, convert_from_bytes
frompdf2image.exceptionsimport(PDFInfoNotInstalledError,PDFPageCountError,PDFSyntaxError)
然后简单地做:
images=convert_from_path('/home/belval/example.pdf')
或
images=convert_from_bytes(open('/home/belval/example.pdf','rb').read())
或者更好
importtempfilewithtempfile.TemporaryDirectory()aspath:images_from_path=convert_from_path('/home/belval/example.pdf',output_folder=path)# Do something here
images
将是表示pdf文档每页的pil图像的列表。
定义如下:
convert_from_path(pdf_path, dpi=200, output_folder=None, first_page=None, last_page=None, fmt='ppm', thread_count=1, userpw=None, use_cropbox=False, strict=False, transparent=False, single_file=False, output_file=str(uuid.uuid4()), poppler_path=None, grayscale=False)
convert_from_bytes(pdf_file, dpi=200, output_folder=None, first_page=None, last_page=None, fmt='ppm', thread_count=1, userpw=None, use_cropbox=False, strict=False, transparent=False, single_file=False, output_file=str(uuid.uuid4()), poppler_path=None, grayscale=False)
有什么新消息?
grayscale
参数允许您将图像转换为灰度(-gray
在pdftoppm cli中)single_file
参数只允许您转换第一个pdf页面,而不需要在output_file
末尾添加数字- 允许用户使用
poppler_path
指定poppler的安装路径
- 修正了一个错误,即带有非终止i-e-n-d序列的pngs缓冲区将引发异常
- 修正了在使用
convert_from_bytes()
(谢谢@fabianuken)时留下打开的文件描述符的错误 fmt='tiff'
参数允许您创建.tiff文件(为此您需要pdftocairo)transparent
参数允许您生成没有背景的图像,而不是通常的白色图像(为此您需要pdftocairo)strict
参数允许您捕获具有自定义类型的pdftoppm语法错误PDFSyntaxError
性能提示
- 如果使用的是ssd,那么使用输出文件夹的速度要快得多。否则,I/O通常会成为瓶颈。
- 使用多个线程可以给您带来一些好处,但避免超过4个,因为这将导致I/O瓶颈(即使在我的NVMe固态硬盘上!).
- 如果I/O是您的瓶颈,那么使用JPEG格式可以带来显著的收益。
- PNG格式相当慢,这是因为压缩。
- 如果您想知道最佳设置(大多数设置都可以),可以克隆项目并运行
python tests.py
来获取计时。
限制/已知问题
- 一个相对较大的pdf文件将耗尽您的所有内存并导致进程终止(除非您使用输出文件夹)