PDFファイルを出力するには(標準機能編)

◆PROCESSING 逆引きリファレンス

 カテゴリー:ファイル操作

PDFファイルを出力するには(標準機能編)

【概要】

PROCESSINGの魅力の1つに、美しいグラフィクスを簡単に描けることがありますが、画面に描いた画像をファイルへ保存する事も簡単にできます。

今回は画面に描いた画像をPDFファイルへ保存する方法を紹介したいと思います。

PROCESSINGは標準機能で、画面に表示したものをPDFファイル化することが可能です。また保存したい画像を画面を表示せずに、PDFファイル化する事もできます。

 

【詳細】

まず全般的な事として、PDFファイルを作成するためには、プログラムの先頭に下記の1行を加えてください。

描画内容をPDF化する際に、以下の2通りのどちらを選ぶかで、若干方法が異なります。

  • 画面に表示したものをPDFファイル化する(画面表示)
  • 画面に表示せずにPDFファイル化する(画面非表示)

また1つのPDFファイルに

  • 1枚の画像だけを収めるのか(単一格納)
  • 複数枚の画像を収めるのか(複数格納)

によっても、利用する命令に差異があります。

以下ではこの4パターンについて、順番に1つずつ解説します。

 

画面非表示・単一格納

描画内容を画面に表示せずに、PDFファイルへ格納します。PDFファイルには、1枚の画像のみを格納します。

以下の流れで処理を行います。

画面に表示を行わずに描画内容をPDFファイルに格納するには、size()命令のレンダラーにPDFを指定し、4番目の引数にPDFファイル名を与えます。

例えば以下のようにします。

この例ではスケッチフォルダ配下に、hoge.pdf ファイルを作成するように指示しています。

この方法では、4番目の引数に与えるPDFファイル名に「パス指定」が行えない事に注意してください。この方法では、PDFファイルは必ずスケッチフォルダ配下に作成されます。

どうしてもPDFファイルを任意の場所に作成したい場合は、setup() 関数でsize() 命令を利用するのではなく、 settings() 関数の中で利用する必要があります。例えば以下のようです。

.
描画内容をPDFファイルに反映するには、draw() 関数で必要な描画を行った後でプログラムを終了します。プログラムを終了しないと、0バイトのPDFファイルが出来上がるだけになります。

プログラムの終了には、PROCESSINGの exit() 命令を利用します。

上記例では画面に円を描画し、それを hoge.pdf に反映してAPを終了します。

<出力例>

上記は、出力したPDFファイルをブラウザで表示した様子です。

 

画面非表示・複数格納

描画内容を画面に表示せずに、PDFファイルへ格納します。PDFファイルには、複数枚の連続した画像を格納します。

以下の流れで処理を行います。


画面に表示を行わずに描画内容をPDFファイルに格納するには、size()命令のレンダラーにPDFを指定し、4番目の引数にPDFファイル名を与えます。これは先程の例と同じです。

異なるのは、PROCESSING(PAppletクラス)が内部で持っているPGraphicsインスタンスを取り出して、それをPGraphicsPDF型にキャストします。

PAppletクラスでは、PGraphicsインスタンスは「g」という名前のPublic変数として宣言されています。

そして保存したい画像が別の画像に切り替わるタイミングで、PGraphicsPDFクラスのnextPage()メソッドを呼び出します。

描画内容をPDFファイルに反映するには、draw() 関数で必要な描画を行った後でプログラムを終了します。これは先程の場合と一緒ですね。

例えば上記のようにします。出来上がるPDFは以下のようになります。

<出力例>

1つのPDFファイルに、複数の画像が格納されているのがわかると思います。

 

画面表示・単一格納

画面に描画内容を表示しながら、かつPDFファイルへも格納します。PDFファイルには、1枚の画像のみを格納します。

以下の流れで処理を行います。


画面に表示しながらPDFファイルを作成する場合は、アプリケーションを終了する必要はありません。

この場合は、size()命令でPDFレンダラーを指定する必要はありません。その代わりに、PDFファイルを作成開始するときにbeginRecord()命令を利用します。

beginRecord()命令では、PDFファイル名を指定します。PDFファイルにはパスを指定する事も可能です。

そしてPDFファイルの作成を完了する際にendRecord()命令を使います。

endRecord()命令を利用した時に画面に表示されているものが、PDFファイルに出力されます。

例えば上記のようにします。出来上がるPDFは以下のようになります。

<出力例>

この例では、c:¥temp フォルダーに、hoge.pdfが作成されます。

 

画面表示・複数格納

画面に描画内容を表示しながら、かつPDFファイルへも格納します。PDFファイルには、複数の画像を格納します。

以下の流れで処理を行います。


この場合もPDFファイルを作成するために、アプリケーションを終了する必要はありません。

ポイントはPROCESSING(PAppletクラス)が内部で持っているPGraphicsインスタンスを直接利用せずに、自分たちでPGraphicsPDF型のインスタンスを作成する事です。

そして先程利用したbeginRecord()命令にPGraphicsPDF型のインスタンスを与える事で、作成したインスタンスを利用するように指示します。

例えば上記のようにします。出来上がるPDFは以下のようになります。

<出力例>

1つのPDFファイルに、複数の画像が格納されているのがわかると思います。

 

【関連記事】

  • なし

 


サンプルプログラム

3D画像をPDF出力する例:

最後に3Dの画像をPDFに出力する例を紹介します。

3Dの画像をPDFへ出力するには、beginRecord()・endRecord()命令の代わりにbeginRaw()・endRaw()命令を利用します。使い方はいっしょです。

自分たちでPGraphicsPDF型のインスタンスを作成し、これをbeginRaw()命令の引数に指定します。

画像が切り替わるタイミングでnextPage()命令を使い、PDFへ出力する際にendRaw()命令を利用します。

上記を実行すると、立方体がグルグルと画面上で回転します。

Y軸を中心に回転するたびに画像を切替え、360度以上回った段階でPDFを出力しています。

なお上記プログラムで立方体を回転する処理部分についてはYasushi Noguchi Class 様に掲載されていたプログラムを借用しております。ありがとうございます。

<画面出力例>

<PDF出力例>

 


PROCESSING逆引きリファレンス一覧 へ戻る

本ページで利用しているアイコン画像は、下記サイト様より拝借しております。各画像の著作権は、それぞれのサイト様および作者にあります。