Lenka.Guo 发表于 2020-8-12 17:36:55

PDFRendering 相当于后台导出PDF文件,看您的代码建议您采取这样的方式,修改前台代码,可无预览直接导出:
var viewer = GrapeCity.ActiveReports.JSViewer.create({
      element: '#viewerContainer',
      reportID: 'RDL报表.rdlx;', //报表名称
      //availableExports: ['Xml', 'Pdf'],//导出的方式

      reportService: {},
      renderMode: 'Galley',//画廊模式
      // other properties
      documentLoaded: () => {      
   
            viewer.export('Pdf', null, true, { Title: '1997 Annual Report' })

golden 发表于 2020-8-12 17:50:05

你好,你最新给的这个最新的代码示例,应该是JSViewer的示例代码,有webview的示例么?

Lenka.Guo 发表于 2020-8-13 09:12:12

WebViewer 的导出参考代码:可以写到Page_Load里面
protected void Page_Load(object sender, EventArgs e)
      {
            GrapeCity.ActiveReports.PageReport pageReport = new GrapeCity.ActiveReports.PageReport(new System.IO.FileInfo(Server.MapPath("Test2.rdlx")));
            var name = pageReport.Report.Name;

            // Create an output directory.
            System.IO.DirectoryInfo outputDirectory = new System.IO.DirectoryInfo(@"D:\MyPDF");
            outputDirectory.Create();

            // Provide settings for your rendering output.
            GrapeCity.ActiveReports.Export.Pdf.Page.Settings pdfSetting = new GrapeCity.ActiveReports.Export.Pdf.Page.Settings();

            // Set the rendering extension and render the report.
            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));

            // Overwrite output file if it already exists
            outputProvider.OverwriteOutputFile = true;

            pageReport.Document.Render(pdfRenderingExtension, outputProvider, pdfSetting);
            WebViewer1.Report = pageReport.Report;
            


      }


golden 发表于 2020-8-13 15:56:58

你好,家在你发的代码,出现了错误,好像是因为数据源的问题,我的数据是动态在代码里加载进去的,不是在报表里直连数据库的,请问这个怎么结局?

golden 发表于 2020-8-13 16:29:51

万分火急,麻烦帮忙解决下,谢谢了

Lenka.Guo 发表于 2020-8-13 20:14:51

收到,我这边之前忽略了您是运行时绑定数据源,我明天给您制作一个demo发送给你。

golden 发表于 2020-8-14 08:58:32

谢谢了

Lenka.Guo 发表于 2020-8-14 10:19:51

Hello
我看您那边是因为报表展示过慢,所以我在页面中删除了WebViewer,添加了按钮,如下


在按钮点击事件中添加了以下代码,可成功导出:
protected void Button1_Click(object sender, EventArgs e)
      {
            GrapeCity.ActiveReports.PageReport pageReport = new GrapeCity.ActiveReports.PageReport(new System.IO.FileInfo(Server.MapPath("RdlReport1.rdlx")));
            pageReport.Document.LocateDataSource += Document_LocateDataSource;
            // Create an output directory.
            System.IO.DirectoryInfo outputDirectory = new System.IO.DirectoryInfo(@"D:\MyPDF");
            outputDirectory.Create();

            // Provide settings for your rendering output.
            GrapeCity.ActiveReports.Export.Pdf.Page.Settings pdfSetting = new GrapeCity.ActiveReports.Export.Pdf.Page.Settings();

            // Set the rendering extension and render the report.
            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));

            //    // Overwrite output file if it already exists
            //    outputProvider.OverwriteOutputFile = true;

             pageReport.Document.Render(pdfRenderingExtension, outputProvider, pdfSetting);


      }

      private void Document_LocateDataSource(object sender, GrapeCity.ActiveReports.LocateDataSourceEventArgs args)
      {
            System.Data.DataTable dt = new System.Data.DataTable();
            if (args.Report.DataSets.Name == "DataSet1")
            {


                dt.Columns.Add("Field1");
                dt.Columns.Add("Field2");
                dt.Rows.Add("1", "1");
                dt.Rows.Add("2", "2");
                args.Data = dt;

            }


         
      }


golden 发表于 2020-8-16 14:53:08

你好,尝试用您的代码试了一下,是可以的,但是出现了一个问题,导出以后IIS管理器内存持续变大,导出成功以后内存也不会小下来,是不是代码那个地方要处理释放内存?不然服务器导出几次就内存就爆了

KearneyKang 发表于 2020-8-17 09:39:16

这个的话,你可以代码端执行一个内存清理的操作,在 导出结束的时候进行一次内存清理,具体代码的写法你可以 网上找下资料,这是我搜的https://jingyan.baidu.com/article/7f766daf0b9d430100e1d059.html
页: 1 [2] 3
查看完整版本: 用的web工程,怎么不经过预览,直接导出PDF文件