API28.0でPDFファイルに日本語出力する
新しい組織でPDF出力しようとしたところ、うまく動かない。
ちょっと試行錯誤したところ、API 28.0だと日本語が正常に表示されていないことがわかりました。ということで、その場はAPI 27.0でデプロイしなおして事なきを得たわけですが。
誰か拾ってくれないかな、とつぶやいておいたツイートで見事釣れました!
何気にツイートしていたところに、@xlouderさんが回避方法を教えてくれました!
applyHtmlTag="false" にすると表示されるようです。自分も出なくて焦りました。。 RT @a_kuratani: v28にすると、PDFで日本語が出ないけど、なんかあったっけな。 #forcedotcomjp
— Hiroshi Yoshita (@xlouder) 2013, 8月 14
ついでに、下記のURLのブログ記事も教えてもらいました!ありがとうございます!
Using CSS in pdf for page numbering with API 28.0 (@page CSS properties)
ということで、ペイフォワードでブログ記事にまとめておきます。
これまでのPDF出力では、下記のような記述で問題ありませんでした。このままのソースコードでSalesforce APIのバージョンを28.0にすると、日本語の部分がPDF出力されません(スタイルシートが適用されないため、日本語が表示されない)。
<apex:page renderAs="pdf"> <head> <style> body { font-family: Arial Unicode MS; } </style> </head> <body> Force.comのPDF出力で日本語出力をテストする<br /> </body> </apex:page>
そこで、@xlouderさんに教えてもらったように、pageタグの属性にapplyHtmlTag="false"を追加します。ついでにshowHeader="false"も追加します(書かないと怒られる)。
<apex:page renderAs="pdf" applyHtmlTag="false" showHeader="false"> <head> <style> body { font-family: Arial Unicode MS; } </style> </head> <body> Force.comのPDF出力で日本語出力をテストする<br /> </body> </apex:page>
これで元のように日本語も正常にPDF出力されるようになりました。Summer'13でHTML5を扱えるよう(邪魔しないよう)になりましたが、こんなところで影響が出ていたとは。。。PDF出力してしまうと出力結果をPDFとしてしか参照できないので、なかなか検証も難しいところになります。皆様もお気をつけて。
Enjoy Programming!