pdf2image
A python (3.7+) module that wraps pdftoppm and pdftocairo to convert PDF to a PIL Image object
How to install
pip install pdf2image
Windows
Windows users will have to build or download poppler for Windows. I recommend @oschwartz10612 version which is the most up-to-date. You will then have to add the bin/ folder to PATH or use poppler_path = r"C:\path\to\poppler-xx\bin" as an argument in convert_from_path.
Mac
Mac users will have to install poppler.
Installing using Brew:
brew install poppler
Linux
Most distros ship with pdftoppm and pdftocairo. If they are not installed, refer to your package manager to install poppler-utils
Platform-independant (Using conda)
- Install poppler:
conda install -c conda-forge poppler - Install pdf2image:
pip install pdf2image
How does it work?
from pdf2image import convert_from_path, convert_from_bytes
from pdf2image.exceptions import (
PDFInfoNotInstalledError,
PDFPageCountError,
PDFSyntaxError
)
Then simply do:
images = convert_from_path('/home/belval/example.pdf')
OR
images = convert_from_bytes(open('/home/belval/example.pdf', 'rb').read())
OR better yet
import tempfile
with tempfile.TemporaryDirectory() as path:
images_from_path = convert_from_path('/home/belval/example.pdf', output_folder=path)
# Do something here
images will be a list of PIL Image representing each page of the PDF document.
Here are the definitions:
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)
What's new?
- Allow users to hide attributes when using pdftoppm with
hide_attributes(Thank you @StaticRocket) - Fix console opening on Windows (Thank you @OhMyAgnes!)
- Add
timeoutparameter which raisesPDFPopplerTimeoutErrorafter the given number of seconds. - Add
use_pdftocairoparameter which forcespdf2imageto usepdftocairo. Should improve performance. - Fixed a bug where using
pdf2imagewith multiple threads (but not multiple processes) would cause and exception jpegoptparameter allows for tuning of the output JPEG when usingfmt="jpeg"(-jpegoptin pdftoppm CLI) (Thank you @abieler)pdfinfo_from_pathandpdfinfo_from_byteswhich expose the output of the pdfinfo CLIpaths_onlyparameter will return image paths instead of Image objects, to prevent OOM when converting a big PDFsizeparameter allows you to define the shape of the resulting images (-scale-toin pdftoppm CLI)size=400will fit the image to a 400x400 box, preserving aspect ratiosize=(400, None)will make the image 400 pixels wide, preserving aspect ratiosize=(500, 500)will resize the image to 500x500 pixels, not preserving aspect ratio
grayscaleparameter allows you to convert images to grayscale (-grayin pdftoppm CLI)single_fileparameter allows you to convert the first PDF page only, without adding digits at the end of theoutput_file- Allow the user to specify poppler's installation path with
poppler_path
Performance tips
- Using an output folder is significantly faster if you are using an SSD. Otherwise i/o usually becomes the bottleneck.
- Using multiple threads can give you some gains but avoid more than 4 as this will cause i/o bottleneck (even on my NVMe SSD!).
- If i/o is your bottleneck, using the JPEG format can lead to significant gains.
- PNG format is pretty slow, this is because of the compression.
- If you want to know the best settings (most settings will be fine anyway) you can clone the project and run
python tests.pyto get timings.
Limitations / known issues
- A relatively big PDF will use up all your memory and cause the process to be killed (unless you use an output folder)
- Sometimes fail read pdf signed using DocuSign, Solution for DocuSign issue.
Metadata
Release files for pdf2image 1.16.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pdf2image-1.16.2.tar.gz | 12.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pdf2image-1.16.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 24.1 kB
Release files / pdf2image-1.16.2.tar.gz
| Download URL | pdf2image-1.16.2.tar.gz |
|---|---|
| Size | 12.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
86761091eee35f4641ea98dfddb254254361d018be698a199aff7c1d37331803
|
|
BLAKE2b-256 checksum How to use checksums |
e7fa0722c0f572116dd08ddc3fa1ec8c71ffe95864772c8317edb3ea1bbeef32
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.1 CPython/3.11.1
|
Release files / pdf2image-1.16.2-py3-none-any.whl
| Download URL | pdf2image-1.16.2-py3-none-any.whl |
|---|---|
| Size | 11.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1469335050a17657f94c2f1ef3a23e57807d631ad5bcbaec997c2c42a8186f4a
|
|
BLAKE2b-256 checksum How to use checksums |
aa2387b836fc3c731bff0df9b58d5bc2531824324271ccbdb651d3d1db12c491
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.1 CPython/3.11.1
|