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

LibreOfficeでプレゼンテーションを行うときのTips

この記事はLibreOffice Advent Calendar 2014 – Adventarの12/22の記事です.
昨日の記事は小笠原さんの関東LibreOfficeオフラインミーティングとはなにか – なるひこの Linux Printing お勉強日記でした.

LibreOfficeいつも便利に利用させてもらっています.私は最近Impressでスライドを作って勉強会などで発表するのによく使っています.最近気付いたImpress のTips などを書いてみます.

スライドショー中断した後続きからスライドを開始する

F5 key を押すことでスライドショーが出来ますが,別の資料を見てもらったり実演などで一旦スライドを中断することがあります.その後スライドを再開しようとして再度F5 Key を押すと1枚目のスライドに戻ってしまいます.結構最近まで → Key を連打して元のページに戻っていたのですが,これじゃいけないなと調べてみたところ shift + F5 で中断した場所から再開できることがわかりました.これによりスムーズに発表が出来るようになりました :)

スライドに挿入した画像の解像度変更

先日画像を多用したスライドを作ったのですが,50pちょっとのスライドなのに270MBほどの容量になってしまいました.
Screenshot from 2014-12-23 03:43:00Screenshot from 2014-12-23 03:41:39
これはデジカメの画像を縮小せずにそのまま貼り付けたせいでこうなりました.前もって縮小しておいたらいいのですが貼り付けた後に縮小したものに差し替えるのは面倒です.こういう時に画像の上で右クリックを押し,「画像の圧縮(S)」から解像度の変更が可能です.以下の例では 10MB超から163KB になっています.

Screenshot from 2014-12-23 03:30:01Screenshot from 2014-12-23 03:31:07

1,2枚ならこの方法でいいのですが,沢山の画像がある場合は面倒です.一括で変更したい場合は「ツール(T)」の「プレゼンテーションの軽量化(P)」から一括で解像度変更が可能です.一気に9.5MBになりました.

Screenshot from 2014-12-23 03:36:32Screenshot from 2014-12-23 03:37:41Screenshot from 2014-12-23 03:41:03Screenshot from 2014-12-23 03:41:48

pdfやhtml形式でプレゼンテーションをする

Libreofficeが導入されてない環境や,リソースが少ない端末でプレゼンテーションをする場合でもpdfやhtml形式への書き出しを行ってプレゼンテーションを行うことが可能です.例えばRaspberryPiはメモリなどのリソースが少ないためImpressは重いのですが,pdfやhtml形式だと比較的軽いので快適にプレゼンが可能でした.

pdf への書き出しは「ファイル(F)」「PDF としてエクスポート」から行えます.この時「OpenDocumentファイルを埋め込む(B)」にチェックを付けておくと後でImpressで編集を行うことが出来るpdfファイルになります.SlideShareなどで共有する場合などにも便利です.
Screenshot from 2014-12-23 04:00:26

html への書き出しは「ファイル(F)」「エクスポート(T)」から「ファイルの種類(T)」から「HTML ドキュメント (Impress) html,htm」を選択することで可能です.エクスポートしたフォルダの中に画像形式のスライドとhtmlファイルが生成されます.「スライド名.html」というファイルをブラウザで開くとプレゼンテーションが可能です.また,画像ファイルだけを使って画像ビュワーでプレゼンテーションをすることも可能です.

Screenshot from 2014-12-23 04:11:53Screenshot from 2014-12-23 04:14:18


明日のLibreOffice Advent Calendar 2014 – Adventarsouichirho.ishikawaさんです.よろしくお願いします.