pdfファイルから画像を抜き出し( pdfimages or LibreOffice )

ここ2,3日で数回使ったのでメモしておきます．

poppler-utilsのpdfimagesを使う

概要

$ apt show poppler-utils | grep Description: -A99

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

Description: PDF 向けユーティリティ (Poppler ベース)
Poppler は xpdf PDF ビューアを基に作られた PDF 描画ライブラリです。
.
本パッケージには (Poppler ベースの) コマンドラインユーティリティが含まれ、
PDF 文書の情報の取得、他の形式への変換、編集ができます。
* pdfdetach -- 埋め込みファイル (添付ファイル) の一覧出力または抽出
* pdffonts -- フォント分析ツール
* pdfimages -- 画像抽出ツール
* pdfinfo -- 文書情報
* pdfseparate -- ページ抽出ツール
* pdfsig -- デジタル署名の検証
* pdftocairo -- PDF から PNG/JPEG/PDF/PS/EPS/SVG への Cairo を使った変換ツール
* pdftohtml -- PDF から HTML への変換ツール
* pdftoppm -- PDF から PPM/PNG/JPEG 画像への変換ツール
* pdftops -- PDF から PostScript (PS) への変換ツール
* pdftotext -- テキストの抽出
* pdfunite -- 文書の併合ツール

導入

$ sudo apt install poppler-utils

usage

$ pdfimages
pdfimages version 0.69.0
Copyright 2005-2018 The Poppler Developers - http://poppler.freedesktop.org
Copyright 1996-2011 Glyph & Cog, LLC
Usage: pdfimages [options] <PDF-file> <image-root>
-f <int> : first page to convert
-l <int> : last page to convert
-png : change the default output format to PNG
-tiff : change the default output format to TIFF
-j : write JPEG images as JPEG files
-jp2 : write JPEG2000 images as JP2 files
-jbig2 : write JBIG2 images as JBIG2 files
-ccitt : write CCITT images as CCITT files
-all : equivalent to -png -tiff -j -jp2 -jbig2 -ccitt
-list : print list of images instead of saving
-opw <string> : owner password (for encrypted files)
-upw <string> : user password (for encrypted files)
-p : include page numbers in output file names
-q : don't print any messages or errors
-v : print copyright and version info
-h : print usage information
-help : print usage information
--help : print usage information
-? : print usage information

pdfファイル内の画像リスト確認

$ pdfimages ./bicycle_parking.pdf -list
page num type width height color comp bpc enc interp object ID x-ppi y-ppi size ratio
--------------------------------------------------------------------------------------------
1 0 image 340 120 rgb 3 8 image no 5 0 221 221 9576B 7.8%
1 1 image 960 720 rgb 3 8 jpeg yes 14 0 170 170 64.2K 3.2%

pdfファイルから画像抜き出し既定値では.ppm形式

$ pdfimages ./bicycle_parking.pdf ./bicycle_parking-images
$ ls -l ./bicycle_parking-images*
-rw-r--r-- 1 matoken matoken 122415 11月 12 21:40 ./bicycle_parking-images-000.ppm
-rw-r--r-- 1 matoken matoken 2073615 11月 12 21:40 ./bicycle_parking-images-001.ppm
$ identify ./bicycle_parking-images-000.ppm
./bicycle_parking-images-000.ppm PPM 340x120 340x120+0+0 8-bit sRGB 122415B 0.000u 0:00.000

png形式に変換して保存

$ pdfimages ./bicycle_parking.pdf ./bicycle_parking-images -png
$ ls -l ./bicycle_parking-images*
-rw-r--r-- 1 matoken matoken 10274 11月 12 21:46 ./bicycle_parking-images-000.png
-rw-r--r-- 1 matoken matoken 321115 11月 12 21:46 ./bicycle_parking-images-001.png
$ identify ./bicycle_parking-images-000.png
./bicycle_parking-images-000.png PNG 340x120 340x120+0+0 8-bit sRGB 10274B 0.000u 0:00.000

jpegファイルはjpegとして保存(それ以外はppm)

$ pdfimages ./bicycle_parking.pdf ./bicycle_parking-images -j
$ ls -l ./bicycle_parking-images*
-rw-r--r-- 1 matoken matoken 122415 11月 12 21:48 ./bicycle_parking-images-000.ppm
-rw-r--r-- 1 matoken matoken 65695 11月 12 21:48 ./bicycle_parking-images-001.jpg

LibreOfficeでOpenDocumentFormatに変換して画像だけ抜き出し

OpenDocumentFormatはzip形式で圧縮されてその中に画像ファイルも含まれるのでDraw形式に変換して画像ディレクトリの格納されている Pictures だけ展開すると画像が取り出せる．

導入はディストリビューションのほかFlatpack, snapなども公式で配布されているのでお好みで．今回は Debian sid amd64 でapt installしたもの．

LibreOffice最新版 | LibreOffice – オフィススイートのルネサンス

$ libreoffice --headless --nologo --nofirststartwizard --convert-to odg ./bicycle_parking.pdf
convert /home/matoken/Downloads/bicycle_parking.pdf -> /home/matoken/Downloads/bicycle_parking.odg using filter : draw8
$ unzip ./bicycle_parking.odg Pictures/*
Archive: ./bicycle_parking.odg
extracting: Pictures/10000000000003C0000002D0136E1A08DF8E2B28.jpg
extracting: Pictures/100000000000015400000078BA7345C344D8D008.png
$ ls -lA Pictures/
合計 80
-rw-r--r-- 1 matoken matoken 10812 11月 12 12:56 100000000000015400000078BA7345C344D8D008.png
-rw-r--r-- 1 matoken matoken 65695 11月 12 12:56 10000000000003C0000002D0136E1A08DF8E2B28.jpg
$ identify Pictures/*
Pictures/100000000000015400000078BA7345C344D8D008.png PNG 340x120 340x120+0+0 8-bit sRGB 10812B 0.000u 0:00.000
Pictures/10000000000003C0000002D0136E1A08DF8E2B28.jpg JPEG 960x720 960x720+0+0 8-bit sRGB 65695B 0.000u 0:00.000

環境

$ dpkg-query -W poppler-utils unzip libreoffice imagemagick
imagemagick 8:6.9.10.14+dfsg-7
libreoffice 1:6.1.3-1
poppler-utils 0.69.0-2
unzip 6.0-21
$ lsb_release -d
Description: Debian GNU/Linux unstable (sid)
$ uname -m
x86_64