2016年8月9日火曜日

Html2Canvasでwebページのスクリーンショットを取ろう

JavsScriptを使って、スクリーンショット及びファイル保存を行う方法について、調べてみました。
以下まとめておきます。

1、html2canvas
 html2canvasをつかって、画面キャプチャ及び、キャプチャした画面をダウンロードする
サンプルをつくってみました。

まず、次のサイトからhtml2canvas.jsを取得します。
https://github.com/niklasvh/html2canvas/releases


(1) HTML
 スクリーンショットのimgをクリックしたら、プレビューダイアログを表示して、キャプチャした画面を表示して、ダウンロードの<a>タグを表示して、クリックしたら、ファイル保存するHTML
ファイルのサンプルです。
※svgをHTML内で使うときは、html2canvas.svg.jsも定義してください。

<!DOCTYPE html>
 <html lang="ja">
<head>
    <script src="scripts/html2canvas.js"></script>
    <script src="scripts/html2canvas.svg.js"></script>
    <script src="scripts/create_image.js"></script>

</head>

<body id="id_body">
     <div id="dv_color_set">
         <img id="img-printer" src="images/camera.png" title="スクリーンショット" onclick="OnPrintPreview()"/>
     </div>


     <div id="print_preview">
        <img id="screen_image" style="width:400px;height:400px;margin-top:0px;margin-left:50px">
        <a  id="download" href="#" download="test.png"></a>
        <button id="print_preview-cancel">Cancel</button>
    </div>
</body>
</html>


(2) JavaScript 
スクリプト(create_image.js)では、imgクリック時に関数(OnPrintPreview)を定義します。
OnPrintPreviewで、キャプチャ関数(screenshot)を実行します。
screenshotでhtml2canvasを使って画面キャプチャします。
 
function OnPrintPreview() {
    erase_screenshot("#id_body");
    screenshot("#id_body");
};


function screenshot(selector) {
    var element = $(selector)[0];
    html2canvas(element, {
        onrendered: function (canvas) {
            var imgData = canvas.toDataURL();
            $('#screen_image')[0].src = imgData;
            $('#download')[0].href = imgData;
            $('#download')[0].innerHTML = "Download";
        }
    });
}

function erase_screenshot() {
    $('#screen_image')[0].src = "";
    $('#download')[0].href = "#";
    $('#download')[0].innerHTML = "";
}


※Downloadクリック時のイメージファイル保存は、IEではできませんでした(Chrome/Firefoxは可能でした)

2、jsPDF
まず、次のサイトからjspdf.jsを取得します。
https://parall.ax/products/jspdf

ライブラリ(jspdf.js)を使って画面キャプチャしたものをPDFファイルに保存させます。

HTML内で、script定義します。
スクリプト内関数screenshotを次のように変更します。
 
※ただし、jspdf.jsでは、addImage関数がないとエラーがでたので、jspdf.debug.jsを使用します。
また、jspdf.min.jsをつかうと、エラーとはならないのですが、PDF保存できませんでした。

<script src="scripts/jspdf/jspdf.debug.js"></script>
 <!--<script src="scripts/jspdf/jspdf.js"></script>-->
 <!--<script src="scripts/jspdf/jspdf.min.js"></script>-->

function screenshot(selector) {
    var element = $(selector)[0];
    html2canvas(element, {
        onrendered: function (canvas) {

        var canvasImage = canvas.toDataURL("image/jpeg");
        var pdf = new jsPDF();
        pdf.addImage(canvasImage, 'JPEG', 0, 0, 210, 210);
        pdf.save('C:\TEMP/sample.pdf');
        }
    });

}


【参考URL】
https://html2canvas.hertzen.com/ (英語)
http://bitwave.showcase-tv.com/html2canvas%e3%81%a7web%e3%83%9a%e3%83%bc%e3%82%b8%e3%81%ae%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88%e3%82%92%e5%8f%96%e3%82%8d%e3%81%861/
http://www.petitmonte.com/javascript/html2canvas.html
http://zentoo.hatenablog.com/entry/2014/02/11/161456
http://blog.k-kansei.com/?p=1319

0 件のコメント:

コメントを投稿