Visualforceで生成したPDFが、Google Chromeで表示されない
Visualforceで生成したPDFをApexクラスでAttachmentにinsertしたPDFファイルをChrome表示すると、
「PDF ドキュメントを読み込めませんでした。」のエラーメッセージが表示されてしまう。
他のブラウザでは問題なく表示されるし、保存してローカルで表示することもできた。
Chromeで開くことができるPDFファイルも存在していたため、
エラーとなる添付ファイルと何が違うのか、Attachmentの各項目をSELECTして比較してみたところ、
Contenttypeが異なっていることが分かった。
開くことができないファイルのContenttypeは「pdf」。
それに対し、開くことができるファイルは「application/pdf」となっていた。
Apexでのinsert処理の中に、この項目をセットしている箇所があったので、
Attachment att = new Attachment( Contenttype = 'application/pdf' );
のように修正したところ、Chromeでも問題なく表示することができた。
Attachmentにあるファイルを「/servlet/servlet.FileDownload?file=」で表示するときのレスポンスには
Contenttypeが含まれているっぽい。