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

时间:2015-03-03 11:40:26

标签: reporting-services ssrs-2008

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

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

3 个答案:

答案 0 :(得分:4)

请尝试使用ReportViewer的DisplayName属性

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

答案 1 :(得分:1)

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

否则无法在SSRS中执行此操作。

,您可以随时使用外部脚本为您重命名PDF,但这不是完全自动的。

答案 2 :(得分:0)

您也可以使用Javascript钩子执行此操作。有一个教程here让我开始但没有为我完全工作。

我最终做的是在<sql server folder>\ReportServer\Pages\的末尾添加一些javascript到<body>中的ReportViewer.aspx。对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没有控制台。