【问题标题】:Print chart using chart js使用图表js打印图表
【发布时间】:2018-09-13 18:52:41
【问题描述】:

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

假设我有以下代码

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

使用 FileSaver.js 我可以使用以下代码保存图表

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

但我不确定如何打印图表。看不到任何本机 API 调用来做到这一点。有人可以告诉我如何实现这一目标。

我尝试使用打印 HTMl 元素示例中提到的 jquery 打印库,但它们似乎没有加载使用 Chart js 生成的图表。我得到一个空白页进行打印。

谢谢

【问题讨论】:

  • 我尝试使用打印 HTMl 元素示例中提到的 jquery 打印库,但它们似乎没有加载使用 Chart js 生成的图表。我得到一个空白页进行打印。

标签: javascript jquery chart.js chartjs-2.6.0


【解决方案1】:

我能够使用 jsPDF 通过 Chrome 使用以下代码从 chart.js 打印画布。这个问题已经有一个公认的答案,但正如其他人在 cmets 中指出的那样,我无法让该解决方案与 Chrome 一起使用。

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

我不喜欢图表图像必须添加到特定位置和大小,如果我找到更好的方法,我会更新这篇文章。

编辑:使用 jsPDF,您可以使用 pdf.save('Filename.pdf') 替换 FileSaver.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>

JAVASCRIPT

$('#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】:

此函数正确打印 Canvas 的内容

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

}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-09
  • 2017-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多