개요

SpreadJS에서 인쇄 플러그인을 사용하여 단일 시트 또는 모든 시트를 인쇄할 수 있습니다. 이를 통해 Spread 인스턴스를 인쇄할 수 있는 기능을 사용자에게 쉽게 제공할 수 있습니다. Spread 인스턴스는 정보를 입력하고 실제 사본을 원하는 일종의 대시보드 또는 양식이 있는 경우 특히 유용합니다.

이 데모에서는 워크시트 인쇄선을 표시하고 .sjs-print-line CSS 클래스로 사용자 지정하는 방법도 보여 줍니다.

인쇄 기능을 사용하려면 Spread 링크 아래의 문서 헤더 섹션에 JS 파일 링크를 추가합니다. 예를 들어 다음과 같습니다. 그런 다음 print 메서드를 사용하여 인쇄 기능을 사용할 수 있습니다. 해당 메서드는 다음과 같이 정의됩니다. 여기서 선택적 매개 변수 sheetIndex는 어떤 시트를 인쇄할지를 알려줍니다. 모든 시트를 인쇄하는 경우에는 생략합니다. 예를 들어 다음과 같이 모든 시트를 인쇄할 수 있습니다. 워크시트 인쇄 미리 보기 선을 표시하고 관련 CSS 클래스를 재정의하여 색상과 너비를 사용자 지정할 수 있습니다. .sjs-print-line은 자동 계산된 인쇄선을 제어합니다. 기본 테두리 색상은 #9f9f9f, 기본 너비는 1px입니다. .sjs-print-page-break는 수동 행/열 페이지 나누기를 제어합니다. 기본 테두리 색상은 #000000, 기본 너비는 1px입니다. .sjs-print-area는 설정된 인쇄 영역의 경계를 제어합니다. 기본 테두리 색상은 #000000, 기본 너비는 1px입니다. 이 데모에서는 설정 패널에서 세 클래스의 스타일을 각각 조정할 수 있도록 재정의합니다.
window.onload = function () { var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss")); initSpread(spread); initPrintPreviewOptions(spread); document.getElementById('btnPrint').onclick = function () { spread.print(); }; }; function initPrintPreviewOptions(spread) { var styleOptions = [ createStyleOption(".sjs-print-line", "printLine"), createStyleOption(".sjs-print-page-break", "pageBreak"), createStyleOption(".sjs-print-area", "printArea") ]; var printPreviewStyle = document.createElement("style"); var repaintTimer = null; printPreviewStyle.id = "print-preview-style"; document.head.appendChild(printPreviewStyle); function createStyleOption(selector, idPrefix) { return { selector: selector, colorInput: document.getElementById(idPrefix + "Color"), widthInput: document.getElementById(idPrefix + "Width"), colorText: document.getElementById(idPrefix + "ColorText"), widthText: document.getElementById(idPrefix + "WidthText") }; } function repaintPrintPreview() { var sheet = spread.getActiveSheet(); if (sheet && sheet.repaint) { sheet.repaint(); } else if (spread.repaint) { spread.repaint(); } } function scheduleRepaint(immediate) { if (repaintTimer) { clearTimeout(repaintTimer); repaintTimer = null; } if (immediate) { repaintPrintPreview(); return; } repaintTimer = setTimeout(repaintPrintPreview, 80); } function updatePrintPreviewStyles(immediate) { var rules = styleOptions.map(function (option) { var color = option.colorInput.value; var width = option.widthInput.value; option.colorText.textContent = color; option.widthText.textContent = width + "px"; return option.selector + " { border-color: " + color + "; border-width: " + width + "px; }"; }); printPreviewStyle.textContent = rules.join("\n"); scheduleRepaint(immediate); } styleOptions.forEach(function (option) { option.colorInput.oninput = function () { updatePrintPreviewStyles(false); }; option.colorInput.onchange = function () { updatePrintPreviewStyles(true); }; option.widthInput.oninput = function () { updatePrintPreviewStyles(false); }; option.widthInput.onchange = function () { updatePrintPreviewStyles(true); }; }); updatePrintPreviewStyles(true); } function initSpread(spread) { var sheet = spread.getActiveSheet(); sheet.suspendPaint(); sheet.options.allowCellOverflow = true; sheet.name("Demo"); spread.sheets[0].setText(31, 8, " "); sheet.addSpan(1, 1, 1, 1); sheet.setValue(1, 1, "Month"); sheet.setValue(2, 1, "January"); sheet.setValue(3, 1, "February"); sheet.setValue(4, 1, "March"); sheet.setValue(5, 1, "April"); sheet.setValue(6, 1, "May"); sheet.setValue(7, 1, "June"); sheet.setValue(8, 1, "July"); sheet.setValue(9, 1, "August"); sheet.setValue(10, 1, "September"); sheet.setValue(11, 1, "October"); sheet.setValue(12, 1, "November"); sheet.setValue(13, 1, "December"); sheet.addSpan(1, 2, 1, 1); sheet.setValue(1, 2, "Quantity"); sheet.setValue(2, 2, 60); sheet.setValue(3, 2, 100); sheet.setValue(4, 2, 110); sheet.setValue(5, 2, 90); sheet.setValue(6, 2, 112); sheet.setValue(7, 2, 137); sheet.setValue(8, 2, 80); sheet.setValue(9, 2, 88); sheet.setValue(10, 2, 118); sheet.setValue(11, 2, 122); sheet.setValue(12, 2, 130); sheet.setValue(13, 2, 135); sheet.addSpan(1, 3, 1, 1); sheet.setValue(1, 3, "Price"); sheet.setValue(2, 3, 30.0); sheet.setValue(3, 3, 45.0); sheet.setValue(4, 3, 10.0); sheet.setValue(5, 3, 99.9); sheet.setValue(6, 3, 89.0); sheet.setValue(7, 3, 150.0); sheet.setValue(8, 3, 35.0); sheet.setValue(9, 3, 59.9); sheet.setValue(10, 3, 47.9); sheet.setValue(11, 3, 55.0); sheet.setValue(12, 3, 32.0); sheet.setValue(13, 3, 20.0); sheet.addSpan(1, 4, 1, 1); sheet.setValue(1, 4, "Total"); sheet.setFormula(2, 4, "=C3*D3"); sheet.setFormula(3, 4, "=C4*D4"); sheet.setFormula(4, 4, "=C5*D5"); sheet.setFormula(5, 4, "=C6*D6"); sheet.setFormula(6, 4, "=C7*D7"); sheet.setFormula(7, 4, "=C8*D8"); sheet.setFormula(8, 4, "=C9*D9"); sheet.setFormula(9, 4, "=C10*D10"); sheet.setFormula(10, 4, "=C11*D11"); sheet.setFormula(11, 4, "=C12*D12"); sheet.setFormula(12, 4, "=C13*D13"); sheet.setFormula(13, 4, "=C14*D14"); // set column width sheet.setColumnWidth(0, 50); sheet.setColumnWidth(1, 100); sheet.setColumnWidth(2, 60); sheet.setColumnWidth(3, 60); sheet.setColumnWidth(4, 90); sheet.setColumnWidth(5, 50); //set alignment sheet.getRange(1, 1, 1, 4).hAlign(GC.Spread.Sheets.HorizontalAlign.center) //set formatter sheet.getRange(2, 3, 12, 1).formatter("$ #,##0"); sheet.getRange(2, 4, 12, 1).formatter("$ #,##0"); //set color sheet.getRange(1, 1, 1, 4).backColor("#69a569").foreColor("white"); //set lineBorder sheet.getRange(2, 1, 12, 4).setBorder(new GC.Spread.Sheets.LineBorder("#A8A9AD", GC.Spread.Sheets.LineStyle.dotted), { all: true }); addFigures(sheet); var printInfo = sheet.printInfo(); printInfo.paperSize(new GC.Spread.Sheets.Print.PaperSize(GC.Spread.Sheets.Print.PaperKind.a4)); printInfo.rowStart(1); printInfo.rowEnd(19); printInfo.columnStart(1); printInfo.columnEnd(13); sheet.setRowPageBreak(16, true); sheet.setColumnPageBreak(2, true); sheet.isPrintLineVisible(true); sheet.resumePaint(); } function addFigures(sheet) { sheet.getRange(20, -1, 1, -1).visible(false); sheet.addSpan(4, 6, 6, 3); sheet.setFormula(4, 6, '=PIESPARKLINE(E3:E7, "#e6f0e6","#c9dec9","#a3c8a3","#73ab73","#d1ffd1")'); sheet.addSpan(10, 6, 1, 3); sheet.getCell(10, 6).text("Figure 1").hAlign(1); }
<!doctype html> <html style="height:100%;font-size:14px;"> <head> <meta charset="utf-8" /> <meta name="spreadjs culture" content="ko-kr" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <link rel="stylesheet" type="text/css" href="$DEMOROOT$/ko/purejs/node_modules/@mescius/spread-sheets/styles/gc.spread.sheets.excel2013white.css"> <script src="$DEMOROOT$/ko/purejs/node_modules/@mescius/spread-sheets/dist/gc.spread.sheets.all.min.js" type="text/javascript"></script> <script src="$DEMOROOT$/ko/purejs/node_modules/@mescius/spread-sheets-print/dist/gc.spread.sheets.print.min.js" type="text/javascript"></script> <script src="$DEMOROOT$/ko/purejs/node_modules/@mescius/spread-sheets-resources-ko/dist/gc.spread.sheets.resources.ko.min.js" type="text/javascript"></script> <script src="$DEMOROOT$/spread/source/js/license.js" type="text/javascript"></script> <script src="app.js" type="text/javascript"></script> <link rel="stylesheet" type="text/css" href="styles.css"> </head> <body> <div class="sample-tutorial"> <div id="ss" class="sample-spreadsheets"></div> <div class="options-container"> <div class="panel-header"> <div> <h3>Print Preview Settings</h3> </div> </div> <div class="settings-stack"> <section class="settings-group" aria-labelledby="printLineHeading"> <h4 id="printLineHeading">Print Line</h4> <div class="setting-row"> <label for="printLineColor">Color</label> <div class="control-inline"> <input type="color" id="printLineColor" value="#2e9d5b"> <span id="printLineColorText">#2e9d5b</span> </div> </div> <div class="setting-row"> <label for="printLineWidth">Width</label> <div class="control-inline"> <input type="range" id="printLineWidth" min="1" max="8" value="2"> <span id="printLineWidthText">2px</span> </div> </div> </section> <section class="settings-group" aria-labelledby="pageBreakHeading"> <h4 id="pageBreakHeading">Page Break</h4> <div class="setting-row"> <label for="pageBreakColor">Color</label> <div class="control-inline"> <input type="color" id="pageBreakColor" value="#87ceeb"> <span id="pageBreakColorText">#87ceeb</span> </div> </div> <div class="setting-row"> <label for="pageBreakWidth">Width</label> <div class="control-inline"> <input type="range" id="pageBreakWidth" min="1" max="8" value="2"> <span id="pageBreakWidthText">2px</span> </div> </div> </section> <section class="settings-group" aria-labelledby="printAreaHeading"> <h4 id="printAreaHeading">Print Area</h4> <div class="setting-row"> <label for="printAreaColor">Color</label> <div class="control-inline"> <input type="color" id="printAreaColor" value="#ffc0cb"> <span id="printAreaColorText">#ffc0cb</span> </div> </div> <div class="setting-row"> <label for="printAreaWidth">Width</label> <div class="control-inline"> <input type="range" id="printAreaWidth" min="1" max="8" value="2"> <span id="printAreaWidthText">2px</span> </div> </div> </section> </div> <div class="panel-actions"> <input type="button" value="Print" id="btnPrint"> </div> </div> </div> </body> </html>
.sample-tutorial { position: relative; height: 100%; overflow: hidden; } .sample-spreadsheets { width: calc(100% - 280px); height: 100%; overflow: hidden; float: left; } .options-container { float: right; width: 280px; padding: 18px 16px; height: 100%; box-sizing: border-box; background: #f7f8fa; border-left: 1px solid #dde2e8; overflow: auto; color: #202734; } .panel-header { padding-bottom: 16px; margin-bottom: 16px; border-bottom: 1px solid #e2e6eb; } .panel-header h3 { margin: 0 0 6px; font-size: 16px; font-weight: 600; } .settings-stack { display: flex; flex-direction: column; gap: 12px; } .settings-group { padding: 12px; border: 1px solid #e0e5eb; border-radius: 6px; background: #fff; } .settings-group h4 { margin: 0 0 12px; color: #202734; font-size: 14px; font-weight: 600; } .setting-row { margin-bottom: 16px; } .setting-row:last-child { margin-bottom: 0; } .setting-row label { display: block; margin-bottom: 8px; color: #394252; font-size: 13px; font-weight: 600; } .control-inline { display: flex; align-items: center; gap: 10px; } .control-inline input[type="color"] { flex: 0 0 auto; width: 38px; height: 32px; padding: 0; border: 1px solid #cfd6df; border-radius: 4px; background: #fff; } .control-inline input[type="range"] { flex: 1 1 auto; min-width: 0; } .control-inline span { min-width: 48px; color: #4d5767; font-size: 12px; text-align: right; } .panel-actions { margin-top: 16px; } input[type="button"] { display: block; width: 100%; height: 30px; padding: 4px 12px; border: 1px solid #9db8dd; border-radius: 2px; background: #fff; color: #003e7e; font-weight: 600; cursor: pointer; } input[type="button"]:hover { border-color: #6e9ed4; background: #f5f9ff; } input[type="button"]:active { border-color: #3f7ec0; background: #eaf3ff; } body { position: absolute; top: 0; bottom: 0; left: 0; right: 0; }