17
21

More than 3 years have passed since last update.

jsPDFでHTML上の日本語表記のテーブルをサクッとPDF化

Last updated at Posted at 2020-01-23

概要

  • クライアントサイドで手軽にPDFを作成したい
    • HTML上の特定テーブル(日本語表記)をそのままPDF化

jsPDFとは?

  • JavaScriptを用いてPDFを作成するライブラリ

jsPDF-AutoTableとは?

  • jsPDFのテーブル作成プラグイン

How to

  • 1. 使用したい日本語フォント(.ttf)をダウンロード
    • ここは個人の好きなフォントでOK
      • 今回は Koruri という軽量日本語フォントを利用
  • 2. ここからフォントをJSファイルに変換する
    • fontNameに適当な名前を入力
    • fontStyleはダウンロードしたフォントのスタイルを指定
    • ファイルにダウンロードしたフォントファイルttfを指定
  • 3. 各種JSをHTMLにて読み込み、jsPDFを用いてPDF化処理を記述
    • jspdf.min.js
    • jspdf.plugin.autotable.js
    • Koruri-Regular-normal.js ← 2でフォントファイルから変換したJS
<html>
  <head>
    <script type="text/javascript" src="assets/js/jspdf.min.js"></script>
    <script type="text/javascript" src="assets/js/jspdf.plugin.autotable.js"></script>
    <script type="text/javascript" src="assets/js/Koruri-Regular-normal.js"></script>
    <script>
      $(function() {
        // 縦表示が'p'、横表示が'l'
        // 用紙サイズはA4
        let doc = new jsPDF('l', 'pt', 'a4', false);
        // ここでセットしたフォントはjsPDFのtext()で指定したテキストにのみ反映
        doc.setFont('Koruri-Regular', 'normal');
        doc.text(40, 30, 'HTMLテーブルをPDF化');
        doc.autoTable({
          theme: 'grid',
          html: '#table',
          // ここでフォントの指定をしないとテーブル内部の文字が化ける
          styles: {font: 'Koruri-Regular', fontStyle: 'normal', fontSize: 12}
        });
        doc.save('table.pdf');
      });
    </script>
  </head>
  <body>
    <table id="table">
      <tr>
        <th>名前</th>
        <th>年齢</th>
      </tr>
      <tr>
        <td>ほげ</td>
        <td>20</td>
      </tr>
      <tr>
        <td>ふが</td>
        <td>30</td>
      </tr>
    </table>
  </body>
</html>

まとめ

  • クライアントサイドでPDF化する方法はいくつかあるが、いまいち日本語化対応になっていなかったり、日本語対応するやり方が複雑だったりで情報も少ない。今回のやり方が一番サクッとできそうな方法かなーと。

参考

17
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
21