惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
A
About on SuperTechFans
Y
Y Combinator Blog
V
V2EX
Engineering at Meta
Engineering at Meta
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
V
Visual Studio Blog
博客园 - 叶小钗
博客园 - 聂微东
阮一峰的网络日志
阮一峰的网络日志
H
Help Net Security
小众软件
小众软件
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The GitHub Blog
The GitHub Blog
WordPress大学
WordPress大学
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
MongoDB | Blog
MongoDB | Blog
B
Blog
G
Google Developers Blog
J
Java Code Geeks
博客园 - 三生石上(FineUI控件)
IT之家
IT之家
N
Netflix TechBlog - Medium
腾讯CDC

jdhao's digital space

Conversion between base64 and OpenCV or PIL Image 腾讯云对象存储博客图床开启 CDN 加速(不需要购买额外域名) Search and Replace in Multiple Files in Vim/Neovim Change Table Column Width in LaTeX Image or Table Side by Side in LaTeX LaTeX 并排显示图像或表格 Firenvim: Neovim inside Your Browser Content inside HTML tags missing in Latest Hugo? Creating Markdown Front Matter with Ultisnips Labelme JSON 标注格式转 voc XML 格式 Nifty Nvim Techniques That Make My Life Easier -- Series 6 macOS 下如何为视频制作字幕 Running Command Asynchronously inside Neovim Resolving Merge Conflict after Git Stash Pop Pylint: command not found? A Hands-on Experience with Neovim's Built-in LSP Support How to Convert PDF to Images with Imagemagick 互联网上常用缩略语集锦 File Backup in Neovim Nifty Nvim Techniques That Make My Life Easier -- Series 5 Neovim Configuration for System-wide Use How to sort a list of tuple or list in Python -- lambda or itemgetter? Building A Vim Statusline from Scratch 人类第一颗原子弹爆炸始末 Distributed Training in PyTorch with Horovod Learning Expect Programming Essential Knowledge about SSH Nifty LaTeX Techniques -- Series 1 更改 Adsense 邮寄地址,重新寄送 PIN Mintty Tips and Configurations
Converting PDF Pages to Images with Poppler
2019-11-14 · via jdhao's digital space

In this post, I want to share how to convert PDF to images using the command line tool pdftoppm.

Install Poppler#

pdftoppm is provided by the poppler project.

Install on Windows#

For Windows, in order to install the latest version of poppler, we can install it via conda:

conda install -c conda-forge poppler

On Windows, the pdftoppm tool will be installed in ANACONDA_ROOT/Library/bin. We should add this directory to the Windows PATH.

We need to install newer version of pdftoppm to use some of its features, for example, exporting to JPEG format1. Note that the poppler provided by this page is too old to be useful.

Install on Ubuntu#

To install popper on Ubuntu, use apt-get:

apt-get update && apt-get install -y poppler-utils

This package installs the poppler command line utilities, such as pdftoppm, which we are going to use.

Install on macOS#

On macOS, poppler can be easily installed via homebrew:

How to use#

To convert a single page of PDF to image, we can run the following command:

pdftoppm -singlefile -f 4 -r 72 -jpeg -jpegopt quality=90 presentation.pdf test_poppler

The PDF file we want to convert to images is presentation.pdf. The generated image name prefix is test_poppler. The image extension is decided by the exported image format. An explanation of the options used:

  • -singlefile: only convert one page of PDF. It is used together with the -f option to convert a single PDF page.
  • -f: index of the PDF page you want to convert. The page index starts at 1.
  • -r: image DPI in both x and y direction. If you want to set DPI in x and y direction separately, use -rx and -ry instead.
  • -jpeg: convert PDF page to JPEG format.
  • -jpegopt: option used when convert PDF pages to JPEG images. For options and their meanings, see here.

According to my test, pdftoppm works great and can produce the needed images quickly.

Using pdf2image#

If you want to use Python, there is also a package named pdf2image, which is a thin wrapper around pdftoppm. Make sure you have installed pdftoppm and set its PATH correctly.

In the following script, I show an example on how to use the package.

from pdf2image import convert_from_path

def main():
    pages = convert_from_path("presentation.pdf", first_page=2,
                              single_file=True)
    pages[0].save("test_pdf2image.jpg", quality=85)

if __name__ == "__main__":
    main()

The function convert_from_path() will convert the PDF to a list of PIL Image object. You can then manipulate the images with the powerful functionality provided by the Pillow package.

There also a few important parameters to note:

  • dpi: this change the size and quality of the generated images. If you want to generate high quality images, use a large dpi, e.g., 300.
  • thread_count: Use multi-threading to accelerate image generation. The author suggests no more than 4 threads, however, I found more threads lead to lightly faster speed. You may tweak it to fit your need.

I have also written a more detailed script to directly generate images from PPT file on the command. You can find the script here.

References#