【问题标题】:Exporting c3.js chart as pdf将 c3.js 图表导出为 pdf
【发布时间】:2017-08-09 01:20:46
【问题描述】:

我正在使用 c3.js 库来构建图表。我想知道是否有一个简单的解决方案可以将 c3.js 绘制的图表导出为 pdf 格式。

我得到了一个 Angular js 的解决方案,但我正在寻找一个基于 jQuery 的解决方案。

【问题讨论】:

    标签: javascript d3.js canvas svg c3.js


    【解决方案1】:

    您需要的是一个 SVG 到 PNG 和一个 PNG 到 PDF 转换器。这是一个纯 JS 解决方案(适用于 jQuery)

    svg->png

    pdf exporter

    在您的页面中包含上述两个文件。然后使用这些函数来做你的事情:

    /**
     * @param {SVGElement} svg
     * @param {Function} callback
     * @param {jsPDF} callback.pdf
     * */
    function svg_to_pdf(svg, callback) {
      svgAsDataUri(svg, {}, function(svg_uri) {
        var image = document.createElement('img');
    
        image.src = svg_uri;
        image.onload = function() {
          var canvas = document.createElement('canvas');
          var context = canvas.getContext('2d');
          var doc = new jsPDF('portrait', 'pt');
          var dataUrl;
    
          canvas.width = image.width;
          canvas.height = image.height;
          context.drawImage(image, 0, 0, image.width, image.height);
          dataUrl = canvas.toDataURL('image/jpeg');
          doc.addImage(dataUrl, 'JPEG', 0, 0, image.width, image.height);
    
          callback(doc);
        }
      });
    }
    
    /**
     * @param {string} name Name of the file
     * @param {string} dataUriString
    */
    function download_pdf(name, dataUriString) {
      var link = document.createElement('a');
      link.addEventListener('click', function(ev) {
        link.href = dataUriString;
        link.download = name;
        document.body.removeChild(link);
      }, false);
      document.body.appendChild(link);
      link.click();
    }

    注意:代码 sn-p 完全复制自here

    【讨论】:

    • 我正在 IE 中尝试 PDF Exporter 链接演示,但它根本不起作用。有什么想法吗?
    【解决方案2】:

    我的页面底部有这个

    <script>
      function printDiv(divName) 
      {
        // fix weird back fill
        d3.select('#'+divName).selectAll("path").attr("fill", "none");
        //fix no axes
        d3.select('#'+divName).selectAll("path.domain").attr("stroke", "black");
        //fix no tick
        d3.select('#'+divName).selectAll(".tick line").attr("stroke", "black");
        // fix text going off the export (becuase my labels font size is larger than default)
        d3.select('#'+divName+"> svg").style("font-size","12px");
        // add any other styles needed
        var printContents = document.getElementById(divName).innerHTML;
        document.body.innerHTML = printContents;
        window.print();
        window.location.reload();   
      }
    </script>
    <input type="button" onclick="printDiv('chart')" value="print a div!"/>
    

    【讨论】:

    • 能否请您在回答中更具体一些,并与最初的问题联系更多。
    • 它如何生成 PDF 文件(如问题中所述?)。对我来说,它似乎只是将它发送到打印机跳来委派这项工作,但你甚至不知道用户是否在其机器中配置了打印机,是吗?
    • 无论何时运行“window.print();”它将打开一个打印菜单,您可以在其中保存为 pdf/打印到 pdf。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-02
    • 2022-12-24
    • 2017-07-17
    • 2015-03-30
    相关资源
    最近更新 更多