PDFを他のファイル形式に簡単に変換できるpoppler-utils | A Day In The Boy's Life

A Day In The Boy's Life

とあるエンジニアのとある1日のつぶやき。

元ネタとしては、以前に書いた「Apache Tikaを使ってドキュメントの中身を取り出すPHPプログラム 」にてPDFファイル内のテキストを抽出しようとしたところ、PDFのセキュリティ関連の設定によって中身がうまく抽出できないケースがあったりして、Linux環境上で他にPDFの中身を取り出す方法は無いものかと調べていたらpoppler-utils内に含まれるpdftotextコマンドでうまく取り出せたよ、って話になります。

 

 

PDF内のテキストを取り出す

 

 

 

先に結論を書きましたが、pdftotextコマンドを使えばPDFファイル内のテキスト文を取り出すことが可能です。

 

pdftotextコマンドはpoppler-utilsというパッケージに含まれるため、存在しない場合はyum経由などでインストールしておきます。

 

# yum install poppler-utils

 

 

poppler-utilsにはpdftotext以外にもpdfinfoやpdftohtmlやpdftoppmコマンドなどが含まれています。

 

余談ですけど、pdf2psコマンドとかもあったりするのですが、こちらはpoppler-utilsパッケージ付属のものではなくghostscriptパッケージ付属のものです。

 

で、本題ですがPDFファイルからテキストデータを抽出したい場合は下記のように実行します。

 

 

$ pdftotext -raw hoge.pdf hoge.txt

 

 

上記によりhoge.pdfファイル内のテキストデータをhoge.txtに書き出してくれます。

 

PDFを開く際にパスワードをつけている場合は

 

$ pdftotext -upw yourpasswd hoge.pdf hoge

 

 

のようにパスワードを指定すれば開けたりします。

 

また、下記のようにセキュリティの設定をきつくしても抽出はできました(文章のメタデータにアクセスできないと書かれているのに何故)。


PDFセキュリティ設定

 

 

その外に便利なpoppler-utilsのコマンドたち

 

 

 

pdftotext以外にも幾つか使えそうなコマンドがあります。

 

PDFファイルの概要を知りたければpdfinfoコマンドが便利です。

 

$ pdfinfo test.pdf
Title:          ほげほげ計画書
Author:         itboy
Creator:        PowerPoint 用 Acrobat PDFMaker 11
Producer:       Adobe PDF Library 11.0
CreationDate:   Thu Apr 21 10:01:28 2016
ModDate:        Thu Apr 21 10:09:55 2016
Tagged:         yes
Pages:          5
Encrypted:      yes (print:no copy:yes change:no addNotes:no)
Page size:      822.12 x 538.68 pts
File size:      308122 bytes
Optimized:      yes
PDF version:    1.6

 

 

オプションをつければPDF内のメタデータを取り出すことも出来ます。

 

 

$ pdfinfo -meta test.pdf 
-snip-
<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.4-c005 78.147326, 2015/04/27-13:03:03">
   <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
      <rdf:Description rdf:about=""
            xmlns:xmp="http://ns.adobe.com/xap/1.0/"
            xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
            xmlns:dc="http://purl.org/dc/elements/1.1/"
            xmlns:pdf="http://ns.adobe.com/pdf/1.3/"
            xmlns:pdfx="http://ns.adobe.com/pdfx/1.3/">
         <xmp:ModifyDate>2016-04-21T10:09:55+09:00</xmp:ModifyDate>
         <xmp:CreateDate>2016-04-21T10:01:28+09:00</xmp:CreateDate>
         <xmp:MetadataDate>2016-04-21T10:09:55+09:00</xmp:MetadataDate>
         <xmp:CreatorTool>PowerPoint 用 Acrobat PDFMaker 11</xmp:CreatorTool>
         <xmpMM:DocumentID>uuid:63c700ab-7219-4640-ac8d-8b4937b6a0dd</xmpMM:DocumentID>
         <xmpMM:InstanceID>uuid:5f189849-df3a-44ab-a78e-6c342c23d7fa</xmpMM:InstanceID>
         <dc:format>application/pdf</dc:format>
         <dc:title>
            <rdf:Alt>
               <rdf:li xml:lang="x-default">ほげほげ計画書</rdf:li>
            </rdf:Alt>
         </dc:title>
-snip-

 

 

PDFファイルをHTMLファイルに変換したい場合はpdftohtmlコマンド。

 

pdftotextの出力結果をHTML形式にしてくれるのかと思ってましたがそうではなく、PDFをHTML表示に変換してくれるコマンドとなってます。

 

$ pdftohtml hoge.pdf hoge
Page-1
Page-2
Page-3
Page-4

 

 

作成が完了するとHTMLファイルやPDF内で使われている画像ファイルなどが出力されます。

 

 

$ ls
hoge-1_1.png  hoge-2_2.jpg  hoge-3_2.jpg  hoge-3_5.png  hoge-4_2.jpg  hoge-4_5.png  hoge-4_8.png  hoge_ind.html
hoge-1_2.jpg  hoge-2_3.png  hoge-3_3.png  hoge-3_6.png  hoge-4_3.png  hoge-4_6.png  hoge-4_9.jpg  hoges.html
hoge-2_1.png  hoge-3_1.png  hoge-3_4.png  hoge-4_1.png  hoge-4_4.png  hoge-4_7.png  hoge.html

 

 

ただし、結果のHTMLはオリジナルのレイアウトとかけ離れたファイルになったりしますので、あくまでHTMLファイルに変換するといった場合にしか使えそうにありません。

 

場合によっては、PDF内の画像を取り出したいといった場合に便利なのかもしれませんが。

 

PDFを画像ファイルに変換したい場合はpdftoppmコマンド。

 

こちらはPDFファイルをPPM(Portable PixMap file format)形式の画像に変換してくれるものなんですが、オプションでPNG形式にも変換 できます。

 

$ pdftoppm -r 100 -png hoge.pdf hoge

 

 

-rオプションはDPIを指定できるので解像度を適当なものに指定しましょう(デフォルトは150みたいです)。

 

変換すると各ページごとに画像ファイルが出来上がります。

 

$ ls
hoge-1.png  hoge-2.png  hoge-3.png  hoge-4.png

 

 

オプションで開始・終了ページや切り取り位置の指定などもできたりします。

 

PDFファイルをPDF以外の形式で見せたい場合やファイルのサムネイルを作りたいといった場合に便利かもしれません。