当SSIS从SSRS保存PDF时,PDF已损坏

时间:2019-07-24 18:34:50

标签: sql-server pdf reporting-services ssis

我们还没有SSRS Enterprise,我正在VS2017中进行所有开发。 我已将SSRS报告上传到服务器,并且工作正常。 我可以将URL复制/粘贴到IE中,它将使用指定的参数运行报告,因此我认为URL是正确的。

在SQL Reporting Services网页上,我可以单击“导出”并选择PDF,它将正确保存为PDF。与Excel相同,它将正确导出为Excel。

但是,当我尝试通过SSIS创建PDF时,它将在正确的文件夹中创建具有正确文件名的文件,因此看起来不错,但是不是。

如果我尝试打开PDF,它将恢复为损坏状态。

我确实找到了一些内容(SSRS PDF Export. There was an error opening this document. This file is damaged and could not be repaired),据说该内容更改了某些DLL的权限以具有完全访问权限,而不仅仅是读/写,所以我去更改了domain \ Administrators的权限以具有对这两个DLL的完全访问权限DLL并没有什么不同

这是传递给代码的URL:

http://XXXX/Reports/report/ScheduledReports/WeeklySalesInvoiced_PDF?StartDate=07%2F08%2F2019&EndDate=07%2F12%2F2019&TerritoryID=101&rs:Command=Render&rs:Format=PDF

以下是应该创建PDF的代码:

Protected Sub SaveFile(ByVal url As String, ByVal localpath As String)
Dim loRequest As System.Net.HttpWebRequest
Dim loResponse As System.Net.HttpWebResponse
Dim loResponseStream As System.IO.Stream
Dim loFileStream As New System.IO.FileStream(localpath, System.IO.FileMode.CreateNew, System.IO.FileAccess.Write)
Dim laBytes(256) As Byte
Dim liCount As Integer = 1
Try

    loRequest = CType(System.Net.WebRequest.Create(url), System.Net.HttpWebRequest)
    loRequest.Credentials = System.Net.CredentialCache.DefaultCredentials
    loRequest.Timeout = 600000
    loRequest.Method = "GET"
    loResponse = CType(loRequest.GetResponse, System.Net.HttpWebResponse)
    loResponseStream = loResponse.GetResponseStream
    Do While liCount > 0
        liCount = loResponseStream.Read(laBytes, 0, 256)
        loFileStream.Write(laBytes, 0, liCount)
    Loop

    loFileStream.Flush()
    loFileStream.Close()

Catch ex As Exception

End Try
End Sub

当我在记事本++中打开PDF时,这就是我所看到的(与报告中的内容不一样):

<!DOCTYPE html>
<html id="portal" ng-controller="MainController as main" lang="{{main.getLanguage()}}" ng-class="{'flex':main.needsCssFlex}" ng-strict-di resizer>
<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=ed

我试图将其另存为Excel,但最终却得到了完全相同的东西。它会损坏,Excel仍会要求打开它,我说是,只要打开它,我就会看到与PDF中相同的内容

1 个答案:

答案 0 :(得分:2)

假设默认安装了SSRS,您正在导航至http://server/Reports,看起来像

SSRS 2016 home page

那是用户管理SSRS一切的Web门户。

还有第二个与SSRS相关的站点,这是您处理“实际”工作时应该指向的站点http://server/ReportServer它应该看起来像这样

SSRS Web Server

使用ReportServer位置重建URL,我怀疑您会获得可行的PDF / Excel文档。现在,您只是从Web门户下载包装器页面。