You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

205 lines
7.6 KiB

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>课程表打印</title>
  6. </head>
  7. <body>
  8. <style>
  9. #table td {
  10. text-align: center;
  11. width: 100px;
  12. }
  13. #pdfDom {
  14. /* width: 100%; */
  15. /* overflow-x: auto; */
  16. }
  17. #table {
  18. width: 100%;
  19. /* overflow-x: auto; */
  20. border-spacing: 0;
  21. }
  22. #table tr {
  23. }
  24. #exportReport {
  25. background-color: #409eff;
  26. border-radius: 4px;
  27. width: 100px;
  28. height: 40px;
  29. color: white;
  30. text-align: center;
  31. line-height: 40px;
  32. margin: 50px auto 0;
  33. }
  34. #exportReport:hover {
  35. cursor: pointer;
  36. background-color: #66b1ff;
  37. }
  38. </style>
  39. <div id="pdfDom">
  40. <table id="table" border="1"></table>
  41. </div>
  42. <div id="exportReport">导出</div>
  43. <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
  44. <script src="~/Content/js/PrintLesson/debug.js"></script>
  45. <script src="~/Content/js/PrintLesson/html2canvas.js"></script>
  46. <script>
  47. var url = '/PersonnelManagement/TimeTable/GetDataInEducation?'
  48. var search = window.location.href.split('?')[1].split('&')
  49. for (var i = 0; i < search.length; i++) {
  50. var data = search[i].split('=')
  51. url += data[0] + '=' + data[1] + '&'
  52. }
  53. url = url.slice(0, url.length - 1)
  54. $.get(window.origin + url, function (result) {
  55. var data = JSON.parse(result).data
  56. var classList = data.classinfolist;
  57. var classListNow = [];
  58. for (var i = 0; i < classList.length; i++) {
  59. classListNow.push(classList[i][0]);
  60. }
  61. data.classinfolist = classListNow;
  62. var dom = '<tr><td></td>'
  63. var week = 7
  64. var weekObj = {
  65. 0: '一',
  66. 1: '二',
  67. 2: '三',
  68. 3: '四',
  69. 4: '五',
  70. 5: '六',
  71. 6: '日',
  72. }
  73. // 生成一周七天表头
  74. for (var i = 0; i < week; i++) {
  75. dom += '<td colspan=' + data.maxlessontime + '>星期' + weekObj[i] + '</td>'
  76. }
  77. dom += '</tr><tr><td>班级|节次</td>'
  78. // 生成课程节次表头
  79. for (var j = 0; j < week; j++) {
  80. var index = 0
  81. for (var i = 0; i < data.maxlessontime; i++) {
  82. index++
  83. dom += '<td>' + (index) + '</td>'
  84. }
  85. }
  86. dom += '</tr>'
  87. // 生成每个班级的课程
  88. for (var i = 0; i < data.classinfolist.length; i++) {
  89. var classMsg = data.classinfolist[i]
  90. dom += '<tr classId=' + classMsg.TeachClassNo + '><td>' + classMsg.ClassName + '</td>'
  91. for (var j = 0; j < week; j++) {
  92. var index = 0
  93. for (var k = 0; k < data.maxlessontime; k++) {
  94. index++
  95. dom += '<td classId=' + classMsg.TeachClassNo + ' week=' + (j + 1) + ' time=' + index + '></td>'
  96. }
  97. }
  98. dom += '</td>'
  99. }
  100. table.innerHTML = dom
  101. var tableWidth = data.maxlessontime * 7 * 100
  102. table.style.width = tableWidth + 'px'
  103. // 开始渲染数据
  104. var domObj = {}
  105. var trsObj = {}
  106. var trs = document.getElementsByTagName('tr')
  107. for (var j = 0; j < trs.length; j++) {
  108. var id = trs[j].getAttribute('classId')
  109. if (id) {
  110. trsObj[id] = trs[j]
  111. }
  112. }
  113. //console.log(trsObj,'trsObj')
  114. for (var i = 0; i < data.weekList.length; i++) {
  115. var weekObj = data.weekList[i]
  116. for (var j = 0; j < weekObj.list.length; j++) {
  117. var weekList = weekObj.list[j]
  118. weekList['time'] = weekObj.time
  119. var tds = trsObj[weekList.teachClassNo].getElementsByTagName('td')
  120. for (var k = 0; k < tds.length; k++) {
  121. var time = tds[k].getAttribute('time')
  122. var classId = tds[k].getAttribute('classId')
  123. var week = tds[k].getAttribute('week')
  124. if (week == weekList.day && classId == weekList.teachClassNo && time == weekList.time) {
  125. tds[k].innerHTML = '<div>课程:' + weekList.curriculum + '</div><div>教师:' + weekList.teacher + '</div><div>教室:' + weekList.classRoom + '</div>'
  126. }
  127. }
  128. }
  129. }
  130. var downPdf = document.getElementById("exportReport"); //点击导出事件
  131. //console.log(downPdf, 'downPdf')
  132. function htmlToPdf() {
  133. html2canvas(document.body, {
  134. onrendered: function (canvas) {
  135. var contentWidth = canvas.width;
  136. var contentHeight = canvas.height;
  137. // 竖版打印
  138. // var a4Width = 592.28
  139. // var a4Height = 841.89
  140. // 横板打印
  141. var a4Height = 592.28
  142. var a4Width = 841.89
  143. //一页pdf显示html页面生成的canvas高度;
  144. var pageHeight = contentWidth / a4Width * a4Height;
  145. //未生成pdf的html页面高度
  146. var leftHeight = contentHeight;
  147. //pdf页面偏移
  148. var position = 0;
  149. //a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高
  150. var imgWidth = a4Width;
  151. var imgHeight = a4Width / contentWidth * contentHeight;
  152. var pageData = canvas.toDataURL('image/jpeg', 1.0);
  153. var pdf = new jsPDF('l', 'pt', 'a4');
  154. //console.log(imgWidth, imgHeight, '===')
  155. //有两个高度需要区分,一个是html页面的实际高度,和生成pdf的页面高度(841.89)
  156. //当内容未超过pdf一页显示的范围,无需分页
  157. if (leftHeight < pageHeight) {
  158. pdf.addImage(pageData, 'JPEG', 0, 0, imgWidth, imgHeight);
  159. } else {
  160. while (leftHeight > 0) {
  161. pdf.addImage(pageData, 'JPEG', 0, position, imgWidth, imgHeight)
  162. leftHeight -= pageHeight;
  163. position -= a4Height;
  164. //避免添加空白页
  165. if (leftHeight > 0) {
  166. pdf.addPage();
  167. }
  168. }
  169. }
  170. pdf.save('课程表.pdf');
  171. var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
  172. parent.layer.close(index); //再执行关闭
  173. parent.layer.msg('导出成功', {
  174. icon: 1
  175. });
  176. }
  177. })
  178. }
  179. downPdf.onclick = htmlToPdf
  180. });
  181. </script>
  182. </body>
  183. </html>