从报表查看器导出时更改 PDF 上的报表名称

Posted

技术标签:

【中文标题】从报表查看器导出时更改 PDF 上的报表名称【英文标题】:Change Report Name On PDF when exporting from report viewer 【发布时间】:2015-03-03 11:40:25 【问题描述】:

我有一份工作报告,但我想更改报告名称。默认情况下,它使用 RDL 文件名。我想为下载的文件设置不同的名称。

有没有办法为从 s-s-rS 下载的报告动态生成文件名?

【问题讨论】:

【参考方案1】:

请尝试使用 ReportViewer 的 DisplayName 属性

ReportViewer.ServerReport.DisplayName = <Your Parameter Value>;
ReportViewer.LocalReport.DisplayName = <Your Parameter Value>;

【讨论】:

太好了,如果有用,请标记..这将帮助其他面临类似问题的人【参考方案2】:

如果您使用的是数据驱动订阅,则可以使用 SQL 动态设置报告名称。

否则无法在 s-s-rS 中执行此操作。您始终可以在导出后使用外部脚本为您重命名 PDF,但这不是完全自动的。

【讨论】:

不,我没有使用数据驱动订阅 那我觉得你倒霉了。 任何改变点击事件的方法【参考方案3】:

您也可以使用 javascript 挂钩来执行此操作。有一个教程 here 让我开始了,但对我没有完全的工作。

我最终做的是在&lt;sql server folder&gt;\ReportServer\Pages\ 中的ReportViewer.aspx 中添加一些javascript,在&lt;body&gt; 末尾的脚本标记中。对 URL 的检查确保它只影响应该更改名称的报告。

这适用于空格和其他特殊字符(只要文件名中允许它们)。

function modifyExportFileName() 
    /* Change the name of file exports */ 
    var filename = false;

    if (window.location.href.indexOf('Folder/Report') !== -1)  //it's the report we want
        filename = getParameter('parameter'); // returns false if not set
        // should also have access to report DOM here, also Date(), etc.
     // could add more here as needed in else if blocks


    if (filename)  // we have a filename set.
        console.log('changing filename of exported reports to ' + filename);
        changeFilename(filename);
    


function getParameter(param) 
    //case sensitive parameter extractor.
    var l = window.location.href;
    if (l.indexOf(param + '=' > -1)) 
        var param_location = l.indexOf(param + '=') + (param + '=').length;
        return l.substring(param_location, l.indexOf('&', param_location + 1));
    
    return false;


function changeFilename(filename) 
    var r = null,
        url = null;

    try 
        r = this.$find('ReportViewerControl')._getInternalViewer();
     catch(e) 
        setTimeout(function () changeFilename(filename), 1000); //maybe we're not done loading.
        console.log("trying again");
        return false;
    

    url = r.ExportUrlBase;
    if (url) 
        var i = url.indexOf('FileName='),
            j = url.indexOf('&', i+1);
        r.ExportUrlBase = url.substring(0, i) + 'FileName=' + filename + url.substring(j);
        console.log('reset filename to ' + filename);
    


modifyExportFileName();

编辑:我注意到这段代码没有在公司网络的 IE 中运行。原因是console.logs。如果您的网站在 IE 兼容模式下运行,请将它们注释掉,因为 IE5 没有控制台。

【讨论】:

以上是关于从报表查看器导出时更改 PDF 上的报表名称的主要内容,如果未能解决你的问题,请参考以下文章

使用报表查看器,如何从两个单独的数据集中提取

当带有报表查看器的表单加载时,通过 C# 代码动态更改 Crystal Report 的数据库路径

在 Crystal Report Viewer 中自定义导出选项

尝试在报表管理器 URL 中查看 s-s-rS 订阅时出错

MVCReportViewer :报表查看器 Web 控件需要 Web 表单上的 System.Web.UI.ScriptManager

s-s-rS 报表查看器无法将凭据从超链接传递到报表服务器