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

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

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

【问题讨论】:

    标签: reporting-services ssrs-2008


    【解决方案1】:

    请尝试使用 ReportViewer 的 DisplayName 属性

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

    【讨论】:

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

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

    否则无法在 SSRS 中执行此操作。您始终可以在导出后使用外部脚本为您重命名 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 没有控制台。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-22
      • 2011-01-12
      • 1970-01-01
      • 2010-11-21
      • 2016-05-11
      • 1970-01-01
      • 2010-12-20
      相关资源
      最近更新 更多