最初にダウンロードしたJavaScriptファイルに「vfs_fonts.js」というファイルがありました。 これがフォントファイルだそうで、これを日本語フォントに置き換えれば日本が出るようです。

どうすれば良いのか、まったく見当もつきませんでしたが、 日本語フォントを導入してPDF出力されている方がいました。 このサイトです。
http://blog.createfield.com/entry/2015/12/16/052221
源真ゴシックを使ってvfs_fonts.jsを作っていますが、 その前に通信負荷を減らす為に「サブセットフォントメーカー」というソフトを使って、あまり使われない漢字等を省いているそうです。
その後、pdfmakeのdump_dirを使ってjsに変換しvfs_fonts.jsを作ってるそうです。

とりあえずこのvfs_fonts.jsを使わせていただきました。

  1. 以下のサイトを開きます。

    https://github.com/naoa/pdfmake
    00000787

  2. リストの一番上の「buile」をクリック
    以下の4つのファイルが表示されます
    pdfmake.js
    pdfmake.min.js
    pdfmake.min.js.map
    vfs_fonts.js
    00000788
  3. vfs_fonts.jsをクリック。
    下記の画面が表示されます。
    00000789

    中央右の「Raw」の上で右クリックして、ポップアップメニューから「名前を付けてリンク先を保存」を選択し、保存します。
    00000790-1

必要なファイルはこれだけです。
テストは、最初に作ったpdfTestを改良します。
pdfTestフォルダをコピーして「pdfTestJP」を作りました。
そして、「jp」フォルダにあるvfs_fonts.jpファイルを先ほどダウンロードしたvfs_fonts.jpで上書きコピーしました。
環境はこんな感じ
kaisou02
日本語が呼べるようにtest01.jsを修正します。
修正箇所は以下の3か所です。

  1. 呼び出す文字列を日本語にします。

  2. フォントを指定します。

    ノーマル、太字、イタリック、太字イタリックのフォントを指定していますが、ここはすべて同じフォントです。 太字やイタリックを使いたい場合、これらのフォントを含むvfs_fonts.jsを作成する必要があります。 このフォント指定に「GenShin」という名前を付けています。

  3. ディフォルトフォントを指定します。 上記のフォント指定で付けた名前「GenShin」をディフォルトフォントに指定します。

修正は以上です。 修正したソースの全文です。

動かして見た所、無事日本語が表示されました。
00000792

ここまでのソースを添付しておきます。pdfTestJP.zip

日本語が表示されるのは確認できましたが、色々問題点があります。
いろいろやってみて気づいた点

  1. 自動的に改行しない
    用紙や表・コラムの横幅を超える長さの文字列を指定した時、改行されずに枠をはみ出て表示されてしまいます。
    英語の場合、単語ごとにスペースが入っていて、このスペースを基準に改行しているようです。日本語でも途中でスペースを入れると改行されました。 ので、文字列を渡す前に幅を計算して改行を挿入する必要があります。
  2. Bold,italicsをTrueにすると、英語の文字列が化けることがあった
    表で、1列目に日本語、2列目に英語を入れている時にBold指定すると英語の文字列が化けることがありました。文字間隔の計算で何か起こってそうです。
  3. フォントの種類 ノーマルのゴシックだけですので、明朝や太字が出るようにしたいです。

色々やってみた時のソースです。pdfTest02の所々に直訳の日本語をいれてます。pdfTest02JP.zip

次回は、日本語フォントのvfs_fonts.jsを自分で作ってみたいと思います。

クライアントのJavaScriptだけでPDF作成(1)
クライアントのJavaScriptだけでPDF作成(2)
クライアントのJavaScriptだけでPDF作成(3)
クライアントのJavaScriptだけでPDF作成(4-日本語表示)
クライアントのJavaScriptだけでPDF作成(5-フォント作成)
クライアントのJavaScriptだけでPDF作成(6-日本語フォントテスト)
クライアントのJavaScriptだけでPDF作成(7-日本語帳票)
クライアントのJavaScriptだけでPDF作成(8-どうやってるのか)