人様から『なんか自分好みのカレンダー作れたらいいよね~』
てことを言われ、少し遊んでみようかといろいろ考えているんですけど……
最終的にカレンダーはpdfで出せたら一番いいよな~と思い、
サーバーに負荷をかけるのもなんかイヤだったので、
Javascriptでクライアント側でpdfを作成することを思いつきまして。
んで、実際にカレンダーを組むのはhtml。
htmlで組んだカレンダーをJavasctiptで画像化し、
その画像でpdfを作って発行するという仕組みを思いつきました。
前提として、これらを利用しますので、
おのおのダウンロードをお願い致しますぃ。
『jsPDF』てのは、その名の通りJavascriptでpdfを生成するためのものです。
『FileSaver』てのは、Javascriptで任意のファイルを保存するためのもので、
『html2canvas』てのは、スクリーンショットを撮るためのものです。
んで、そのテストとして作成したのがこのhtmlたち。
まずはhtmlです。
<!DOCTYPE html> <html> <head> <title>Javascriptで撮ったスクショからPDFを作るテストです</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <script type="text/javascript" src="http://code.jquery.com/jquery-1.10.1.min.js"></script> <script type="text/javascript" src="js/html2canvas.js" ></script> <script type="text/javascript" src="js/jsPDF/jspdf.js"></script> <script type="text/javascript" src="js/jsPDF/jspdf.plugin.addimage.js"></script> <script type="text/javascript" src="js/jsPDF/jspdf.plugin.standard_fonts_metrics.js"></script> <script type="text/javascript" src="js/jsPDF/jspdf.plugin.split_text_to_size.js"></script> <script type="text/javascript" src="js/jsPDF/jspdf.plugin.from_html.js"></script> <script type="text/javascript" src="js/FileSaver.js"></script> <script type="text/javascript" src="js/FileSaver.min.js"></script> <script type="text/javascript" src="js/makePDF.js"></script> <style type="text/css"> body{ width:100%; } #out{ width:794px; height:1123px; /*margin:auto;*/ } #target{ width:794px; height:1123px; background-color: red; color: black; } table{ margin:0 auto; padding:100px; background-color:blue; } td{ background-color:white; } </style> </head> <body> <button id="go">pdf作成!!</button> <iframe id="renderSpace" frameborder="0" width="450" height="450"></iframe> <div id="out"> <div id="target"> <style type="text/css"> </style> <table border="1"> <tr> <td>ぐおおお</td> <td>ぐおおお</td> <td>ぐおおお</td> </tr> <tr> <td>ぐおおお</td> <td>ぐおおお</td> <td>ぐおおお</td> </tr> <tr> <td>ぐおおお</td> <td>ぐおおお</td> <td>ぐおおお</td> </tr> </table> </div> </div> </body> </html>
ほい。つづきまして、javascriptの方です。
(function () { $("#go").click(function() { html2canvas(document.getElementById("target"), { onrendered: function (canvas) { var dataURI = canvas.toDataURL("image/jpeg"); var pdf = new jsPDF(); pdf.addImage(dataURI, 'JPEG', 0, 0); pdf.save('sample.pdf'); } }); }); });
こんな感じでやってみました。
んで、実際にそれをブラウザで表示させると、こんな感じ。
諸事情ありまして、ちょっとトリミングしています。
ほい。んで、『pdf作成!!』のボタンを押すと、
このままのpdfが作成されるはずなのです。
というわけで、ポチッと押して作成されたpdfのスクショがこちら。
ふむ。いい感じです。
ところで、ブラウザでの表示を見ていただけるとわかりますが、
中心に表示されてないですよね。
というわけで、index.htmlの25行目にある、
『margin:auto;』のコメントアウトを解除してみます。
そうしてブラウザに表示されたもののスクショがこちら。
うし。中心に表示されました。
この状態でpdfを作成してみます。
出来上がったpdfのスクショがこちらです(`・ω・´)
……なんかぼやけてますね(;・∀・) なんででしょ(;・∀・)
まぁ急ぎでもないのでのんびり解決したいなと考えております。
ちなみに、今回作成したコードはこちらからダウンロード出来まっし。
もろもろ参考サイトで見たコードそのまま流用させていただきました(;・∀・)
参考サイト
javascriptでPDF出力。jsPDFとかFileSaver.jsとか。
考えてみたら、Javascriptってあんま本格的に勉強したことなかったなぁ……(;・∀・)
こんにちは。
オオツキと申します。
こちらのスクリプトとっても便利です。
使いたいのですが商用利用も可能でしょうか?(まだ提案段階ですが)
よろしくお願いいたします。
書き込みありがとうございます!
商用利用に関してですが、俺作のものはご利用いただいて大丈夫です!
参考ページさまのほうも一度ご確認下さい!
お返事ありがとうございます!
参考ページの方も調べてみます。