pdftoppm和pdftocairo命令行工具的包装器,用于将pdf转换为pil图像列表。

pdf2image的Python项目详细描述


pdf2图像TravisCIPyPI versioncodecovDownloads

一个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文件将耗尽您的所有内存并导致进程终止(除非您使用输出文件夹)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java为什么这一行是charg=(char)(br.read());被跳过?   java三重DES中的IV在哪里?   java Lombok注释不在Intellij idea下编译   java为什么我不能使用过滤器作为流中的最后一步   sqlite Java编译错误找不到符号方法next()   在Java中解析处理对int来说太大的数字   java摄像头不工作   java是“断言错误”好的做法?   java确定api请求是来自CURL还是POSTMAN?   JavaSpringMVC导航   java使单例模式代码更强大   当Java(解释器)区分大小写时,为什么Java编译器(javac)不区分大小写?   java注释字符串[]oneArr();vs字符串[][]twoArr();公告   java命名查询的利弊   java使用log4jweb在web应用程序中配置Log4j2。罐子   java正则表达式查找以开头和结尾的所有可能出现的文本~   java从字符串执行方法