在 Angular 6 中将 HTML 转换为 PDF

新手上路,请多包涵

我有一个组件(Angular 6),它是几个组件的集合。这会生成一个很长的 HTML(我使用的是 Bootstrap 4)。现在我想将此 HTML 转换为 PDF。我进行了广泛的搜索,发现了许多适用于 jsPDF 的解决方案。要求是生成清晰的布局,因为它出现在 HTML 中(以便用户可以选择、复制等)。但是我找到的解决方案要么尝试手动添加文本行,这在我的场景中是不可能的;或者他们将 HTML 转换(栅格化?)为图像格式。另外,我想保留 HTML 的格式、字体和样式。

到目前为止,我已经尝试过: thisthis

原文由 Vivekanand P V 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 634
1 个回答

到目前为止我能想到的最佳解决方案。

您必须从 npm 安装以下软件包

html2画布

jspdf

 import * as jsPDF from 'jspdf';
import html2canvas from 'html2canvas';

htmltoPDF()
{
    // parentdiv is the html element which has to be converted to PDF
    html2canvas(document.querySelector("#parentdiv")).then(canvas => {

      var pdf = new jsPDF('p', 'pt', [canvas.width, canvas.height]);

      var imgData  = canvas.toDataURL("image/jpeg", 1.0);
      pdf.addImage(imgData,0,0,canvas.width, canvas.height);
      pdf.save('converteddoc.pdf');

  });

}

更新:

想出了另一个解决方案。我无法将其分解为 A4 大小的页面,但我能够制作一个 pdf 文件。

套餐:

dom到图像

jspdf

 import domtoimage from 'dom-to-image';
import * as jsPDF from 'jspdf';

            downloadPDF()
            {

              var node = document.getElementById('parentdiv');

              var img;
              var filename;
              var newImage;

              domtoimage.toPng(node, { bgcolor: '#fff' })

                .then(function(dataUrl) {

                  img = new Image();
                  img.src = dataUrl;
                  newImage = img.src;

                  img.onload = function(){

                  var pdfWidth = img.width;
                  var pdfHeight = img.height;

                    // FileSaver.saveAs(dataUrl, 'my-pdfimage.png'); // Save as Image

                    var doc;

                    if(pdfWidth > pdfHeight)
                    {
                      doc = new jsPDF('l', 'px', [pdfWidth , pdfHeight]);
                    }
                    else
                    {
                      doc = new jsPDF('p', 'px', [pdfWidth , pdfHeight]);
                    }

                    var width = doc.internal.pageSize.getWidth();
                    var height = doc.internal.pageSize.getHeight();

                    doc.addImage(newImage, 'PNG',  10, 10, width, height);
                    filename = 'mypdf_' + '.pdf';
                    doc.save(filename);

                  };

                })
                .catch(function(error) {

                 // Error Handling

                });

            }

原文由 Anirudh 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题