디자이너 컴포넌트 - 보고서 출력 미리 보기

이 샘플은 Angular, React, Vue 및 순수 JavaScript 응용 프로그램 내에서 ActiveReportsJS Designer 컴포넌트의 보고서 출력을 미리 보는 방법을 보여 줍니다. 디자이너 도구 모음에서 "미리 보기" 버튼을 클릭하면 현재 보고서가 표시된 뷰어가 열립니다. "PDF 미리 보기" 버튼을 클릭하면 보고서를 PDF로 내보내고 브라우저 설정에 따라 보고서가 자동으로 열리거나 다운로드됩니다. "디자이너 열기" 버튼을 클릭하면 디자이너 컴포넌트가 표시됩니다. 자세한 내용은 보고서 미리 보기 페이지를 방문하십시오. 코드를 보려면 아래로 스크롤하십시오.

import React, { Fragment } from "react"; import ReactDOM from "react-dom"; import { Viewer as ReportViewer, Designer } from "@mescius/activereportsjs-react"; import { PageReport } from "@mescius/activereportsjs/core"; import {exportDocument as pdfExport } from "@mescius/activereportsjs/pdfexport"; import { FontStore } from "@mescius/activereportsjs/core"; function App() { const designer = React.useRef(); const viewer = React.useRef(); const [designerVisible, setDesignerVisible] = React.useState(true); function onDesignerOpen() { setDesignerVisible(true); } async function onPdfPreview() { const reportInfo = await designer.current.getReport(); const report = new PageReport(); await report.load(reportInfo.definition); const doc = await report.run(); const result = await pdfExport(doc); result.download("exportedreport"); } function onReportPreview(report){ setDesignerVisible(false); viewer.current.open(report.definition); return Promise.resolve(); } return ( <Fragment> <div id="designer-toolbar" class="container-fluid"> <div class="row mt-3 mb-3"> {designerVisible && ( <button type="button" class="btn btn-outline-primary btn-sm col-sm-2 ml-1" onClick={() => onPdfPreview()} > PDF Preview </button> )} {!designerVisible && ( <button type="button" class="btn btn-outline-primary btn-sm col-sm-2 ml-1" onClick={() => onDesignerOpen()} > Open Designer </button> )} </div> </div> <div id="designer-host" style={{ display: designerVisible ? "block" : "none" }} > <Designer report={{ id: "reports/company-template.rdlx-json" }} ref={designer} onRender={onReportPreview} /> </div> {!designerVisible && ( <div id="viewer-host"> <ReportViewer ref={viewer} /> </div> )} </Fragment> ); } FontStore.registerFonts("/activereportsjs/demos/resource/fontsConfig.json"); ReactDOM.render(<App />, document.getElementById("root"));
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <title>ActiveReportsJS Report Designer Report Preview Sample</title> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <link rel="stylesheet" href="index.css" /> <link href="https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,300;0,400;0,500;0,600;0,700;1,400&display=swap" rel="stylesheet" /> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" integrity="sha384-JcKb8q3iqJ61gNV9KGb8thSsNjpSL0n8PARn9HuZOnIxN0hoP+VmmDGMN5t9UJ0Z" crossorigin="anonymous" /> <!-- SystemJS --> <script src="./vendor/system.src.js"></script> <script src="systemjs.config.js"></script> <script> System.import("./src/app"); </script> </head> <body> <div id="root"></div> <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous" ></script> <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js" integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN" crossorigin="anonymous" ></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js" integrity="sha384-B4gt1jrGC7Jh4AgTPSdUtOBvfO8shuf57BaghqFfPlYxofvL8/KUEfYiJOMMV+rV" crossorigin="anonymous" ></script> </body> </html>
@import url("/activereportsjs/demos/arjs/styles/ar-js-ui.css"); @import url("/activereportsjs/demos/arjs/styles/ar-js-designer.css"); @import url("/activereportsjs/demos/arjs/styles/ar-js-viewer.css"); #designer-host, #viewer-host { width: 100%; height: 500px; }
(function (global) { System.config({ transpiler: "plugin-babel", babelOptions: { es2015: true, react: true, }, meta: { "*.css": { loader: "css" }, }, paths: { // paths serve as alias "npm:": "node_modules/", }, // map tells the System loader where to look for things map: { css: "npm:systemjs-plugin-css/css.js", react: "npm:react/umd/react.production.min.js", "react-dom": "npm:react-dom/umd/react-dom.production.min.js", "@mescius/activereportsjs/pdfexport": "npm:@mescius/activereportsjs/dist/ar-js-pdf.js", "@mescius/activereportsjs/tabulardataexport": "npm:@mescius/activereportsjs/dist/ar-js-tabular-data.js", "@mescius/activereportsjs/htmlexport": "npm:@mescius/activereportsjs/dist/ar-js-html.js", "@mescius/activereportsjs/xlsxexport": "npm:@mescius/activereportsjs/dist/ar-js-xlsx.js", "@mescius/activereportsjs-react": "npm:@mescius/activereportsjs-react/lib/index.js", "@mescius/activereportsjs/reportviewer": "npm:@mescius/activereportsjs/dist/ar-js-viewer.js", "@mescius/activereportsjs/viewer": "npm:@mescius/activereportsjs/dist/ar-js-viewer.js", "@mescius/activereportsjs/reportdesigner": "npm:@mescius/activereportsjs/dist/ar-js-designer.js", "@mescius/activereportsjs": "npm:@mescius/activereportsjs/dist/ar-js-core.js", "@mescius/activereportsjs/core": "npm:@mescius/activereportsjs/dist/ar-js-core.js", "@mescius/activereportsjs/styles": "npm:@mescius/activereportsjs/styles", "@mescius/activereportsjs-i18n": "npm:@mescius/activereportsjs-i18n/dist/ar-js-locales.js", "@mescius/activereportsjs-i18n-ja": "npm:@mescius/activereportsjs-i18n/dist/designer/ja-locale.js", "@mescius/activereportsjs-i18n-zh": "npm:@mescius/activereportsjs-i18n/dist/designer/zh-locale.js", "@mescius/ar-js-pagereport": "npm:@mescius/activereportsjs/dist/ar-js-core.js", "plugin-babel": "npm:systemjs-plugin-babel/plugin-babel.js", "systemjs-babel-build": "npm:systemjs-plugin-babel/systemjs-babel-browser.js", }, // packages tells the System loader how to load when no filename and/or no extension packages: { src: { defaultExtension: "jsx", }, node_modules: { defaultExtension: "js", }, }, }); })(this);