HAKADORI Script開発

PDFからしおりをテキストに書き出す方法

2016.07.26 火

PDFからしおりをテキストに書き出す方法

こんにちは、デジタル事業本部の藤田です。

PDFには「しおり」という機能があり、たくさんのページがあっても一覧でインデックスを確認することができます。

左側がしおり

しおりをクリックするとPDF内の該当ページにジャンプできるのでなかなか便利な機能です。このしおりを作成するにはAcrobat Proで編集する方法、またはWordなどOfficeアプリケーションであればドキュメントからPDFに書き出す際に自動的にしおりを付加するなどの方法があります。InDesignでもブックマークという機能であらかじめリンクを作成し、インタラクティブPDFを書き出すことでしおりを付加することが可能です。

●しおりのテキスト書き出し方法

さて、そんなPDFのしおりですが既存のPDFからしおりをテキストに書き出したい場合、なにかよい方法はあるでしょうか。デフォルトではありませんのでいろいろな方法を模索してみました。

1.XMLに書き出し

デフォルトではありませんと書きましたが、実はあります。あるのです。Acrobat Proのファイルメニュー→その他の形式で保存→その他のオプション→XML 1.0 を選択するとXML書き出しの設定画面があらわれます。

Acrobat Pro IX(Mac)のメニュー

XML 1.0 として保存の設定

しおりを含むPDFのテキストがXMLで書き出されます。

書き出したXMLをExcelで開いてみたところ

しかし、XMLとか難しくてわかんないよ! という声が聞こえてきそうです。

2.JavaScriptで書き出し

AcrobatはJavaScriptを使うことでいろいろなことができます。少しバージョンが古めですが、Adobeが出している日本語版Acrobat JavaScript APIリファレンスがこちらよりダウンロード(※2021年現在サポート終了によりリンク切れとなっています)できます。このリファレンスを読んでいくうちに、Bookmark のプロパティに「文書内のすべてのしおりを表示します。」というサンプルコードがあるのを見つけました。

赤枠で囲った部分がしおり書き出しのサンプルコード

しおりのあるPDFを開いて、このコードをJavaScriptデバッガーにペースト。そしてコードをすべて選択しEnterキーを押すとコンソールにしおりが表示されます!

コンソールにコードをペーストしてEnterキーを押す

しおりが表示される!

しかし、この方法もなんだかややこしい感じです。そもそもプログラミングに縁がない人にとってはJavaScriptのハードルは高すぎです。

3.AppleScriptでアプレット作成

では、AppleScriptはどうでしょう? AppleScriptは内部でJavaScriptを動かすことが可能です。というわけで、上記2の方法をクリック一発で実行できるツールを作成してみました。

抽出したしおりはクリップボードにコピーするかテキストに書き出すかを選択することが可能です。ちなみに、テキストに書き出した場合はExcelで開くことができ、文字コードはUTF-16LE(BOM付き)なので文字化けの心配もありません。

このスクリプトはタクトシステムのHPで無料配布していますので、よろしかったらぜひダウンロードしてください。

●AcrobatでJavaScriptをAppleScriptから動かす

リファレンス記述のしおり書き出しのコードをAppleScriptで記述する方法は下記の画像の通りとなります。

階層ごとの区切りはタブに書き換えました

AcrobatのAppleScriptではdo scriptというコマンドでJavaScriptを操作することが可能です。残念なことにAcrobatのAppleScriptは単体だとできることが少なく、JavaScriptと組み合わせるといった力技で活用することが多いです。

●しおりを作成する方法は?

しおりを書き出すこととは逆に、Excelなどのタブ区切りテキストをもとにPDFの指定ページにしおりを作成することも可能です。弊社ではしおり作成スクリプトも活用しバッチで処理しているのですが、階層構造などルールが決められていないと汎用性が持てないためスクリプトの公開は今のところ未定です。PDFのしおり作成について興味があればお気軽にお問い合わせください。

  • この記事を書いた人

Noriaki Fujita

藤田 徳朗(フジタノリアキ) デジタル事業本部 DXソリューショングループ所属 Scriptを書いたり、アクセス解析をしています。どうぞよろしくお願いします。

-HAKADORI, Script開発
-, , , ,