找回密码
 立即注册

QQ登录

只需一步,快速开始

lihuioooo
等待验证会员   /  发表于:2016-8-9 16:51  /   查看:6924  /  回复:15
本帖最后由 Lenka.Guo 于 2016-8-9 18:43 编辑

报表请求到webservice 服务  如何在服务端完成生成报表,保存为pdf格式 并存储在服务器,这个过程不需要用户干预
ar 9.0 版本

对了,我们发送了软件版本升级申请邮件啊, 怎么没有联系我们升级啊

15 个回复

倒序浏览
Lenka.Guo讲师达人认证 悬赏达人认证
超级版主   /  发表于:2016-8-9 18:42:23
沙发
本帖最后由 Lenka.Guo 于 2016-8-9 18:44 编辑

您好,
在服务端导出报表,并存放在服务器电脑上,只需要在后台添加导出按钮之后,将导出文件的Path 改成服务器地址就可以了。
添加导出按钮:
http://blog.gcpowertools.com.cn/ ... ze_flashviewer.aspx



  1. protected void Button1_Click(object sender, EventArgs e)
  2.         {
  3.             report = new GrapeCity.ActiveReports.PageReport(new System.IO.FileInfo(Server.MapPath("\\Reports\\BillingInvoice.rdlx")));
  4.             reportDocument = new GrapeCity.ActiveReports.Document.PageDocument(report);
  5.             System.IO.DirectoryInfo outputDirectory = new System.IO.DirectoryInfo(@"D:\Demo");
  6.             outputDirectory.Create();

  7.             // Provide settings for your rendering output.
  8.             GrapeCity.ActiveReports.Export.Pdf.Page.Settings pdfSetting = new GrapeCity.ActiveReports.Export.Pdf.Page.Settings();
  9.             GrapeCity.ActiveReports.Extensibility.Rendering.ISettings setting = pdfSetting;

  10.             //Set the rendering extension and render the report.
  11.             GrapeCity.ActiveReports.Export.Pdf.Page.PdfRenderingExtension pdfRenderingExtension = new GrapeCity.ActiveReports.Export.Pdf.Page.PdfRenderingExtension();
  12.             GrapeCity.ActiveReports.Rendering.IO.FileStreamProvider outputProvider = new GrapeCity.ActiveReports.Rendering.IO.FileStreamProvider(outputDirectory, System.IO.Path.GetFileNameWithoutExtension(outputDirectory.Name));
  13.             reportDocument.Render(pdfRenderingExtension, outputProvider, pdfSetting);
  14.         }
复制代码


升级邮件,抱歉,我在这边查找下,然后给咱们那边处理。





回复 使用道具 举报
lihuioooo
等待验证会员   /  发表于:2016-8-10 10:17:05
板凳
本帖最后由 lihuioooo 于 2016-8-10 10:58 编辑
Lenka.Guo 发表于 2016-8-9 18:42
您好,
在服务端导出报表,并存放在服务器电脑上,只需要在后台添加导出按钮之后,将导出文件的Path 改成 ...

尝试了, 报错

这个过程是在 报表数据填充后执行的转换,然后报错

/// <summary>
        /// 导出为pdf
        /// </summary>
        /// <param name="pg"></param>
        private void ExportToPdf(PageReport pg)
        {

            System.IO.DirectoryInfo outputDirectory = new System.IO.DirectoryInfo(@"D:\Demo");
            outputDirectory.Create();

            // Provide settings for your rendering output.
            GrapeCity.ActiveReports.Export.Pdf.Page.Settings pdfSetting = new GrapeCity.ActiveReports.Export.Pdf.Page.Settings();
            GrapeCity.ActiveReports.Extensibility.Rendering.ISettings setting = pdfSetting;
            try
            {
                GrapeCity.ActiveReports.Export.Pdf.Page.PdfRenderingExtension pdfRenderingExtension = new GrapeCity.ActiveReports.Export.Pdf.Page.PdfRenderingExtension();
                GrapeCity.ActiveReports.Rendering.IO.FileStreamProvider outputProvider = new GrapeCity.ActiveReports.Rendering.IO.FileStreamProvider(outputDirectory, System.IO.Path.GetFileNameWithoutExtension(outputDirectory.Name));
                _pageDocument.Render(pdfRenderingExtension, outputProvider, pdfSetting);
                 HttpContext.Current.Response.ContentType = "application/pdf";
                 HttpContext.Current.Response.AddHeader("content-disposition", Server.UrlPathEncode("attachment;filename=客户订单.pdf"));
                 System.IO.MemoryStream ms = new System.IO.MemoryStream();
                 GrapeCity.ActiveReports.Rendering.IO.MemoryStreamProvider _provider = new GrapeCity.ActiveReports.Rendering.IO.MemoryStreamProvider();
                 _provider.GetPrimaryStream().OpenStream().CopyTo(ms);
                 HttpContext.Current.Response.BinaryWrite(ms.ToArray());
                 HttpContext.Current.Response.End();


            }
            catch (Exception ex)
            {

                throw;
            }
            //Set the rendering extension and render the report.


        }



  private void Cah020_LocateDataSource2(object sender, LocateDataSourceEventArgs args)
        {
            string sql = "";
            string where = "";
            if (args.Report.PageReport.Report.DataSets.Count > 0)
            {
                sql = args.Report.PageReport.Report.DataSets[0].Query.CommandText;//获取报表的sql 语句
            }
            for (int i = 0; i < args.Report.Parameters.Count; i++)
            {
                if (args.Report.Parameters.Name.ToLower() == "sql")
                {
                    where = args.Report.Parameters.CurrentValue == null ? "" : args.Report.Parameters.CurrentValue.ToString();
                    break;
                }
            }



            CYW.Hotel.IBLL.IGetDataForReport data = new CYW.Hotel.BLL.GetReportData();
            DataTable tab = data.GetSelectReportDatas(sql);
            args.Data = tab;
             ExportToPdf(definition);
        }


我如果想不存文件, 直接把报表处理为流入库呢? 以上是我的代码实现

本帖子中包含更多资源

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

x
回复 使用道具 举报
Lenka.Guo讲师达人认证 悬赏达人认证
超级版主   /  发表于:2016-8-10 11:06:52
地板
本帖最后由 Lenka.Guo 于 2016-8-10 11:24 编辑

导出调用的report的document对象提供的导出方法,所以需要传递Document对象,我在这边做了一个小的修改,将ExportToPdf写在OnCreateReportHandler 方法中,可以导出正常:
PageReport definition1 = (PageReport)base.OnCreateReportHandler("Reports/report1.rdlx");
            // 为了加快验证速度,这一版本我们采用的是直接绑定数据库的方法,如果确实需要也可以修改为运行时数据源绑定
            PageDocument _pageDocument = new PageDocument(definition1);
            definition1.Document.LocateDataSource += new LocateDataSourceEventHandler(Document_LocateDataSource);
            GrapeCity.ActiveReports.PageReportModel.ReportParameter ptotalpage = new GrapeCity.ActiveReports.PageReportModel.ReportParameter();
            ptotalpage.Name = "总页数";
            ptotalpage.Prompt = "总页数";
            ptotalpage.DataType = GrapeCity.ActiveReports.PageReportModel.ReportParameterDataType.Integer;
            
            ptotalpage.DefaultValue.Values.Add(ExpressionInfo.FromString("1"));
            ptotalpage.Hidden = true;
            definition1.Report.ReportParameters.Add(ptotalpage);
   ExportToPdf(definition1.Document);
            return definition1;


回复 使用道具 举报
lihuioooo
等待验证会员   /  发表于:2016-8-10 14:25:21
5#
Lenka.Guo 发表于 2016-8-10 11:06
导出调用的report的document对象提供的导出方法,所以需要传递Document对象,我在这边做了一个小的修改,将 ...


程序走到箭头处就返回了,拿不到数据呢

本帖子中包含更多资源

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

x
回复 使用道具 举报
lihuioooo
等待验证会员   /  发表于:2016-8-10 15:29:20
6#
能提供一个完整可运行的例子吗? 我的需求就是 在 报表的webservice 上把报表拿到然后存入数据库,我试验了几次都不行,程序异常退出
回复 使用道具 举报
lihuioooo
等待验证会员   /  发表于:2016-8-10 16:19:28
7#
已解决,需要这么处理
     private void ExportPdf(PageReport doc)
        {
            try
            {
                var pdf = new PdfExport();
                var memStream = new System.IO.MemoryStream();
                pdf.Export(doc.Document, memStream);
                byte[] b = memStream.ToArray();
              
            }
            catch (Exception ex)
            {
                throw;
            }
        }
回复 使用道具 举报
Lenka.Guo讲师达人认证 悬赏达人认证
超级版主   /  发表于:2016-8-10 17:46:39
8#
谢谢您的分享,我把我改过的共享给您,还有升级已经于7月24日给徐工和另外一名工程师回复过了。

本帖子中包含更多资源

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

x
回复 使用道具 举报
lihuioooo
等待验证会员   /  发表于:2016-8-10 17:53:21
9#
本帖最后由 lihuioooo 于 2016-8-10 18:10 编辑

还有个小问题啊, 就是在OnCreateReportHandler 里如何取报表的参数值呢?不在LocateDataSourceEventHandler 里取
回复 使用道具 举报
Lenka.Guo讲师达人认证 悬赏达人认证
超级版主   /  发表于:2016-8-11 09:20:47
10#
通过这一行代码大,但是在OnCreate方法中只能获取到参数的默认值,而在LocateDatasource中可以获取到参数的当前值,即用户当前的选择
   definition1.Report.ReportParameters[0].DefaultValue.ToString();
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部