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 --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

One thought to “pdfファイルから画像を抜き出し( pdfimages or LibreOffice )”

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

To respond on your own website, enter the URL of your response which should contain a link to this post's permalink URL. Your response will then appear (possibly after moderation) on this page. Want to update or remove your response? Update or delete your post and re-enter your post's URL again. (Find out more about Webmentions.)