Export Highcharts to PDF (using javascript and local server - no internet connection)

前端 未结 5 1002
囚心锁ツ
囚心锁ツ 2020-12-01 06:57

I am using Highcharts in my application (without any internet connection)

I have multiple charts on a html page, and I want to generate a PDF report that contains al

5条回答
  •  醉话见心
    2020-12-01 07:31

    This question is a bit old but was something i was working on myself recently and had some trouble with it.

    I used the jsPDF library: https://github.com/MrRio/jsPDF

    Issues i ran into involved jsPDF not supporting the SVG image exported by the high chart + images being blurry and low quality.

    Below is the solution I used to get two charts into one pdf document:

    function createPDF() {
    var doc = new jsPDF('p', 'pt', 'a4'); //Create pdf
    
    if ($('#chart1').length > 0) {
        var chartSVG = $('#chart1').highcharts().getSVG();
        var chartImg = new Image();
    
        chartImg.onload = function () {
    
            var w = 762;
            var h = 600;
    
            var chartCanvas = document.createElement('canvas');
            chartCanvas.width = w * 2;
            chartCanvas.height = h * 2;
            chartCanvas.style.width = w + 'px';
            chartCanvas.style.height = h + 'px';
            var context = chartCanvas.getContext('2d');
            chartCanvas.webkitImageSmoothingEnabled = true;
            chartCanvas.mozImageSmoothingEnabled = true;
            chartCanvas.imageSmoothingEnabled = true;
            chartCanvas.imageSmoothingQuality = "high";
            context.scale(2, 2);
            chartCanvas.getContext('2d').drawImage(chartImg, 0, 0, 762, 600);
    
            var chartImgData = chartCanvas.toDataURL("image/png");
            doc.addImage(chartImgData, 'png', 40, 260, 250, 275);
    
            if ($('#chart2').length > 0) {
                var chart2SVG = $('#chart2').highcharts().getSVG(),
                    chart2Img = new Image();
    
                chart2Img.onload = function () {
    
                    var chart2Canvas = document.createElement('canvas');
                    chart2Canvas.width = w * 2;
                    chart2Canvas.height = h * 2;
                    chart2Canvas.style.width = w + 'px';
                    chart2Canvas.style.height = h + 'px';
                    var context = chart2Canvas.getContext('2d');
                    chart2Canvas.webkitImageSmoothingEnabled = true;
                    chart2Canvas.mozImageSmoothingEnabled = true;
                    chart2Canvas.imageSmoothingEnabled = true;
                    chart2Canvas.imageSmoothingQuality = "high";
                    context.scale(2, 2);
                    chart2Canvas.getContext('2d').drawImage(chart2Img, 0, 0, 762, 600);
    
                    var chart2ImgData = chart2Canvas.toDataURL("image/png");
                    doc.addImage(chart2ImgData, 'PNG', 300, 260, 250, 275);
    
                    doc.save('ChartReport.pdf');
                }
    
                chart2Img.src = "data:image/svg+xml;base64," + window.btoa(unescape(encodeURIComponent(chart2SVG)));
            }
        }
        chartImg.src = "data:image/svg+xml;base64," + window.btoa(unescape(encodeURIComponent(chartSVG)));
    }
    }
    

    scripts to include:

     
     
     
    

提交回复
热议问题