html2Canvas.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import html2Canvas from 'html2canvas'
  2. import JsPDF from 'jspdf'
  3. function printPdf(title) {
  4. html2Canvas(document.querySelector("#pdfDom"), {
  5. //获取文档中 id="pdfDom" 的元素,返回匹配指定选择器的第一个元素
  6. allowTaint: true, //允许跨源图像污染画布
  7. }).then(function (canvas) {
  8. let contentWidth = canvas.width; // 获得容器的宽
  9. let contentHeight = canvas.height; // 获得容器的高
  10. //一页pdf显示html页面生成的canvas高度;
  11. let pageHeight = (contentWidth / 592.28) * 841.89;
  12. let leftHeight = contentHeight; //未生成pdf的html页面高度
  13. let position = 0; //页面偏移
  14. //a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高
  15. let imgWidth = 595.28;
  16. let imgHeight = (592.28 / contentWidth) * contentHeight;
  17. //图片格式,(0-1,数字越大,代表导出的图片越清晰,默认值:0.92)
  18. let pageData = canvas.toDataURL("image/jpeg", 1.0);
  19. //第一个参数: l:横向 p:纵向
  20. //第二个参数:测量单位("pt","mm", "cm", "m", "in" or "px")
  21. //格式,默认为“a4”,如果想用自己的格式例如[595.28, 841.89]
  22. let PDF = new JsPDF("", "pt", "a4");
  23. //有两个高度需要区分,一个是html页面的实际高度,和生成pdf的页面高度(841.89)
  24. //当内容未超过pdf一页显示的范围,无需分页
  25. if (leftHeight < pageHeight) {
  26. PDF.addImage(pageData, "JPEG", 0, 0, imgWidth, imgHeight);
  27. } else {
  28. while (leftHeight > 0) {
  29. PDF.addImage(pageData, "JPEG", 0, position, imgWidth, imgHeight);
  30. leftHeight -= pageHeight;
  31. position -= 841.89;
  32. //避免添加空白页
  33. // if (leftHeight > 1) {
  34. // PDF.addPage()
  35. // }
  36. }
  37. }
  38. // 导出pdf文件命名
  39. PDF.save(title + ".pdf");
  40. });
  41. }
  42. export default printPdf