跳转到主要内容

pdftoppm和pdftocairo命令行工具的包装器,用于将PDF转换为PIL Image列表。

项目描述

pdf2image

CircleCI PyPI version codecov Downloads GitHub CI

一个Python (3.7+) 模块,用于包装pdftoppm和pdftocairo以将PDF转换为PIL Image对象

如何安装

pip install pdf2image

Windows

Windows用户必须构建或下载Windows的poppler。我推荐使用 @oschwartz10612 版本,这是最新的。然后您需要将 bin/ 文件夹添加到 PATH,或在 convert_from_path 中使用 poppler_path = r"C:\path\to\poppler-xx\bin" as an argument

Mac

Mac用户需要安装 poppler

使用 Brew 安装

brew install poppler

Linux

大多数发行版都自带 pdftoppmpdftocairo。如果未安装,请参考您的包管理器安装 poppler-utils

平台无关性(使用 conda

  1. 安装poppler: conda install -c conda-forge poppler
  2. 安装pdf2image: pip install pdf2image

它是如何工作的?

from pdf2image import convert_from_path, convert_from_bytes
from pdf2image.exceptions import (
    PDFInfoNotInstalledError,
    PDFPageCountError,
    PDFSyntaxError
)

然后只需这样做

images = convert_from_path('/home/belval/example.pdf')

或者

images = convert_from_bytes(open('/home/belval/example.pdf', 'rb').read())

或者更好的是

import tempfile

with tempfile.TemporaryDirectory() as path:
    images_from_path = convert_from_path('/home/belval/example.pdf', output_folder=path)
    # Do something here

images 将是一个包含PDF文档每页的PIL Image对象的列表。

以下是定义

convert_from_path(pdf_path, dpi=200, output_folder=None, first_page=None, last_page=None, fmt='ppm', jpegopt=None, 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, size=None, paths_only=False, use_pdftocairo=False, timeout=600, hide_attributes=False)

convert_from_bytes(pdf_file, dpi=200, output_folder=None, first_page=None, last_page=None, fmt='ppm', jpegopt=None, 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, size=None, paths_only=False, use_pdftocairo=False, timeout=600, hide_attributes=False)

有什么新功能?

  • 允许用户在使用pdftoppm时隐藏属性(感谢@StaticRocket)
  • 修复了在Windows上打开控制台的问题(感谢@OhMyAgnes!)
  • 添加了timeout参数,在给定秒数后引发PDFPopplerTimeoutError
  • 添加了use_pdftocairo参数,强制pdf2image使用pdftocairo。应该会提高性能。
  • 修复了一个在使用多个线程的pdf2image(但不是多个进程)时引发异常的bug
  • jpegopt参数允许在fmt="jpeg"时调整输出JPEG(pdftoppm CLI中的-jpegopt)(感谢@abieler)
  • pdfinfo_from_pathpdfinfo_from_bytes,它们公开了pdfinfo CLI的输出
  • paths_only参数将返回图像路径而不是Image对象,以防止在转换大PDF时出现内存不足
  • size参数允许您定义结果的图像形状(pdftoppm CLI中的-scale-to
    • size=400 将图像适应到400x400的框中,保持宽高比
    • size=(400, None)将图像宽度调整为400像素,保持宽高比
    • size=(500, 500)将图像大小调整为500x500像素,不保持宽高比
  • grayscale参数允许您将图像转换为灰度(pdftoppm CLI中的-gray
  • single_file参数允许您仅转换第一个PDF页面,而不在output_file的末尾添加数字
  • 允许用户通过poppler_path指定poppler的安装路径

性能提示

  • 如果使用SSD,使用输出文件夹会显著提高速度。否则,i/o通常会变成瓶颈。
  • 使用多个线程可以带来一些收益,但避免超过4个,因为这会导致i/o瓶颈(即使在NVMe SSD上!)
  • 如果i/o是瓶颈,使用JPEG格式可以带来显著收益。
  • PNG格式相当慢,这是因为压缩。
  • 如果您想了解最佳设置(大多数设置都很好),可以克隆项目并运行python tests.py以获取时间

限制/已知问题

  • 相对较大的PDF将耗尽您的内存并导致进程被终止(除非使用输出文件夹)
  • 有时DocuSign签名PDF读取失败,请参阅DocuSign问题解决方案。

项目详情


下载文件

下载适合您平台的文件。如果您不确定该选择哪个,请了解有关安装包的更多信息。

源分发

pdf2image-1.17.0.tar.gz (12.8 kB 查看哈希值)

上传时间

构建分发

pdf2image-1.17.0-py3-none-any.whl (11.6 kB 查看哈希值)

上传时间 Python 3

支持

AWSAWS 云计算和安全赞助商 DatadogDatadog 监控 FastlyFastly CDN GoogleGoogle 下载分析 MicrosoftMicrosoft PSF赞助商 PingdomPingdom 监控 SentrySentry 错误日志 StatusPageStatusPage 状态页面