html2pdf.js 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. var whiteImg = "data:image/jpeg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAA8AAD/4QMraHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjMtYzAxMSA2Ni4xNDU2NjEsIDIwMTIvMDIvMDYtMTQ6NTY6MjcgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjk2QjIxRjMxMDY4RDExRUE5NEYyRUI4OUU5NEFDQzE5IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjk2QjIxRjMyMDY4RDExRUE5NEYyRUI4OUU5NEFDQzE5Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OTZCMjFGMkYwNjhEMTFFQTk0RjJFQjg5RTk0QUNDMTkiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6OTZCMjFGMzAwNjhEMTFFQTk0RjJFQjg5RTk0QUNDMTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7/7gAOQWRvYmUAZMAAAAAB/9sAhAAGBAQEBQQGBQUGCQYFBgkLCAYGCAsMCgoLCgoMEAwMDAwMDBAMDg8QDw4MExMUFBMTHBsbGxwfHx8fHx8fHx8fAQcHBw0MDRgQEBgaFREVGh8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx//wAARCAAIAxUDAREAAhEBAxEB/8QASwABAQAAAAAAAAAAAAAAAAAAAAgBAQAAAAAAAAAAAAAAAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAARAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/AKpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//2Q==";
  2. function ExportPdf(printId, pdfName) {
  3. $('body').append($(
  4. '<div id="pdfTip" class="pdfTip" style="width: 500px;height:50px;background:rgba(0,0,0,.5);color: red;position: fixed;top: 0;left: 0;right: 0;bottom: 0;margin: auto; z-index:9999;"><div style="text-align:center;line-height:50px;font-size:20px;font-weight:600;">正在生成PDF,请稍后...</div></div>'));
  5. html2canvas(document.querySelector("#" + printId),
  6. {
  7. allowTaint: true,
  8. scale: 1
  9. }).then((function (canvas) {
  10. //未生成pdf的html页面高度
  11. var leftHeight = canvas.height;
  12. var ph = 30;
  13. var a4Width = 595.28;
  14. var a4Height = 841.89 ;
  15. //一页pdf显示html页面生成的canvas高度;
  16. var a4HeightRef = Math.floor(canvas.width / a4Width * a4Height);
  17. //pdf页面偏移
  18. var position = 0;
  19. var pageData = canvas.toDataURL('image/jpeg', 1.0);
  20. var pdf = new jsPDF('x', 'pt', 'a4');
  21. var index = 1,
  22. canvas1 = document.createElement('canvas'),
  23. height;
  24. pdf.setDisplayMode('fullwidth', 'continuous', 'FullScreen');
  25. $('#pdfTip >div').html('正在生成第<span class="pdfProgress">1</span>页,共<span class="pdfTotal"></span>页...');
  26. function createImpl(canvas) {
  27. if (leftHeight > 0) {
  28. index++;
  29. var checkCount = 0;
  30. if (leftHeight > a4HeightRef) {
  31. for (var i = position + a4HeightRef; i >= position; i--) {
  32. var isWrite = true;
  33. for (var j = 0; j < canvas.width; j++) {
  34. var c = canvas.getContext('2d').getImageData(j, i, 1, 1).data;
  35. if (c[0] != 0xff || c[1] != 0xff || c[2] != 0xff) {
  36. isWrite = false;
  37. break;
  38. }
  39. }
  40. if (isWrite) {
  41. checkCount++;
  42. if (checkCount >= 10) {
  43. break;
  44. }
  45. } else {
  46. checkCount = 0;
  47. }
  48. }
  49. height = Math.round(i - position) || Math.min(leftHeight, a4HeightRef);
  50. if (height <= 0) {
  51. height = a4HeightRef;
  52. }
  53. } else {
  54. height = leftHeight;
  55. }
  56. canvas1.width = canvas.width;
  57. canvas1.height = height;
  58. // console.log(index, 'height:', height, 'pos', position);
  59. var ctx = canvas1.getContext('2d');
  60. ctx.drawImage(canvas, 0, position, canvas.width, height, 0, 0, canvas.width, height);
  61. //var pageHeight = Math.round(a4Width / canvas.width * height);
  62. // pdf.setPageSize(null, pageHeight)
  63. if (position != 0) {
  64. pdf.addPage();
  65. }
  66. //pdf.addImage(whiteImg, "jpeg", 0, 0, a4Width, ph);
  67. var h = a4Width / canvas1.width * height;
  68. pdf.addImage(canvas1.toDataURL('image/jpeg', 1.0),'JPEG',0,0,a4Width,h);
  69. //pdf.addImage(whiteImg, "jpeg", 0, 0, a4Width, h + ph);
  70. leftHeight -= height;
  71. position += height;
  72. $('#pdfTip .pdfProgress').text(index + 1);
  73. $('#pdfTip .pdfTotal').text(index + Math.ceil(leftHeight / a4HeightRef));
  74. if (leftHeight > 0) {
  75. setTimeout(createImpl, 500, canvas);
  76. } else {
  77. pdf.save(pdfName + '.pdf');
  78. $('#pdfTip').remove();
  79. }
  80. }
  81. }
  82. //当内容未超过pdf一页显示的范围,无需分页
  83. if (leftHeight < a4HeightRef) {
  84. pdf.addImage(pageData, 'JPEG', 0, 0, a4Width, a4Width / canvas.width * leftHeight);
  85. pdf.save(pdfName + '.pdf');
  86. } else {
  87. try {
  88. pdf.deletePage(0);
  89. $('.pdfTip').show();
  90. $('.pdfTotal').text(index + Math.ceil(leftHeight / a4HeightRef));
  91. setTimeout(createImpl, 500, canvas);
  92. } catch (err) {
  93. console.log(err);
  94. }
  95. }
  96. }));
  97. }
  98. //function ExportPdf(printId,name) {
  99. // html2canvas(document.querySelector("#" + printId),
  100. // {
  101. // allowTaint: !0,
  102. // scale: 2
  103. // }).then((function(canvas) {
  104. // var contentWidth = canvas.width,
  105. // contentHeight = canvas.height,
  106. // pageData = canvas.toDataURL("image/jpeg", 1),
  107. // pdfX,
  108. // pdfY = contentHeight / 2 * .75,
  109. // whiteHeight = 60,
  110. // pdfW = 595.32,
  111. // pdfH = 841.89,
  112. // imgX = contentWidth / 2 * .75,
  113. // imgY = contentHeight / 2 * .75,
  114. // imgH = 721.89,
  115. // position = 60,
  116. // pageTempHeight = contentHeight / 2 * .75,
  117. // PDF = new jsPDF("", "pt", "a4");
  118. // if (imgY < imgH)
  119. // PDF.addImage(whiteImg, "jpeg", 0, 0, pdfW, 60),
  120. // PDF.addImage(pageData, "jpeg", 0, 0, imgX, imgH),
  121. // PDF.addImage(whiteImg, "jpeg", 0, 781.89, pdfW, 60);
  122. // else
  123. // for (; pageTempHeight > 0;)
  124. // PDF.addImage(pageData, "jpeg", 0, position, imgX, imgY),
  125. // PDF.addImage(whiteImg, "jpeg", 0, 0, pdfW, 60),
  126. // PDF.addImage(whiteImg, "jpeg", 0, 782.89, pdfW, 60),
  127. // position -= imgH,
  128. // (pageTempHeight -= imgH) > 0 && PDF.addPage();
  129. // PDF.save(name + ".pdf");
  130. // }));
  131. //}