在AngularJS中使用jsPDF中的addHTML函数

时间:2015-10-22 10:33:41

标签: javascript angularjs jspdf

我正在尝试使用jsPDF插件在我的应用程序中创建自定义打印输出。 Applicaiton使用AngularJs框架工作。我尝试了许多不同的示例代码但没有任何作用 (http://jsfiddle.net/rpaul/p4s5k59s/5/http://mrrio.github.io/jsPDF/ - > addHtml,...)。

我的代码:

插件加载:

...resolve: {
            loadPlugin: function ($ocLazyLoad) {
                return $ocLazyLoad.load([
                    {
                        serie: true,
                        name: 'Chart',
                        files: [ 'src/plugins/html2canvas.js', 'src/plugins/jsPDF/jspdf.debug.js']...

触发操作的按钮:

<button type="button" class="btn btn-w-m btn-success" ng-click="x21ot.printDocument()">Print</button>

被叫函数:

    this.printDocument = function(){
        var pdf = new jsPDF('p','pt','a4');
         pdf.addHTML($("#chart1"),function() {
             pdf.save('web.pdf');
         });
    }

当调用该动作时,没有任何反应。我尝试了不同的输出方法: doc.output(&#39; dataurlnewwindow&#39;); 但它不起作用。

我调试了 addHTML 函数,发现有永不触发的onrender事件。

这是一个角色问题还是我做错了什么?

3 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,我可以通过包含html2canvas来修复它。

npm install html2canvas --save

//Since I'm using browserify I then ran
global.html2canvas = require("html2canvas");

https://github.com/niklasvh/html2canvas

jsPDF依赖于addHTML函数,但在我发现有关它的错误报告(https://github.com/MrRio/jsPDF/issues/270

之前,我从未在网站上看到过任何提及的内容。

答案 1 :(得分:1)

这是我的代码,

$scope.printDocument = function(){
  var pdf = new jsPDF('p','pt','a4');
  pdf.addHTML(document.body,  function() {
    pdf.save('web.pdf');
  });
}

我的服务app.js中需要html2Canvas,我可以看到PDF对象上有一个addHTML函数,但它从未进入该回调函数,并且控制台中没有错误。

看来jsPDF.addHTML没有进入options.onrendered函数。试图跟踪它,如果我找到任何东西,将在这里更新。

编辑修复:我已经通过npm安装了html2canvas,并在我的app.js文件(角度应用程序)中设置了require,但它无法正常工作。然后我发现0.4.1 html2Canvas可用于bower安装。一旦我添加了(加载,太胆小以删除npm版本)它工作正常。好哇!

答案 2 :(得分:1)

function HTMLtoPDF(){   
        //Try this code (Class name: "pdfFromHTML.js"): since the code format important im changing this

html2canvas(document.body, {
    onrendered: function(canvas) {
        var imgData = canvas.toDataURL('image/png');
        var doc = new jsPDF('p', 'mm', 'a4');
        var position = 0;
        doc.addImage(imgData, 'PNG', 20, 20);
        doc.save('Test.pdf');           
    }
 });
}

你需要这个库:

<script src="js/jspdf.js"></script>
<script src="js/html2canvas.js"></script>
<script src="js/pdfFromHTML.js"></script> /* Call the class */

你可以点按一下按钮:

<button class="btn btn-primary" onclick="HTMLtoPDF()">Save</button>