代码之家  ›  专栏  ›  技术社区  ›  SP1

使用chart js打印图表

  •  1
  • SP1  · 技术社区  · 6 年前

    我正在使用Chart JS库创建图表 https://www.chartjs.org/

    假设我有下面的代码

     <div class="card-body ">
            <canvas id="bidStatus"></canvas>
      </div>
    

    使用文件保存器.js我可以用下面的代码保存图表

    function DownloadImage() {
        $("#bidStatus").get(0).toBlob(function (blob) {
            saveAs(blob, "BidStatus.png");
        });
    }
    

    但我不知道怎么打印图表。没有看到任何本机API调用可以这样做。有人能告诉我怎么做到这一点吗。

    我尝试使用jquery打印库,这在print-an-HTMl元素示例中提到过,但是它们似乎没有加载使用chart-js生成的图表。我得到一张空白的打印页。

    谢谢

    1 回复  |  直到 6 年前
        1
  •  2
  •   dpoiesz    5 年前

    我能够使用jsPDF打印来自图表.js使用下面的代码。对于这个问题已经有了一个公认的答案,但是正如其他人在评论中指出的那样,我无法将这个解决方案用于Chrome。

    这里有一个链接 jsPDF documentation . 我仍在探索这一点,以便您可以找到更多有用的工具来完成同样的任务。我不得不使用PNG而不是JPEG,因为图表的背景是透明的。JPEG只会显示为黑色。如果需要彩色背景,请在添加图像之前添加与图表图像大小和位置相同的彩色矩形(文档中的rect方法)。其他文本和功能也可以添加到您正在构建的pdf中。

    编辑:通过jsPDF,您可以使用pdf.保存('文件名.pdf')替换文件保存器.js,前提是您需要pdf。

    HTML格式

    <button id="print-chart-btn">Print Chart</button>
    <div class="canvas-container">
        <canvas id="random-chart" ></canvas>
    </div>
    
    <script src="https://cdn.jsdelivr.net/npm/jspdf@1.5.3/dist/jspdf.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/chart.js@2.8.0/dist/Chart.min.js"></script>
    <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
    

    $('#print-chart-btn').on('click', function() {
        var canvas = document.querySelector("#random-chart");
        var canvas_img = canvas.toDataURL("image/png",1.0); //JPEG will not match background color
        var pdf = new jsPDF('landscape','in', 'letter'); //orientation, units, page size
        pdf.addImage(canvas_img, 'png', .5, 1.75, 10, 5); //image, type, padding left, padding top, width, height
        pdf.autoPrint(); //print window automatically opened with pdf
        var blob = pdf.output("bloburl");
        window.open(blob);
    });
    
        2
  •  1
  •   SP1    6 年前

    此函数用于正确打印画布的内容

    function PrintImage() {
        var canvas = document.getElementById("bidStatus");
        var win = window.open();
        win.document.write("<br><img src='" + canvas.toDataURL() + "'/>");
        win.print();
        win.location.reload();
    
    }