diff --git a/src/utils/index.js b/src/utils/index.js index 252f7ab..317015a 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -276,7 +276,7 @@ export function b64DecodeUnicode(str) { }) .join("") ); - } catch (e) {} + } catch (e) { } return uni; } @@ -885,12 +885,12 @@ export function formatGradeNameClass(data) { ///试卷定制化打印 export async function paperPrint(paper) { - let printWin = window.open("", "_blank", "width=800,height=600,resizable=no"); + let printWin = window.open("", "_blank", "width=800,height=600,resizable=no"); var browser = getBrowserEngine(printWin); var subjectName = paper.subjectName; var paperTitle = paper.title; var paperQuestions = paper.questionList; - function getBrowserEngine(windowParams) { + function getBrowserEngine(windowParams) { if (windowParams.navigator.userAgent.indexOf("Edge") > -1) { return "EdgeHTML"; } @@ -911,6 +911,10 @@ export async function paperPrint(paper) { } return "Blink"; // Assume it's Chrome, Safari, or an alternative Blink-based browser } + function windowPrint(windowParams) { + windowParams.print(); + windowParams.close(); + } function numberToChinese(num) { const chineseDigits = ["零", "一", "二", "三", "四", "五", "六", "七", "八", "九"]; const chineseUnits = ["", "十", "百", "千", "万", "亿"]; @@ -967,19 +971,21 @@ export async function paperPrint(paper) { printWin.document.documentElement.scrollHeight, // 整个文档高度 printWin.document.body.scrollHeight // Body 的高度 ); - const totalHeightMM = totalHeightPx * 25.4 / 96; - // ie浏览器高度 - var A4HeightMM = 287; - if (browser == "Google Chrome") { - A4HeightMM = 297; - } - var pages = Math.ceil(totalHeightMM / A4HeightMM) + 1; - for (var page = 0; page < pages; page++) { - var pageFooteDiv = printWin.document.createElement('div'); - pageFooteDiv.classList.add('page-footer'); - pageFooteDiv.innerText = `${paperTitle} ${subjectName} 第${page + 1}页(共${pages}页)`; - pageFooteDiv.style.top = (page + 1) * A4HeightMM + (page * 5.5) + 'mm'; - printWin.document.body.appendChild(pageFooteDiv); + const a4Box = printWin.document.createElement('div'); + a4Box.classList.add('altA4Box'); + printWin.document.body.appendChild(a4Box); + const a4BoxHeightPx = a4Box.offsetHeight; + if (a4BoxHeightPx > 0) { + printWin.document.body.removeChild(a4Box); + var pages = Math.ceil(totalHeightPx / a4BoxHeightPx); + if (pages > 2) pages += 1; + for (var page = 0; page < pages; page++) { + var pageFooteDiv = printWin.document.createElement('div'); + pageFooteDiv.classList.add('page-footer'); + pageFooteDiv.innerText = `${paperTitle} ${subjectName} 第${page + 1}页(共${pages}页)`; + pageFooteDiv.style.top = (page + 1) * a4BoxHeightPx + (page * 25) + 'px'; + printWin.document.body.appendChild(pageFooteDiv); + } } } // size: A4 portrait; @@ -991,25 +997,33 @@ export async function paperPrint(paper) { @media print { @page { - size: A4 portrait; - height: 300mm; - margin-top:5mm; + size: A4 portrait; + margin-top:0mm; margin-bottom:10mm; - margin-left:2mm; - margin-right:2mm; + margin-left:4mm; + margin-right:4mm; } - - body { - counter-reset: page-number; /* 重置页码计数器 */ - } - - mn { - padding-top:2px; - } - } + .altA4Box { + display:none; + } + } + mn { + padding-top:2px; + } + .bodyBox { + width: 210mm; + padding-top:0mm; + padding-bottom:0mm; + padding-left:4mm; + padding-right:4mm; + } + .altA4Box { + height: 317mm; + } table tfoot { - height: 0px; + height: 30px; display: table-footer-group; + } table thead { height: 20px; @@ -1092,6 +1106,9 @@ export async function paperPrint(paper) { printWin.document.head.appendChild(style); + const bodyBoxDom = printWin.document.createElement('div'); + bodyBoxDom.classList.add('bodyBox'); + const titleBoxDom = printWin.document.createElement('div'); titleBoxDom.classList.add('title-header'); const titleDom = printWin.document.createElement('h3'); @@ -1102,7 +1119,7 @@ export async function paperPrint(paper) { subjectDom.classList.add('title-content'); titleBoxDom.appendChild(titleDom); titleBoxDom.appendChild(subjectDom); - printWin.document.body.appendChild(titleBoxDom); + bodyBoxDom.appendChild(titleBoxDom); const studentInputBoxDom = printWin.document.createElement('div'); studentInputBoxDom.classList.add('student-input'); @@ -1115,9 +1132,9 @@ export async function paperPrint(paper) { studentInputBoxDom.appendChild(studentClassInputDom); studentInputBoxDom.appendChild(studentNameInputDom); studentInputBoxDom.appendChild(studentNoInputDom); - printWin.document.body.appendChild(studentInputBoxDom); + bodyBoxDom.appendChild(studentInputBoxDom); - const tableDom = printWin.document.createElement('table'); + const tableDom = printWin.document.createElement('table'); const theadDom = printWin.document.createElement('thead'); const theadTrDom = printWin.document.createElement('tr'); theadTrDom.appendChild(printWin.document.createElement('th')); @@ -1166,12 +1183,12 @@ export async function paperPrint(paper) { qTbodyContentTdDom.appendChild(questionDom); qTbodyTrDom.appendChild(qTbodyLeftAltTdDom); qTbodyTrDom.appendChild(qTbodyContentTdDom); - qTbodyTrDom.appendChild(qTbodyRightAltTdDom); + qTbodyTrDom.appendChild(qTbodyRightAltTdDom); tbodyDom.appendChild(qTbodyTrDom); } } tableDom.appendChild(tbodyDom); - printWin.document.body.appendChild(tableDom); + bodyBoxDom.appendChild(tableDom); const tfootDom = printWin.document.createElement('tfoot'); const tfootTrDom = printWin.document.createElement('tr'); @@ -1180,17 +1197,21 @@ export async function paperPrint(paper) { tfootTrDom.appendChild(printWin.document.createElement('td')); tfootDom.appendChild(tfootTrDom); tableDom.appendChild(tfootDom); + printWin.document.body.appendChild(bodyBoxDom); // generatePageParams(); const iamges = printWin.document.querySelectorAll('img'); if (iamges.length >= 1) { - iamges[iamges.length - 1].onload = function () { - printWin.print(); - printWin.close(); + var lastImage = iamges[iamges.length - 1]; + if (lastImage.complete) { + windowPrint(printWin); + } else { + lastImage.onload = function () { + windowPrint(printWin); + } } } else { - printWin.print(); - printWin.close(); - } + windowPrint(printWin); + } } export function tablePrint(options) {