参考
上記参考ページから、html2canvasとjsPDFを使用し、
画面のPDF出力を行っております。
動作としては問題なくいっているのですが、以下について教えて頂きたいです。
・デフォルトA4サイズでのPDF化をjsPDFは行いますが、画面がスクロールが必要なほど長い場合、複数ページにして全てを出力するにはどうすればいいでしょうか。
・cssなど意識せずとも画面の内容をキャプチャしPDF化してくれていますが、一部cssに崩れがあります。
どうも、A4のサイズに合わせたために横幅がギュッとなってるような感じなのですが、回避策などご存じないでしょうか。
問題の再現ができないことには「崩れがある」「回避策はないか」と書かれても回答するために最も必要な情報がありません。
すいません、html文は載せることができません。
scriptは参考にしているところの通りです。
崩れがあるかどうか確認ではなく、使用されたことがある方で崩れた経験を持ち、
それを回避した経験がある方がいればと思い質問させて頂きました。
--
以下にサンプルコードを載せます。
html
1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4<meta charset="UTF-8"> 5<script src="https://cdn.polyfill.io/v2/polyfill.min.js"></script> 6<script src="https://unpkg.com/jspdf@latest/dist/jspdf.min.js"></script> 7<script src="html2canvas.min.js"></script> 8<script> 9 function downloadImage() { 10 html2canvas(document.body).then(function(canvas) { 11 var imgWidth = 210; 12 var pageHeight = 295; 13 var imgHeight = ((canvas.height) * imgWidth)/canvas.width; 14 var heightLeft = imgHeight; 15 var imgData = canvas.toDataURL('image/png'); 16 var doc = new jsPDF('p', 'mm'); 17 var position = 0; 18 doc.addImage(imgData, 'PNG', 0, position, imgWidth, imgHeight); 19 heightLeft -= pageHeight; 20 while (heightLeft >= 0) { 21 position = heightLeft - imgHeight; 22 doc.addPage(); 23 doc.addImage(imgData, 'PNG', 0, position, imgWidth, imgHeight); 24 heightLeft -= pageHeight; 25 } 26 doc.save('file.pdf'); 27 }); 28 } 29</script> 30<style> 31 *{ 32 font-family:Geneva, Verdana, sans-serif; 33 } 34</style> 35</head> 36<body style="background-color:#EDF7FF;"> 37 <input id="downloadImageButton" type="button" value="画像保存" onclick="downloadImage();"/> 38 <div style="width:910px"> 39 <table border="1" cellspacing="0" cellpadding="0" style="width:100%;text-align:center"> 40 <tr> 41 <th style="width:40px">No.</th> 42 <th style="width:80px"><a href="#">項目1</a></span></th> 43 <th style="width:80px"><a href="#">項目2</a></span></th> 44 <th style="width:80px"><a href="#">項目3</a></span></th> 45 <th style="width:80px">項目4</th> 46 <th style="width:80px">項目5</th> 47 <th style="width:80px">項目6</th> 48 <th style="width:80px">項目7</th> 49 <th style="width:80px">項目8</th> 50 <th style="width:80px">項目9</th> 51 </tr> 52 <tr> 53 <td><label>1</label></td> 54 <td><label>item1</label></td> 55 <td><label>item2</label></td> 56 <td><label>item3</label></td> 57 <td><label>item4</label></td> 58 <td><label>item5</label></td> 59 <td><label>2019/04/01</label>~<br><label>2020/03/31</label></td> 60 <td><label>ああああああああああああああああああああああああああああああ</label></td> 61 <td><label></label></td> 62 <td><a href="#">item6</a></td> 63 </tr> 64 <tr> 65 <td><label>2</label></td> 66 <td><label>item1</label></td> 67 <td><label>item2</label></td> 68 <td><label>item3</label></td> 69 <td><label>item4</label></td> 70 <td><label>item5</label></td> 71 <td><label>2019/04/01</label>~<br><label>2020/03/31</label></td> 72 <td><label>ああああああああああああああああああああああああああああああ</label></td> 73 <td><label></label></td> 74 <td><a href="#">item6</a></td> 75 </tr> 76 </table> 77 </div> 78</body> 79</html>
例えば、これの場合FireFoxだと項目1~項目3のリンクの下線が文字に被っています。
また、項目6の日付が「~」とかぶってます。
IE11ではなぜか罫線が出ませんでした。
(それは本来のページでは起こっていませんので、cssの問題があるのだと思いますが。)
また、html2canvasは1.0.0-alpha12です。
回答1件
あなたの回答
tips
プレビュー