【发布时间】:2019-07-24 18:34:50
【问题描述】:
我们没有 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 的权限以具有完全访问权限,而不仅仅是读/写,所以我去更改域\管理员的权限以完全访问这两个 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
当我在 notepad++ 中打开 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 中的内容相同
【问题讨论】:
标签: sql-server pdf reporting-services ssis