はじめに
PHPとかだとFPDFを使って、ごにょごにょすればできますが・・
javascriptで出来ないかと調べたら・・html2pdf.jsってのがあったのでメモしておきます。
html2pdf.jsとは
html2pdf.js は、html2canvas.jsとjsPDF.jsを使用して、Web ページの要素をクライアント側で印刷可能なPDFに変換するそうです。
下記
https://ekoopmans.github.io/html2pdf.js/
サンプル
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>サンプルHTML</title>
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1">
<meta name="format-detection" content="telephone=no">
<meta name="keywords" content=",,,,">
<meta name="description" content="">
<meta name="author" content="">
<meta name="google-site-verification" content="">
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/html2pdf.js/0.10.1/html2pdf.bundle.min.js" integrity="sha512-GsLlZN/3F2ErC5ifS5QtgpiJtWd43JWSuIgh7mbzZ8zBps+dvLusV+eNQATqgA/HdeKFVgA5v3S/cIrLF7QnIg==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script>
$(function(){
$(document).on('click','#pdf-btn', function(){
$('#pdf-btn').hide();
var filename = "sample.pdf" //ダウンロードするPDFファイル名
var element = document.body; //PDF化の範囲
var option = {
margin : 0,
filename : filename,
pagebreak : { mode: 'legacy'},
image : {
type : 'png',
quality : 1
},
enableLinks : true,
html2canvas : {
dpi : 90,
scale : 1,
letterRendering : true
},
jsPDF : {
unit : 'mm',
format : 'a4',
orientation : 'portrait',
compress : true,
useCORS : true,
x : 0,
y : 0,
scrollX : 0,
scrollY : 0,
noscript : false,
script : false,
style : false
}
};
html2pdf().from(element).set(option).save()
.then(() => {
$('#pdf-btn').show();
// 成功
})
.catch((e) => {
$('#pdf-btn').show();
// 失敗
});
});
});
</script>
</head>
<body id="pagetop">
<button id="pdf-btn" type="button">PDF</button>
<br>
<img src="logo_ccv.png">
<h1>テスト</h1>
<p>もしもしかめよかめさんよ</p>
<p>もしもしかめよかめさんよ</p>
<p>もしもしかめよかめさんよ</p>
<p>もしもしかめよかめさんよ</p>
</body>
</html>
jpegの場合は、imageはこんな感じ
image: {
type: 'jpeg',
quality: 0.98
},
jsPDFのオプションは下記から確認
https://github.com/parallax/jsPDF?tab=readme-ov-file
さいごに
最近は、印刷でMicrosoft Print to PDFを選択して印刷しちゃえば。いいんだけどね。
あとhtml2canvasのでテキストは画像化されます。