J. Plasma Fusion Res. Vol.93, No.8 (2017)３８７‐３９０

サロン

多数の PDF 文書を自動処理によりまとめ上げて一つの PDF 版プロシーディングス論文集を作る方法
A Programming Method to Make a PDF Version of Proceedings Bookby Combining Multiple PDF Documents
佐 々 木 明１，３），村 上

泉２，３）

SASAKI Akira１，３）and MURAKAMI Izumi２，３）
１）

量子科学技術研究開発機構関西光科学研究所，２）核融合科学研究所，
３）

特定非営利活動法人原子分子データ応用フォーラム（原稿受付：２０１
７年５月１５日）

PDF 文書の連結，編集をプログラムから簡単にできる Java iText ライブラリについて紹介します．研究会などを開くときに，著者から収集した PDF 文書から，迅速にアブストラクト集やプロシーディングス論文集の冊子を編集および発行し，成果の普及やコミュニティの形成に役立てる方法を紹介します．
Keywords:
PDF, Java, iText library, DTP, IT

１．はじめにワークの構築」の支援を受けて検討してきたIT技術に関す研究会などの会合は日々の研究の中で重要な活動です

るものです．そして，２０１６年１２月に行われた核融合科学研が，良い議論をするには，時間の制約がある中で，お互い究所素過程研究会との合同研究会［１］および，第１５回 X 線に発表される研究内容，研究手法を良く理解することが必レーザー国際会議（The 15th International Conference on

要です．そのためには研究会の主催者の仕事として，プロ

X-Ray Lasers）［２］において，講演プログラムの編成，アブグラムやアブストラクト集を正確でタイムリーに発行するストラクト集，プロシーディングス論文集の編集，作成にことが重要です．研究会の開催の前に他の参加者の発表内活用した技術をまとめたものです．

容を理解できると，自分の発表を研究会の趣旨に合わせて２．iText ライブラリによる冊子の作成より良いものにするなど，モチベーションが高める効果もあります．

iText ライブラリ［３］を使うと，Java 言語を使って，プロ研究会のアブストラクトなどの資料は，PDF（Portableグラムから PDF を新たに作成したり，既存の PDF を操作Document Format）ファイルでやりとりすることが普通にすることができます．AdobeAcrobat のような GUI（Graphi-なりました．資料を一冊の冊子にまとめたものがあると良

cal User Interface）ツールを使わず，端末からコマンドをいですが，できるだけ最新の結果を発表しようとする気持入力する処理，あるいは以前の言葉で言うバッチ処理で，ちのために，投稿が研究会の直前になったり，原稿の頻繁PDF を生成するソフトウエアを開発することができます．

な差し替えが必要になる傾向があります．AdobeAcobat

iText の 現 在 ダ ウ ン ロ ー ド 可 能 な バ ー ジ ョ ン に はなどを用いた手動での冊子の作成作業は決して難しくはあ４，５，７がありますが，バージョン４［５］が LGPL（Lesserりませんが，原稿の追加や変更のたびごとに作業の繰り返

General Public License），MPL（Mozilla Public License）ラしが必要になると，もっと効率的な方法の必要性が感じらイセンスに従うフリーのライブラリであるのに対し，バーれると思います．本サロンでは，PDF 文書から冊子を作成

ジョン５［６］は AGPL（Affero General Public License）ライするための便利な道具として，Java 言語の iText ライブラ

センスに従い，バージョン７は原則有償とされていて，新リについて紹介します．

しいバージョンほど使用条件が厳しくなっています．ライ

ここで紹介する内容は，特定非営利法人原子分子データ

センスの取り扱い方法についてはインターネット上の情報

応用フォーラムにおいて原子分子データのニーズとシーズ［７］等も参照してください．本技術ノートでは参考文献［３］のマッチングの実現のために行ってきた活動の一部で，著で用いられているバージョン５を想定して説明します．

者（佐々木）が核融合研共同研究「原子分子データ，原子iText ライブラリを利用するプログラムを作成するに分子モデルの開発，検証，利用のための技術基盤とネットは，まず適当なバージョンの．
jar ファイルをダウンロード

Kansai Photon Science Institute, National Institute for Quantum and Radiological Science and Technology, Kizugawa, KYOTO 619-0215, Japanauthor’s e-mail: sasaki.akira@qst.go.jp

３８７!2017 The Japan Society of Plasma
Science and Nuclear Fusion Research

Journal of Plasma and Fusion Research Vol.93, No.8 August 2017

図１

iText ライブラリの PdfCopy クラスを用いて，pdf ファイルを連結するプログラム例．

したのちに，ソースプログラム内で import 文によって APIいます．getNumberOfPages は，文書のページ数を返すメ（Application Programing Interface）の使用を宣言するこソッドで，目次の作成にも役立ちます．と，コンパイル時にライブラリの．jar ファイルをリンクす

Files.exists（Paths.get（inputfile））メソッドは，input-る必要があります．Eclipse統合開発環境を利用していると

file で指定されたファイルがファイルシステム上に存在す

きは，projectのpropertiesの設定で．jarファイルをlibraryるときに，真を返します．このあとのファイルを連結するに追加します．C，C++，Python などの言語にも PDF ライ

処理は，ファイルが存在したときだけ実行されます．Files

ブラリがありますが［４］，オブジェクト指向言語を使うと，クラスは Java 言語の機能として提供されている，ファイルプログラム本体とライブラリの処理の干渉がないことや，操作，ディレクトリの作成，ファイルのコピー，移動など動作のために必要なパラメータがデフォルトで適切な値にの機能を持つクラスです［８］．これらの機能は，メールな設定されるなど，ライブラリの機能を簡単に利用することどとして受理したあと，所定のディレクトリに保存されてができます．なお，以降の説明では，プログラムのことをいるファイルを調べて，正しいPDF文書を冊子の中に取りクラスと呼び，関数，サブルーチンのことをメソッドと呼込んだり，原稿がまだ投稿されていないことを検出して著ぶなど，オブジェクト指向言語の用語を使うことにしま者に知らせるときにも役立ちます．それまで人が行っていす．

たチェックをひとつずつプログラムに肩代わりさせること

２．
１ PDF ファイルの連結ができるようになり，結果的に人の負担を減らしながら作

ここでは，iText ライブラリを利用して，複数の PDF業を迅速に進めるために役立つと考えられます．
２．
２ ページ番号の付与

ファイルを連結して，ひとつの PDF ファイル，冊子を作成する方法を紹介します．PDF は表示，印刷のためのフォー

新しく資料を作成したとき，しばしば通しのページ番号マットであり，編集を行うには適していません．一方，をふることが必要になります．PdfStamper クラスは，既存ワードプロセッサで複数のファイルを連結しようとすると，図のわずかな移動や，たった１文字の挿入，削除によって，リフローが発生し，ページ区切りが移動し，表示や印刷の結果が大きく変わってことがあります．iText ラ
イブラリには，既存の PDF の内容，レイアウトには影響を与えることなく処理を行うという，プロシーディングス論文集などの作成に適した機能が備わっています．
PdfCopy は，プログラムで読み込んだ PDF をコピーして新しい PDF を作成するために使うクラスです．図１は，files というリストに格納されているファイル名を持つファイルを一つずつ読み込み，outputfile で指定される新しいPDF にコピーして，ひとつにまとめて出力するプログラム
例です．inputfile で指定されている PDF ファイルの内容を，PdfReader クラスを使って読み込ん だ あ と，getIm図２

portPage メソッドで１ページずつ取り出し，addPage メ
ソッドで新しい PDF ファイルへと書き込む操作を示して
３８８

iText ライブラリの PdfStamper クラスで考えられている
pdf 文書の構造．

SaloonA Programming Method to Make a PDF Version of Proceedings Book by Combining Multiple PDF Documents A. Sasaki and I. Murakamiの PDF に，スタンプを押すようにヘッダ，フッタをつけ，３．まとめページ番号などを記載するため用いられます．図２に示す
ように，iText では PDF はあたかも文書や図が描かれた透PDF ファイルを連結して冊子を作る作業は，mediabb.

明なレイヤーが重なって構成されていると考えます．ペー

sty パッケージを読み込めば，図４のように includegraph-

ジ番号は，文書のレイヤーの上に新しいレイヤーを作り，ics コマンドで LaTeX でもできます．ただし，この方法はその上に記載すれば良いと考えられます．

ページの中に図を貼り込むという考え方なので，PDF が複

図３はその処理を PdfStamper クラスを使って行うプロ数のページを持つ場合には正常に動作しませんし，LaTeXグラム例を示します．まず PdfReader クラス を 使って，のレイアウトは内部のテキストや図の配置によってリフ

PdfStamper クラスに PDF を読み込みます．次に getOver-ローされるので，正確なページ番号を把握することが困難

Content メ ソ ッ ド を 使 い，そ れ ぞ れ の ペ ー ジ の 上 に，です．

PdfContentByte canvas によって指定される新しい透明なレiText ライブラリを利用する と，PDF 文書の編 集や，イヤーを作ります．そして，ColumnText.showTextAligned

ホームページ作成における人手による作業を一つずつ減らメソッドを使って，そのレイヤーの上に，絶対座標，フォすことができて，本来の研究開発の生産性の向上に役立つントを指定して，ページ番号を書き込みます．この例では，と考えています．処理の性能という点では，ここで示したページ番号が見開きページの左右の端に記載されるよう，PDF 冊子の作成では，合計約７０件，４００ページの論文集（容奇数ページではページの右端，偶数ページでは左端に記載

量約 100 MB）を標準的な PC で１分以内で作成することがすることを示しています．この方法を使うと，既存の PDFできました．に上書きされる形でページ番号が記載されることになるのIT 技術の進歩によって，データベースと連携する webで，著者に原稿の執筆をお願いする際に，ページ番号と本アプリケーションを用いて学術的な会合のロジスティクス

文が重ならないように，マージンを適切に設定したテンプを一元管理することも可能になりましたが，情報セキュリレートの利用をお願いすることが必要です．

ティに関することを含めて利用するために必要な技術は高図３

iText ライブラリの PdfStamper クラスを用いて，文書のヘッダにページ番号を記入するプログラム例．

図４

LaTeX で PDF を図として取り込む例．

３８９

Journal of Plasma and Fusion Research Vol.93, No.8 August 2017

度になり，研究者からはしきいが高くなってしまったように思います．しかし，主催者の手元でのデータ処理や，静参考文献的な web ページの作成など，比較的簡単で生産性を高める［１］http://www.am-data-forum.com/seminar28/seminar28
program.html［２］http://www.kansai.qst.go.jp/icxrl2016/［３］B. Lwagie, "iText IN ACTION" SECOND EDITION,
Manning Publications Co. 2011.
［４］https://texwiki.texjp.org/?PDF［５］http://mvnrepository.com/artifact/com.lowagie/itext/
4.2.1［６］http://developers.itextpdf.com/apis［７］http://qiita.com/toshi71/items/bc05d6e15edd645c8f46［８］http://docs.oracle.com/javase/jp/7/api/java/nio/file/
Files.html

ために役立つIT技術には，他にもさまざまな可能性があるのではないかと思います．
ここで紹介したプログラムのサンプ ル を web サ イ ト
http://www.am-data-forum.com/pdf̲example.html に公開しています．

謝辞

本サロンに紹介した内容は核融合科学研究所一般共同研
究「原子分子データ，原子分子モデルの開発，検証，利用のための技術基盤とネットワークの構築」（NIFS16KBAF024）の支援を受けて行われました．また，量子科学技術研
究開発機構，関西光科学研究所，河内哲哉所長，光量子科学研究部，近藤公伯部長，X 線レーザー研究グループ，錦野将元グループリーダーの支援に感謝します．

３９０