pdf.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import html2canvas from 'html2canvas';
  2. import jsPDF from 'jspdf';
  3. const ratio = 1; //放大 兼容低分辨率屏幕清晰度
  4. export const margin = 10; //边距
  5. // A4宽高
  6. export const a4Width = 595.28;
  7. export const a4Height = 841.89;
  8. // let pdf = null;
  9. export const downloadPDF = (pages, splitPos, fileName = '工单') => {
  10. // direction : 方向
  11. html2canvas(pages, { scale: ratio }).then((canvas) => {
  12. let pdf = new jsPDF('', 'pt', 'a4');
  13. var imgWidth = a4Width - margin * 2;
  14. //a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高
  15. const ctx = canvas.getContext('2d');
  16. splitPos.reduce((pre, pos) => {
  17. const pageData = ctx.getImageData(
  18. 0,
  19. pre * ratio,
  20. canvas.width,
  21. pos * ratio - pre * ratio
  22. );
  23. //a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高
  24. var imgHeight = (imgWidth / canvas.width) * (pos * ratio - pre * ratio);
  25. pdf.addImage(pageData, 'JPEG', margin, 10, imgWidth, imgHeight);
  26. if (pos < canvas.height) {
  27. pdf.addPage();
  28. }
  29. return pos;
  30. }, 0);
  31. pdf.save(`${fileName}.pdf`);
  32. const blob = pdf.output('blob');
  33. var blob_url = URL.createObjectURL(blob);
  34. window.open(blob_url);
  35. pdf = null;
  36. });
  37. };