[salesforce]VisualforceページをPDFファイルとしてドキュメントに保存

By |11月 27, 2009|salesforce, |


今まで何度かやってきたように、VisualforceページはPDFファイルとして書き出し可能です。<apex:page renderas=”pdf”>とすることでページ全体をPDFとして出力できます。

ここで、PDFとして出力できるのはあくまでブラウザからVisualforceページにアクセスした場合だけですが、この内容をドキュメントとかレコードの添付ファイルに保存できないか、と思って試してみました。

まずは、適当なPDF出力するVisualforceページを作って、ページ名「pdftest」として保存。

[php]
<apex:page renderAs="pdf">
hogehogehogehoge
</apex:page>
[/php]

その後、以下のようなAPEXコードを用意して、新規ドキュメントレコードを作成する。

[php]
document dc = new document();
dc.body = Page.pdftest.getContent();
dc.name = ‘pdfpdfpdf’;
dc.folderid = ‘00540000000ysVH’;
insert dc;
[/php]

ここでポイントは、

  • getContent()で、該当Visualforceページのコンテンツ情報を取得する。renderasがPDFの場合はPDFのバイナリ情報が返される。renderasに指定がない場合は、ブラウザでアクセスした場合と同じ内容のHTMLテキストが返される。
  • 取得したPDFのバイナリ情報を、新規Documentレコードのbodyに設定する。

という感じで、無事動的に生成したPDFファイルがドキュメントに保存できました。同じ要領でレコードの添付ファイルにも設定できそうです。

もう一つ注意点として、getContesnt()メソッドはトリガ内では使えないようです。トリガ内から別クラス内にあるgetContent()を呼び出してもエラーでした。そのためこの方法は、VisualforceコントローラとかWebサービスAPI経由で使う、ということになりそう。