简体   繁体   English

C#如何在PDF文档中打印html Convas元素

[英]C# How to print html Convas element in PDF document

<div class='wrapper'>
    <canvas height='300' id='canvas_barchart' width='750'></canvas>

    <asp:HiddenField ID="hdn_Yaxis" runat="server" />
    <asp:HiddenField ID="hdn_Xaxis" runat="server" />
</div>
<script src="Chart_js/prefixfree.min.js"></script>
<script src='js/Chart.min.js'></script>

<script language="javascript">

    var Bar_yAxis = document.getElementById('<%=hdn_Yaxis.ClientID%>').value;
    var Bar_xAxis = document.getElementById('<%=hdn_Xaxis.ClientID%>').value;


    //alert("Y = " + yAxis + " X = " + xAxis);
    Bar_yAxis = Bar_yAxis.substring(0, Bar_yAxis.length - 1);
    Bar_xAxis = Bar_xAxis.substring(0, Bar_xAxis.length - 1);


    var Bar_arrayx = Bar_xAxis.split(',');



    var Bar_arrayY = Bar_yAxis.split(',').map(function (item) {
        return parseInt(item, 10);
    });


    var ctx = document.getElementById("canvas_barchart");

    var myBarChart = new Chart(ctx,
        {

            type: 'bar',

            data: {

                labels: Bar_arrayx,
                datasets: [
                    {

                        fill: true,
                        fillColor: "rgba(255, 153, 29,.8)",
                        lineTension: 0.1,
                        backgroundColor: "rgba(255, 153, 29,.8)",

                        borderColor: "rgba(255, 153, 29,1)",
                        borderCapStyle: 'butt',
                        borderDash: [],
                        borderDashOffset: 0,
                        borderJoinStyle: 'miter',


                        pointBorderColor: "rgba(255, 153, 29,1)",
                        pointBackgroundColor: "#fff",
                        pointBorderWidth: 1,
                        pointHoverRadius: 5,
                        pointHoverBackgroundColor: "rgba(255, 153, 29,1)",
                        pointHoverBorderColor: "rgba(255, 153, 29,1)",
                        pointHoverBorderWidth: 2,
                        pointRadius: 1,
                        pointHitRadius: 10,


                        data: Bar_arrayY,
                        spanGaps: false,
                    }
                ]

            },
            options:
            {

                scales: {
                    yAxes: [{
                        ticks: {
                            beginAtZero: true
                        }
                    }]
                },
                tooltips: {

                    callbacks: { // HERE YOU CUSTOMIZE THE LABELS
                        title: function () {
                            return null; //'eVMS';
                        },
                        beforeLabel: function (tooltipItem, data) {
                            return null; //'Date' + ': ' + tooltipItem.xLabel;
                        },
                        label: function (tooltipItem, data) {
                            return null;
                        },
                        afterLabel: function (tooltipItem, data) {
                            if (parseInt(tooltipItem.yLabel) == 1) return tooltipItem.yLabel + " hours";
                            else return tooltipItem.yLabel + " hours";
                        }

                    }

                }
            }
        });



</script>

what I need is write this element into pdf using c# 我需要的是使用c#将此元素写入pdf

I already tried this : 我已经尝试过了

using (MemoryStream stream1 = new MemoryStream())
{
    Paragraph p2 = new Paragraph(new Chunk(new iTextSharp.text.pdf.draw.LineSeparator(0.0F, 100.0F, iTextSharp.text.Color.BLACK, Element.ALIGN_LEFT, 1)));
    pdfDoc.Add(p2);

    pdfDoc.Add(new Phrase("\n"));
    pdfDoc.Add(new Phrase("\n"));

    canvas_barchart.SaveImage(stream1, ChartImageFormat.Png);
    iTextSharp.text.Image chartImage1 = iTextSharp.text.Image.GetInstance(stream1.GetBuffer());
    chartImage1.ScalePercent(75f); chartImage1.SpacingBefore = 100f;

    chartImage1.SpacingAfter = 110f;
    pdfDoc.Add(chartImage1); pdfDoc.Add(new Phrase("\n"));// pdfDoc.Add(new Phrase("\n")); pdfDoc.Add(new Phrase("\n"));

}

but I cannot use SaveImage() to save this control into stream because the control is run on client side not server side 但我无法使用SaveImage()将此控件保存到流中,因为该控件在客户端而非服务器端运行

either I access these element from server side and some how print it on pdf documnt , or print it on pdf from java script itself 我要么从服务器端访问这些元素,然后了解如何在pdf文档上将其打印出来,要么从Java脚本本身在pdf上打印出来

any one have idea or another solution for this, I want to save this chart into PDF. 任何人对此都有想法或其他解决方案,我都希望将此图表保存为PDF。

this is the image of convas element , I want to write it in pdf 这是convas元素的图像,我想用pdf编写

on the client, you can use jsPDF ... 在客户端上,您可以使用jsPDF ...

  var canvas = document.getElementById('canvas_barchart');
  var doc = new jsPDF();
  doc.addImage(ctx.toDataURL('image/png'), 0, 0);
  doc.save('chart.pdf');

or you can use ajax to send the image back to the server and save it there... 或者您可以使用ajax将图像发送回服务器并保存在服务器中...

$.ajax({
  data: {
    image: ctx.toDataURL('image/png')
  },
  type: 'POST',
  url: 'server/saveImage'
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM