1回答

0收藏

html页面生成pdf下载

前端知识 前端知识 1084 人阅读 | 1 人回复 | 2024-07-27

html2canvas 生成pdf文件里面的css不能带transform属性,缩放,旋转的属性不能用。内容会打印不出来
  1. <script src="/static/default/web/js/html2canvas.js"></script>
  2.                         <script src="/static/default/web/js/jspdf.debug.js"></script>
  3.                         <script src="/static/default/web/js/canvas2image.js"></script>
  4.                         <script>
  5.                                 function exportReportTemplet() {
  6.                                         var element = $("#print"); // 这个dom元素是要导出pdf的div容器
  7.                                         var w = element.width(); // 获得该容器的宽
  8.                                         var h = element.height(); // 获得该容器的高
  9.                                         var offsetTop = element.offset().top; // 获得该容器到文档顶部的距离
  10.                                         var offsetLeft = element.offset().left; // 获得该容器到文档最左的距离
  11.                                         var canvas = document.createElement("canvas");
  12.                                         canvas.width = w * 2; // 将画布宽&&高放大两倍
  13.                                         canvas.height = h * 2;
  14.                                         var context = canvas.getContext("2d");
  15.                                         var scale = 2;
  16.                                         context.scale(2, 2);
  17.                                         //  context.translate(-offsetLeft - abs, -offsetTop);

  18.                                         var opts = {
  19.                                                 scale: scale,
  20.                                                 canvas: canvas,
  21.                                                 width: w,
  22.                                                 height: h,
  23.                                                 useCORS: true,
  24.                                                 background: '#FFF'

  25.                                         }
  26.                                         $(window).scrollTop(offsetTop);

  27.                                         html2canvas(element, opts).then(function(canvas) {
  28.                                                 allowTaint: false;
  29.                                                 taintTest: false;
  30.                                                 var contentWidth = canvas.width;
  31.                                                 var contentHeight = canvas.height;
  32.                                                 //一页pdf显示html页面生成的canvas高度;
  33.                                                 var pageHeight = contentWidth / 592.28 * 841.89;
  34.                                                 //未生成pdf的html页面高度
  35.                                                 var leftHeight = contentHeight;
  36.                                                 //页面偏移
  37.                                                 var position = 0;
  38.                                                 //a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高
  39.                                                 var imgWidth = 595.28;
  40.                                                 var imgHeight = 592.28 / contentWidth * contentHeight;

  41.                                                 var pageData = canvas.toDataURL('image/jpeg', 1.0);
  42.                                                 //   var oCanvas = document.getElementById("print");
  43.                                                 // Canvas2Image.saveAsJPEG(oCanvas);
  44.                                                 var pdf = new jsPDF('', 'pt', 'a4');

  45.                                                 //有两个高度需要区分,一个是html页面的实际高度,和生成pdf的页面高度(841.89)
  46.                                                 //当内容未超过pdf一页显示的范围,无需分页
  47.                                                 if (leftHeight < pageHeight) {
  48.                                                         pdf.addImage(pageData, 'JPEG', 0, 0, imgWidth, imgHeight);
  49.                                                 } else { // 分页
  50.                                                         while (leftHeight > 0) {
  51.                                                                 pdf.addImage(pageData, 'JPEG', 0, position, imgWidth, imgHeight)
  52.                                                                 leftHeight -= pageHeight;
  53.                                                                 position -= 841.89;
  54.                                                                 //避免添加空白页
  55.                                                                 if (leftHeight > 0) {
  56.                                                                         pdf.addPage();
  57.                                                                 }
  58.                                                         }
  59.                                                 }
  60.                                                 pdf.save('{$xinghao}.pdf');
  61.                                         })

  62.                                 }
  63.                         </script>
复制代码

分享到:
回复

使用道具 举报

回答|共 1 个

zhanglv

发表于 2024-7-27 15:36:56 | 显示全部楼层

如果打印区域有问题,调整上面:context.scale(2, 2);数值微调即可
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

89 积分
17 主题
+ 关注