【问题标题】:When SSIS is saving a PDF from an SSRS, the PDF is corrupted当 SSIS 从 SSRS 保存 PDF 时,PDF 已损坏
【发布时间】: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


    【解决方案1】:

    假设安装了默认的 SSRS,您将导航到 http://server/Reports,它看起来像

    这是用户管理所有 SSRS 的门户网站。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-18
      • 1970-01-01
      • 1970-01-01
      • 2013-05-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多