【问题标题】:How to download a png canvas image as PDF JQuery如何将 png 画布图像下载为 PDF JQuery
【发布时间】:2017-06-22 19:19:43
【问题描述】:

我多次编写此代码,以将图像下载为 png。现在我需要将图像下载为 pdf,并且我不知道如何在不改变太多代码结构的情况下执行此操作。谁能帮我这个忙?非常感谢。

我的 JQuery:

function genScreenshot() {
                html2canvas(document.getElementById('boxes'), {
                    onrendered: function(canvas) {
                        $('#container').html("");
                        $('#container').append(canvas);

                        if (navigator.userAgent.indexOf("MSIE ") > 0 || 
                            navigator.userAgent.match(/Trident.*rv\:11\./)) 
                        {
                            var blob = canvas.msToBlob();
                            window.navigator.msSaveBlob(blob,'yuppy.png');
                        }
                        else {
                            $('#test').attr('href', canvas.toDataURL("image/png"));
                            $('#test').attr('download','yuppy.png');
                            $('#test')[0].click();
                        }
                    }
                });
            }

要实现的代码示例:

html2canvas($("#canvas"), {
            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');
            }
        });

【问题讨论】:

  • @siam 我正在寻求有关如何在我的代码上执行此操作的帮助,所以请帮助我...

标签: javascript jquery html pdf


【解决方案1】:

您可以使用jsPDF 使this answer 适应您的代码:

JS

$('#test').click(genScreenshot);

function genScreenshot() {
    html2canvas(document.getElementById('boxes'), {
        onrendered: function(canvas) {
            $('#container').html("");
            $('#container').append(canvas);

            var imgData = canvas.toDataURL("image/jpeg", 1.0);
            var pdf = new jsPDF();

            pdf.addImage(imgData, 'JPEG', 0, 0);

            pdf.save('screenshot.pdf');
        }
    });
}

CSS

#boxes {
  background: #fff; /* To avoid a black background in PDF */
}

HTML

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/0.4.1/html2canvas.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.3.2/jspdf.min.js"></script>

<div id="boxes">
  <h1>This is some content for the screenshot</h1>
  <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Repudiandae asperiores est autem corporis natus nesciunt veritatis, ullam inventore distinctio, quisquam nam quis temporibus vero, fugiat tempore officia. Laborum, harum, alias.</p>
</div>

<button id="test">Download as PDF</button>

<div id="container"></div>

注意:我只在 Windows 10 上的 Chrome、Edge 和 Firefox 中进行了测试。您可能想尝试其他浏览器/系统。

【讨论】:

    【解决方案2】:

    您可以使用 dom-to-image 代替 html2canvas。根据我的经验,图像质量和 utf8 支持比 html2canvas 好得多。

    使用 jsPDF 将图像转换为 PDF 的代码类似于:

    domtoimage.toPng(
        document.querySelector("canvasElement"), 
        { width: 800, height: 1000, quality: 1}
        )
        .then(function(dataUrl) {
            var doc = new jsPDF();
            var img = new Image();
            img.src = dataUrl;
            img.onload = function() {
                doc.addImage(img, 'PNG', 10, 15);
                doc.save('filename.pdf');
             };
         })
         .catch(function (error) {
              console.error('oops, something went wrong!', error);
         });                           
    

    【讨论】:

      猜你喜欢
      • 2016-08-27
      • 1970-01-01
      • 2013-12-11
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-29
      • 2020-10-12
      相关资源
      最近更新 更多