読者です 読者をやめる 読者になる 読者になる

とあるStartupに勤めるエンジニアの技術ブログ

Salesforce、テスト関係の技術ブログなどを書く予定

API28.0でPDFファイルに日本語出力する

Force.com PDF

新しい組織でPDF出力しようとしたところ、うまく動かない。

ちょっと試行錯誤したところ、API 28.0だと日本語が正常に表示されていないことがわかりました。ということで、その場はAPI 27.0でデプロイしなおして事なきを得たわけですが。

誰か拾ってくれないかな、とつぶやいておいたツイートで見事釣れました!
何気にツイートしていたところに、@xlouderさんが回避方法を教えてくれました!

ついでに、下記の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!