使用JavaScript在用户单击时将HTML页面导出为PDF

使用JavaScript在用户单击时将HTML页面导出为PDF,javascript,jquery,jspdf,Javascript,Jquery,Jspdf,当用户单击GeneratePDF按钮时,我需要将html页面导出为PDF文件。我正在成功地将HTML页面导出到PDF文件中,但仅在第一次单击时,我就可以将数据下载到PDF中,但在第二次单击时,我无法将数据下载到PDF文件中。我不确定我在代码中哪里出错了 请在此处检查代码: $(函数(){ var doc=new jsPDF(); 变量specialElementHandlers={ “#编辑器”:函数(元素、渲染器){ 返回true; } }; $('#cmd')。单击(函数(){ doc.f

当用户单击GeneratePDF按钮时,我需要将html页面导出为PDF文件。我正在成功地将HTML页面导出到PDF文件中,但仅在第一次单击时,我就可以将数据下载到PDF中,但在第二次单击时,我无法将数据下载到PDF文件中。我不确定我在代码中哪里出错了

请在此处检查代码:

$(函数(){
var doc=new jsPDF();
变量specialElementHandlers={
“#编辑器”:函数(元素、渲染器){
返回true;
}
};
$('#cmd')。单击(函数(){
doc.fromHTML($('#target').html(),15,15{
“宽度”:170,
“elementHandlers”:specialElementHandlers
});
doc.save('sample-file.pdf');
});
});

你好,这是H3标签
上传到Imgur
这是醒目的红色
带有屏幕截图的反馈表单此脚本允许您创建反馈表单,其中包括在客户端浏览器上创建的屏幕截图以及表单。屏幕截图是基于DOM的,因此可能无法100%精确到真实的表示形式
因为它不会生成实际的屏幕截图,而是基于页面上可用的信息构建屏幕截图。它是如何工作的?该脚本基于html2canvas库,该库通过读取
DOM和应用于元素的不同样式。此脚本为用户添加了在图像顶部绘制元素的选项,例如标记图像上的兴趣点以及它们发送的反馈。它不需要任何渲染
在客户端浏览器上创建整个映像时,从服务器开始。没有插件,没有flash,服务器不需要交互,只有纯JavaScript!浏览器兼容性Firefox 3.5+谷歌Chrome、Safari和Opera IE9的更新版本

生成PDF
这是因为您在单击事件之外定义了“doc”变量。第一次单击按钮时,doc变量包含一个新的jsPDF对象。但是当你再次点击时,这个变量就不能再以同样的方式使用了。因为上次已经定义并使用了它

将其更改为:

$(function () {

    var specialElementHandlers = {
        '#editor': function (element,renderer) {
            return true;
        }
    };
 $('#cmd').click(function () {
        var doc = new jsPDF();
        doc.fromHTML(
            $('#target').html(), 15, 15, 
            { 'width': 170, 'elementHandlers': specialElementHandlers }, 
            function(){ doc.save('sample-file.pdf'); }
        );

    });  
});

它会起作用的。

也许吧?不,我试过了。。它不起作用我把问题退回去,因为你只是简单地把克里斯托夫的答案加进去,使答案失去了意义。这不好,当你有新问题时,问一个新问题,如果原来的问题已经有答案,不要改变它。谢谢嘿,它在IE9中为你工作?谢谢克里斯托夫·费斯,但当我点击按钮时,我可以看到两个窗口。一个是保存到PDF窗口,另一个新窗口正在打开PDF视图,如何在新窗口中删除PDF视图…嗯。。。在JSFIDLE中测试时,我只收到了“保存到pdf”窗口。我的猜测是这两个窗口与浏览器/插件相关……是的,在JSFIDLE中,它只获得了SaveTo PDF窗口,但在主应用程序中,当用户单击时,它又打开了一个窗口,我如何删除新窗口。由于我无法重现您的问题,我也无法真正调试它。您可能会尝试删除所有使用的javascript插件(jquery&jspdf除外),然后看看它是否能正常工作。之后,你可以一个接一个地重新添加它们,看看哪一个产生了错误(如果我的猜测是正确的,其中一个当然产生了问题)。。。或者,如果您可以在JSFIDLE上重现这个问题,这也会有所帮助:)$(document.ready(function)和$(function)是相同的;只是说,“如果您正在编写没有jQuery经验的人可能会看到的代码,最好使用长格式。”