找回密码
 立即注册

QQ登录

只需一步,快速开始

KearneyKang 讲师达人认证 悬赏达人认证
超级版主   /  发表于:2021-3-2 11:11  /   查看:2582  /  回复:2
ARJS2.0支持在线设计报表,现在我们就来讲解如何进行在Html页面中进行web端在线设计器1、首先新建一个Html页面,具体实现代码如下:
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="utf-8" />
  5.     <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  6.     <title>ActiveReportsJS sample</title>
  7.     <meta name="viewport" content="width=device-width, initial-scale=1.0" />

  8.     <script src="/dist/ie-polyfills.js"></script>
  9.     <script src="/dist/ar-js-core.js"></script>
  10.     <script src="/dist/ar-js-designer.js"></script>
  11.     <script src="/dist/ar-js-viewer.js"></script>
  12.     <script src="/dist/ar-js-pdf.js"></script>
  13.     <script src="/dist/designer/zh-locale.js"></script>
  14.     <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"
  15.           rel="stylesheet" />
  16.     <link rel="stylesheet"
  17.           href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"
  18.           integrity="sha384-JcKb8q3iqJ61gNV9KGb8thSsNjpSL0n8PARn9HuZOnIxN0hoP+VmmDGMN5t9UJ0Z"
  19.           crossorigin="anonymous" />
  20.     <link rel="stylesheet"
  21.           type="text/css"
  22.           href="/styles/ar-js-ui.css" />
  23.     <link rel="stylesheet"
  24.           type="text/css"
  25.           href="/styles/ar-js-viewer.css" />
  26.     <link rel="stylesheet"
  27.           type="text/css"
  28.           href="/styles/ar-js-designer.css" />
  29.     <style>
  30.         #designer-host, #viewer-host {
  31.             margin: 0 auto;
  32.             width: 100%;
  33.             height: 500px;
  34.         }
  35.     </style>
  36. </head>
  37. <body>
  38.     <div id="designer-toolbar" class="container-fluid">
  39.         <div class="row mt-3 mb-3">
  40.             <button id="btnPdfPreview"
  41.                     type="button"
  42.                     class="btn btn-primary btn-sm col-sm-2 ml-1"
  43.                     onclick="onPdfPreview()">
  44.                 PDF 预览
  45.             </button>
  46.             <button id="btnDesignerOpen"
  47.                     type="button"
  48.                     class="btn btn-primary btn-sm col-sm-2 ml-1"
  49.                     onclick="onOpenDesigner()">
  50.                 打开设计器
  51.             </button>

  52.         </div>
  53.     </div>
  54.     <div id="designer-host"></div>
  55.     <div id="viewer-host"></div>
  56.       <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"
  57.               integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj"
  58.               crossorigin="anonymous"></script>
  59.     <script>
  60.          function onOpenDesigner() {
  61.               $('#viewer-host, #btnDesignerOpen').hide();
  62.               $('#designer-host, #btnPdfPreview').show();
  63.           }
  64.         async function onPdfPreview() {         
  65.               const reportInfo = await this.designer.getReport();
  66.               const report = new GC.ActiveReports.Core.PageReport()
  67.               await report.load(reportInfo?.definition);
  68.               const doc = await report.run();
  69.               const result = await GC.ActiveReports.PdfExport.exportDocument(doc);
  70.               result.download("exportedreport.pdf");
  71.           }
  72.         var reportTemplates = GC.ActiveReports.ReportDesigner.templates;
  73.         var resolveFunc = null;
  74.         var designer = new GC.ActiveReports.ReportDesigner.Designer("#designer-host", { language: "zh" });
  75.         var counter = 0;
  76.         reportStorage = new Map();
  77.         function fillReportList() {
  78.             $('#listReports').empty();
  79.             let reportIds = reportStorage.keys();
  80.             let result = reportIds.next();
  81.             while (!result.done) {
  82.                 const reportId = result.value;
  83.                 const openReportBtn = $('<button type="button" class="list-group-item list-group-item-action">' + reportId + '</button>');
  84.                 openReportBtn.on('click', function () {
  85.                     onSelectReport(reportId);
  86.                 })
  87.                 $('#listReports').append(openReportBtn);
  88.                 result = reportIds.next();
  89.             }
  90.         }     
  91.         designer.setActionHandlers({
  92.             onRender: (report) => {
  93.                   $('#viewer-host, #btnDesignerOpen').show();
  94.                   $('#designer-host, #btnPdfPreview').hide();
  95.                   viewer.open(report.definition);
  96.                   return Promise.resolve();
  97.               },
  98.             onCreate: function () {
  99.                 const reportId = `NewReport${++this.counter}`;
  100.                 return Promise.resolve({ definition: reportTemplates.CPL, id: reportId, displayName: reportId });
  101.             },
  102.             onOpen: function () {
  103.                 const ret = new Promise(function (resolve) {
  104.                     resolveFunc = resolve;
  105.                     fillReportList();
  106.                     $("#dlgOpen").modal("show");
  107.                 });
  108.                 return ret;
  109.             },
  110.             onSave: function (info) {
  111.                 const reportId = info.id || `NewReport${++this.counter}`;
  112.                 reportStorage.set(reportId, info.definition);
  113.                 return Promise.resolve({ displayName: reportId });
  114.             },
  115.             onSaveAs: function (info) {
  116.                 const reportId = `NewReport${++this.counter}`;
  117.                 reportStorage.set(reportId, info.definition);
  118.                 return Promise.resolve({ id: reportId, displayName: reportId });
  119.             }
  120.         });
  121.         designer.setReport({ id: 'reports/111.rdlx-json' });
  122.           var viewer = new ActiveReports.Viewer('#viewer-host', { language: "zh" });
  123.           $('#viewer-host, #btnDesignerOpen').hide();
  124.         function onSelectReport(reportId) {
  125.             if (resolveFunc) {
  126.                 $("#dlgOpen").modal("hide");
  127.                 resolveFunc({ definition: reportStorage.get(reportId), id: reportId, displayName: reportId });
  128.                 resolveFunc = null;
  129.             }
  130.         }
  131.     </script>
  132.     <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"
  133.             integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj"
  134.             crossorigin="anonymous"></script>
  135.     <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js"
  136.             integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN"
  137.             crossorigin="anonymous"></script>
  138.     <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"
  139.             integrity="sha384-B4gt1jrGC7Jh4AgTPSdUtOBvfO8shuf57BaghqFfPlYxofvL8/KUEfYiJOMMV+rV"
  140.             crossorigin="anonymous"></script>

  141.     <div class="modal" id="dlgOpen" tabindex="-1" aria-hidden="true">
  142.         <div class="modal-dialog">
  143.             <div class="modal-content">
  144.                 <div class="modal-header">
  145.                     <h5 class="modal-title" id="exampleModalLabel">
  146.                         打开报表
  147.                     </h5>
  148.                     <button type="button"
  149.                             class="close"
  150.                             data-dismiss="modal"
  151.                             aria-label="Close">
  152.                         <span aria-hidden="true">×</span>
  153.                     </button>
  154.                 </div>
  155.                 <div class="modal-body">
  156.                     <h2>请选择报表:</h2>
  157.                     <div class="list-group" id="listReports">
  158.                     </div>
  159.                 </div>
  160.                 <div class="modal-footer">
  161.                     <button type="button" class="btn btn-secondary" data-dismiss="modal">
  162.                         关闭
  163.                     </button>
  164.                 </div>
  165.             </div>
  166.         </div>
  167.     </div>

  168. </body>
  169. </html>
复制代码
2、具体的实现代码个、JS、CSS文件见附件

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

2 个回复

倒序浏览
wengMQ悬赏达人认证
银牌会员   /  发表于:2021-12-16 12:08:32
沙发
:)
回复 使用道具 举报
Bella.YuanWyn认证
超级版主   /  发表于:2021-12-16 12:12:02
板凳
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部