javascript - var 在功能之外不受影响?

标签 javascript jquery html variables jspdf

我正在尝试使用 jsPDF 将 html 转换为 pdf。然而,变量和函数内部发生的事情似乎对函数外部的一切都是不可见的。这是我的代码:

$(document).ready(function() 
{
    $("#runpdf").click(function(event) 
    {
        var doc = new jsPDF();
        var imageData;
        html2canvas($("#page1"),
        {
            logging:true,
            profile:true,
            allowTaint:true,
            letterRendering: true,
            onrendered:function(canvas)
            {
                imageData= canvas.toDataURL("image/jpeg");      
                doc.addImage(imageData, 'JPEG', 0, 0, 200, 200);

            }
        });
        doc.save('test.pdf');
    });
});

运行此命令后,会呈现一个空白页面,值得注意的是,函数 html2canvas 中的所有内容实际上并未影响 var doc。但是,将 doc.save('test.pdf'); 位放入函数内(在 doc.addImage() 之后),它会在页面正常执行呈现。但是,我不能这样做,因为我将使用 for-each 循环在多个页面上多次执行 html2canvas 函数,然后在最后保存文档。但这行不通,因为 doc.save() 似乎需要与其他部分处于同一函数中。我怎样才能避免这个问题?

谢谢
编辑:使用计数器和简单的 if 语句修复了问题。

var doc = new jsPDF("p", "pt", "letter");
$(document).ready(function () 
{
    $("#runpdf").click(function (event) 
{
    $(document.body).width(1903);
    var count=0;
    $("section").each(function()
    {
        $(this).children('footer').children('article').append($(document.createElement('span')).text((count+1)+".").css("float","right").css("font-weight", "900").css("font-size","150%"));
        count++;
    });    
    var pages = $(".page5");
    var remaining = pages.length;
    pages.each(function () 
    {        
        html2canvas($(this), 
        {
            logging: true,
            profile: true,
            allowTaint: true,
            letterRendering: true,
            onrendered: function (canvas) 
            {
                var imageData = canvas.toDataURL("image/jpeg");
                doc.addImage(imageData, 'JPEG', -425, 0, 1450, 800);
                remaining--;
                if (remaining === 0) 
                {
                    doc.save('test.pdf');
                }
                doc.addPage();
            }
        });

    });

});
});


谢谢大家的帮助

最佳答案

添加图片后需要保存:

    html2canvas($("#page1"),
    {
        logging:true,
        profile:true,
        allowTaint:true,
        letterRendering: true,
        onrendered:function(canvas)
        {
            imageData= canvas.toDataURL("image/jpeg");      
            doc.addImage(imageData, 'JPEG', 0, 0, 200, 200);
            doc.save('test.pdf');

        }
    });

onrendered 函数是一个回调函数,将在图像渲染完成后执行。在您的代码中,在添加图像之前调用保存。

关于javascript - var 在功能之外不受影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24369519/

相关文章:

javascript - Jquery 删除按钮上的所有克隆单击

jquery - 使用 CSS 设计单选按钮并使用图像

javascript - 时间保存到数据库中为 00 :00:00

javascript - Firebase 不适用于 Cordova

jquery 验证不适用于 mvc

javascript - 输入数字以移动小数点后一位

javascript - HTML5 音频。替换元素仍然是相同的音频文件(缓存)如何解决?

html - 如何将标题放在导航栏的中间?

javascript - 普通 JavaScript 中的 ng-repeat 替代方案

javascript - HTTP 从本地服务器请求数据