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