javascript - 无法在 .each() 函数中将 div 添加到 PDF

标签 javascript html css

我正在将多个 div 内容导出到 PDF 中。将数据导出到 PDF 时,我想在单独的页面中显示每个 div 内容。为此,我尝试按照下面的代码添加,但仍然无法在单独的页面中显示每个 div 内容,如演示 plunker 中所示(当用户单击导出按钮时,将下载 PDF 并且可以看到 div 内容显示在各个页面中):https://plnkr.co/edit/KvkVlYmmmJiZ71sghb1l?p=preview (工作演示 plunker,它在 PDF 的各个页面中显示每个 div 内容)。

      source.append($('<div>'));
      source.append($(this));
      source.append($('</div><!--ADD_PAGE-->'));

完整的js代码:

app.controller("listController", ["$scope",
   function($scope) {

    $scope.employees = [{pageIndex: "randomText1",pageHeader: "This should be shown in page1"},
    {pageIndex: "randomeTexthere",pageHeader: "This should be shown in page2"},
    {pageIndex: "someRandomText",pageHeader: "This should be shown in page3"},
    {pageIndex: "four",pageHeader: "This is shown in page4"},];

 $scope.export = function() {
   var pdf = new jsPDF('landscape');
   var source = $('#append-source');
    $('.myDivClass').each(function(){
      var html = $(this);
      source.append($('<div style="background-color: yellow">'));
      source.append(html));
      source.append($('</div><!--ADD_PAGE-->'));
    //var html = "<div>"+$(this) + "</div><!--ADD_PAGE-->";//the code is broken with this line

    });
    console.log(source);
    pdf.addHTML(
          source, 0, 0, {
              pagesplit: true
          },
          function(dispose){
              pdf.save('test3.pdf');
          }
      );
     }
   }
 ]);

演示 plunker(无法在 .each() 中添加新的 div):https://plnkr.co/edit/uUiK0Mv8mn88JEEyI3rf?p=preview

最佳答案

您必须将您的 html 单独添加到您的 pdf 文件中。
最后像这样更改您的 $scope.export 函数。

 $scope.export = function() {
   var pdf = new jsPDF('landscape');
    $('.myDivClass').each(function(){
      var html = $(this);
      pdf.fromHTML(html.html(),15,15,{'width':170});
      pdf.addPage();          
    });
     pdf.save('test3.pdf');
 }

更新:如果您要使用 addHTML 进行保存。 每个 div 的 将不同,您不能将图像划分为相同的高度。所以你必须单独添加div。
代码

   $scope.html = [];
   $scope.addPagesAndPrint = function(pdf, index){
      var source = $('#append-source');
      source.empty();

      source.append($('<div>'));
      source.append($scope.html[index]);
      source.append($('</div><!--ADD_PAGE-->'));

      pdf.addHTML(
          source, 0, 0, {
              pagesplit: true
          },
          function(dispose){
            if(index == $scope.html.length - 1)
              pdf.save('test4.pdf');
            else{
              pdf.addPage();
              $scope.addPagesAndPrint(pdf, index + 1);
            }
          }
      );
   }
   $scope.export = function() {
      var pdf = new jsPDF('landscape');
      $('.myDivClass').each(function(){
        $scope.html.push($(this));
      });
      $scope.addPagesAndPrint(pdf, 0);
   }

关于javascript - 无法在 .each() 函数中将 div 添加到 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46996748/

相关文章:

javascript - 停止循环文本但仍运行效果

javascript - 将 Ruby 1.9.2 代码转换为 JavaScript?

jquery - 根据单元格值为HTML/jquery表单元格设置颜色格式

HTML:同侧文本溢出和对齐

html - 表格边框垂直和水平不相交

javascript - ios javascript pagehide 和卸载不能正常工作

javascript - 如何使用 ajax、jquery、php 和 session 更新购物车数量

java - 是否存在用于单元测试的 assertHTMLEquals 之类的东西

javascript - 使用 jQuery 或 JavaScript 绑定(bind)到自定义 CSS 动画结束事件?

javascript - 用javascript设置初始样式可以吗