使用echarts和jspdf绘制pdf图表

时间:2017-05-09 03:53:29

标签: pdf jspdf echarts

我已经创建了一个包含echarts的图表,并希望使用jspdf将其包含到pdf中。我found一种方法可能是使用画布,将图形转移到图像,最后将图像包含到pdf中。但是,我无法将图形传输到图像。代码如下:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[guitarItems]
(
    [id] [int] IDENTITY(1,1) NOT NULL,
    [type] [varchar](50) NOT NULL,
    [brand] [varchar](50) NOT NULL,
    [model] [varchar](50) NOT NULL,
    [price] [float] NOT NULL,
    [itemimage1] [varchar](255) NULL,
    [itemimage2] [varchar](255) NULL,
    [description] [text] NOT NULL,
    [necktype] [varchar](100) NOT NULL,
    [body] [varchar](100) NOT NULL,
    [fretboard] [varchar](100) NOT NULL,
    [fret] [varchar](50) NOT NULL,
    [bridge] [varchar](100) NOT NULL,
    [neckpickup] [varchar](100) NOT NULL,
    [bridgepickup] [varchar](100) NOT NULL,
    [hardwarecolor] [varchar](50) NOT NULL,

    PRIMARY KEY CLUSTERED ([id] ASC)
 ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
 GO

 SET ANSI_PADDING OFF
 GO

有什么建议吗?

5 个答案:

答案 0 :(得分:3)

我也需要这个商业产品,所以在找到解决方案之前我并没有放弃。

您无法使用图表的ID来获取图片的网址,而是需要搜索图片。

($('canvas')[0]).toDataURL("image/png");

注意" [0]"意味着它会给你的第一个画布,如果你有更多的图表:

($('canvas')[0]).toDataURL("image/png");
($('canvas')[1]).toDataURL("image/png");
($('canvas')[2]).toDataURL("image/png");

3小时的搜索和测试花费:)

享受!

答案 1 :(得分:1)

我会使用工具箱,另存为图片:


       .....
       toolbox: {
           feature: {
               saveAsImage : {show: true}
           }
       }
     .....

此选项在所有现有选项中都会显示一个图标,将图形保存为图像。

Quedariaasí: enter image description here

有关工具箱的更多选项:http://echarts.baidu.com/echarts2/doc/option-en.html#title~toolbox

我希望它可以帮到你。

答案 2 :(得分:0)

您必须导入“ html2canvas”才能使其正常工作。 Html2canvas库将获取快照,并且应使用jspdf将图像写入pdf。

我为此创建了一个pen

$("#exportButton").click(function(){   
html2canvas($("#main"), {
        onrendered: function(canvas) {
           var  dataURL=canvas.toDataURL('image/jpeg');
          var pdf = new jsPDF();
          pdf.addImage(dataURL, 'JPEG', 0, 0);
          pdf.save("download.pdf");
        }
    });
});

答案 3 :(得分:0)

图表代码:

<ReactEcharts
            ref={(e) => {
              this.echarts_react = e;
            }}
            option={option}
            notMerge
            lazyUpdate
          />

功能:

saveAsImage = (uri, name = 'undefine.jpeg') => {
    var link = document.createElement('a');

    link.download = name;
    link.href = uri;
    document.body.appendChild(link);
    link.click();
  };

  saveAsPDF = (uri, name = 'undefine.pdf') => {
    let height = echartsInstance.getHeight();
    let width = echartsInstance.getWidth();
    var doc = '';
    if (width > height) {
      doc = new jsPDF('l', 'mm', [width, height]);
    } else {
      doc = new jsPDF('p', 'mm', [height, width]);
    }
    doc.addImage(echartsInstance.getDataURL({ backgroundColor: '#fff' }), 'JPEG', 10, 10);
    doc.save(name);
  };

函数调用:

<li className="nav-item inline dropdown">
              <span className="nav-link" data-toggle="dropdown">
                <i className="fa fa-download" />
              </span>
              <div className="dropdown-menu dropdown-menu-scale pull-right">
                <span
                  className="dropdown-item"
                  onClick={() =>
                    this.saveAsImage(this.echarts_react.getEchartsInstance().getDataURL({ backgroundColor: '#fff' }))
                  }>
                  Save as Image
                </span>
                <span
                  className="dropdown-item"
                  onClick={() =>
                    this.saveAsPDF(this.echarts_react.getEchartsInstance().getDataURL({ backgroundColor: '#fff' }))
                  }>
                  Save as PDF
                </span>
              </div>
            </li>

答案 4 :(得分:-1)

<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.2.61/jspdf.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/0.5.0-beta1/html2canvas.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/0.5.0-beta1/html2canvas.svg.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/amstockchart/3.13.0/exporting/rgbcolor.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/canvg/1.5/canvg.min.js"></script>

<script type="text/javascript">
                // $("#list1").on("click",function(){
                    $("#list1").click(function(){

            $("#row").html(option);        
            var imgData;
 var svgElements = $("#row").find('svg');

      //replace all svgs with a temp canvas
      svgElements.each(function() {
        var canvas, xml;
        // canvg doesn't cope very well with em font sizes so find the calculated size in pixels and replace it in the element.
        $.each($(this).find('[style*=em]'), function(index, el) {
          $(this).css('font-size', getStyle(el, 'font-size'));
        });

        canvas = document.createElement("canvas");
        canvas.className = "screenShotTempCanvas";
        //convert SVG into a XML string
        xml = (new XMLSerializer()).serializeToString(this);

        // Removing the name space as IE throws an error
        xml = xml.replace(/xmlns=\"http:\/\/www\.w3\.org\/2000\/svg\"/, '');

        //draw the SVG onto a canvas
        canvg(canvas, xml);
        $(canvas).insertAfter(this);
        //hide the SVG element
        ////this.className = "tempHide";
        $(this).attr('class', 'tempHide');
        $(this).hide();
      });


     /* html2canvas($("#row"), {
        onrendered: function(canvas) {
          var imgData = canvas.toDataURL(
            'image/png');
          var doc = new jsPDF('p', 'mm');
          doc.addImage(imgData, 'PNG', 10, 10);
          doc.save('sample-file.pdf');
        }
      });*/
  var imgData;
                   html2canvas($("#row"), {
                    useCORS: true,
                    'allowTaint': true,
                    onrendered: function (canvas) {
                        imgData = canvas.toDataURL(
                           'image/jpeg', 1.0);
                        canvaswidth1=canvas.width/2;
                        canvasheight1=canvas.height/4;

                        currentHeight = $("#row").height();
            currentHeight2=currentHeight/2;


                        var imgWidth = 200;
                      var pageHeight = 260;
                      var imgHeight = canvas.height * imgWidth / canvas.width;
                      var heightLeft = imgHeight;

                      var doc = new jsPDF('p', 'm`enter code here`m','a4');
                      var position = 35;
                      doc.setFillColor(52,73,94);
                      doc.rect(5, 5, 200, 25, "F");
                      doc.setFontSize(40);
                      doc.setTextColor(255, 255, 255);
                      doc.text(80, 23, "Fitview");
                      doc.addImage(imgData, 'JPEG', 5, position, imgWidth, imgHeight);
                      heightLeft -= pageHeight;

                      while (heightLeft >= 0) {
                        position = heightLeft - imgHeight;
                        doc.addPage();
                        doc.addImage(imgData, 'JPEG', 5, position, imgWidth, imgHeight);
                        heightLeft -= pageHeight;
                      }
                      doc.save('healthcheck_Rapportage.pdf');
                      location.reload();



                    }
                });

      $("#row").find('.screenShotTempCanvas').remove();
      $("#row").find('.tempHide').show().removeClass('tempHide');


 });

</script>