优化 Sql Reporting Services 2005 中大报表的 PDF 导出

2023-12-14

首先,我知道运行非常大/长时间运行的报告是一个可怕的想法。我知道 Microsoft 有一条经验法则,规定 SSRS 报告的执行时间不应超过 30 秒。然而,有时,由于遵守州法律等外部力量,巨额报告是首选的祸害。

在我的工作地点,我们有一个 asp.net (2.0) 应用程序,我们已将其从 Crystal Reports 迁移到 SSRS。由于庞大的用户群和复杂的报告 UI 要求,我们有一组屏幕可以接受用户输入的参数并创建夜间运行的时间表。由于该应用程序支持多个报告框架,我们不使用 SSRS 的调度/快照功能。系统中的所有报告均由预定的控制台应用程序生成,该应用程序采用用户输入的参数并使用创建报告时使用的相应报告解决方案生成报告。对于 SSRS 报告,控制台应用程序生成 SSRS 报告并通过 SSRS Web 服务 API 将其导出为 PDF。

到目前为止,SSRS 比 Crystal 更容易处理,除了我们最近从 Crystal 报告转换为 SSRS 的某个 25,000 页报告之外。 SSRS 服务器是一台 64 位 2003 服务器,具有 32 GB 内存,运行 SSRS 2005。我们所有的小型报告都运行得非常好,但我们在处理像本报告这样的大型报告时遇到了麻烦。不幸的是,我们似乎无法通过 Web 服务 API 生成上述报告。生成/导出大约 30-35 分钟后会出现以下错误:

异常消息:基础连接已关闭:接收时发生意外错误。

我相信你们以前都见过 Web 服务调用:

data = rs.Render(this.ReportPath, this.ExportFormat, null, deviceInfo,
   selectedParameters, null, null, out encoding, out mimeType, out usedParameters, 
   out warnings, out streamIds);

奇怪的是,如果使用报表管理器直接在报表服务器上运行报表,则该报表将运行/呈现/导出。生成报告数据的过程运行大约 5 分钟。大约 12 分钟后,报告将以 SSRS 本机格式在浏览器/查看器中呈现。通过报告管理器中的浏览器/查看器导出为 pdf 还需要 55 分钟。它工作可靠,可以生成高达 1.03gb 的 pdf。

以下是我尝试通过 Web 服务 API 使报告正常工作的一些更明显的事情:

  • 设置 HttpRuntime ExecutionTimeout 报告上的值为 3 小时 服务器
  • 在报表服务器上禁用 http keeplives
  • 增加了报表服务器上的脚本超时
  • 将报告设置为在服务器上永不超时
  • 在客户端调用中将报告超时设置为几个小时

从我尝试过的调整来看,我相当满意地说任何超时问题都已被消除。

根据我对错误消息的研究,我认为 Web 服务 API 默认情况下不会发送分块响应。这意味着它会尝试在一次响应中通过线路发送所有 1.3GB 数据。在某个时刻,IIS 认输了。不幸的是,API 抽象了 Web 服务配置,因此我似乎无法找到启用响应分块的方法。

  1. 有谁知道如何在不降低总页数的情况下减少/优化 PDF 导出阶段和/或 PDF 的大小?
  2. 有没有办法为 SSRS 打开响应分块?
  3. 还有其他人有任何其他理论来解释为什么它在服务器上运行而不是通过 API 运行吗?

编辑:阅读 kcrumley 的帖子后,我开始通过文件大小/页数来查看平均页面大小。有趣的是,在较小的报告上,经过数学计算,每页大约为 5K。有趣的是,当报告变大时,这个“平均值”就会增加。例如,一份 8000 页的报告平均每页超过 40K。很奇怪。我还要补充一点,除了每个分组中的最后一页之外,每页的记录数都是设置的,因此不会出现某些页面的记录多于其他页面的情况。


我们缩小了 SSRS 导出的大型 PDF 的范围,发现了 2 个罪魁祸首

1) 除非图像是 JPG 或 PNG 颜色类型 3,否则它们会扩展为 BMP 的 Seehere

2) 除非您将 SSRS 配置为其他行为(不推荐),否则 SSRS 会将字体或字体子集嵌入到 PDF 中,除非它们是其中之一5 种“标准”PDF 字体.

尽管大多数 Windows 操作系统上都没有安装任何标准字体(我猜除了 Symbol),但我们发现如果您使用Times New Roman, Courier New, or Arial然后将进行正向和反向字体替换。

转换 RDL 的最简单方法是以 XML 形式查看它们,然后搜索并替换FontFamily tags.

如果你不得不使用非标准字体,那么,你仍然可以将损害降到最低:

  • 使用尽可能少的字体。搜索 RDL XML 以确保没有任何冗余字体。
  • 如果您使用不同大小的字体,请使用 TTF 字体。
  • 尽量不要混合使用正常、粗体和斜体的字体变体,否则它将被多次嵌入。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

优化 Sql Reporting Services 2005 中大报表的 PDF 导出 的相关文章

随机推荐

  • PowerShell invoke-sqlcmd Get-ChildItem:无法调用方法。提供者不支持使用过滤器

    使用 invoke sqlcmd 将行插入表时出现奇怪的错误 如果执行一次 整个脚本可以完美运行 但如果我第二次运行它 它就会失败并显示错误消息 Get ChildItem 无法调用方法 该提供商不支持使用过滤器 我测试了代码并注释掉了in
  • 如何在 PyQt4 中创建自动完成组合框?

    如何在 PyQt4 中创建自动完成组合框 我想要的例子 http jqueryui com autocomplete combobox 要获得与示例中相同的行为 您需要更改完成模式 of the 完成者对于组合框 默认情况下 完成模式是内联
  • 语法突出显示突然不同[重复]

    这个问题在这里已经有答案了 我最近注意到我的 vscode 开始变得有点滑稽 突出显示 更改某些变量的颜色似乎突然出现 这真的让我很失望 返回变量上的很多颜色变化 粗体对象等 我的一个朋友正在使用相同的颜色主题 我们进行了比较 以确保它们不
  • 特定批次的气流任务

    我想运行一组这样的任务 a gt gt b c d gt gt e f g gt gt h i j k l m 首先运行任务 a 完成后并行运行 b c d 然后当 b c d 的最后一个完成时运行 开始并行运行 e f g 等 但我收到
  • 为什么 apply() 返回转置的 xts 矩阵?

    我想在 xts 矩阵的所有周期上运行一个函数 apply 非常快 但返回的矩阵与原始对象相比具有转置维度 gt dim myxts 1 7429 48 gt myxts 2 apply myxts 1 function x return x
  • 如何从WPF中的BackgroundWorker线程直接访问UI线程?

    我正在 WPF 中创建一个备份实用程序 并且有一个关于线程的一般问题 在方法中后台Worker DoWork 语句 Message2 Text 给出错误 调用线程无法访问该对象 因为另一个线程拥有它 我是否无法直接访问backgroundW
  • 如何使用 ctypes 和基于 ctypes 的枚举正确调用以“自定义枚举”作为参数的函数?

    我真的希望一些 Python Ctypes C 专家可以帮助我解决这个问题 这可能是我在使用 Python 与 C 库交互时缺乏正确使用 Ctypes 的类型结构知识 客观的 我需要访问一些库函数 使用 ctypes 加载 DLL 并与之交
  • Angular 中 angular.copy 的替代品是什么

    如何在 Angular 中复制对象并丢失其引用 有了 AngularJS 我可以使用angular copy object 但我在 Angular 中使用它时遇到一些错误 异常 参考错误 angular没有定义 假设你使用的是 ES6 你可
  • Android:可点击 TextView 中的 ClickableSpan

    我有一个可以包含可点击链接的文本视图 当单击其中一个链接时 我想开始一项活动 这工作正常 但也应该可以单击整个文本视图并启动另一个活动 这就是我当前的解决方案 TextView tv TextView findViewById R id t
  • 使用单击时中断停止 for 循环

    我有一个从 1 到 20 的简单循环 我想做的是通过单击按钮来停止循环 我所做的是 我设置了一个条件 即单击按钮后变量的值stop将更改为 1 这将触发break 但值没有改变 var stop 0 for let i 1 i lt 20
  • Homestead 上 Netbeans 中 Laravel Dusk 的 Xdebug

    在 Laravel Homestead 中 我已经能够使用 Xdebug 进行单元测试 功能测试 浏览器浏览等 但当我尝试使用 Xdebug for Dusk 时 它会挂起 在测试 浏览器文件夹中进行测试 我认为这些问题可能会有所帮助 但我
  • WPF 图像平移约束

    我试图找出如何限制平移 使图像完全保持在其包含边框的范围内 任何这方面的帮助将不胜感激 谢谢
  • 将 UIImage 转换为 Keras 模型的 MLMultiArray

    在 Python 中 我使用 keras 训练了一个图像分类模型 以接收 224 224 3 数组形式的输入并输出预测 1 或 0 当我加载保存模型并将其加载到 xcode 中时 它指出输入必须采用 MLMultiArray 格式 有没有办
  • 不可能向外界隐藏模板的实现(为了保护知识产权)。我对吗?

    我已阅读为什么模板只能在头文件中实现 and 为什么我不能将模板类的定义与其声明分开并将其放入 cpp 文件中 如果我创建模板 那么我还将提供对其的访问权限cpp 文件附加到他们的h files 或者直接将定义写入头文件中 因此 如果我想允
  • 无法更改图例符号 nvd3 气泡图

    在我的 nvd3 气泡图中 每组点都有不同的符号 但图例全部为圆圈 代码是here 我只遇到过这个 showLegend false 它可以隐藏或显示图例 我无法理解如何更改图例中的符号 nvd3 不允许您直接访问图例的内部结构 但是 您可
  • 如何在纵向应用程序中录制横向视频? (斯威夫特 2、iPhone)

    我需要在我的纵向 iPhone 应用程序中录制横向视频 是否可能 或者是否受到任何硬件限制的阻止 使用 AVCaptureVideoPreviewLayer 我能够更改预览方向 但视频仍然以纵向录制 欢迎任何想法 您应该能够将视频录制的方向
  • 如何将 cmake 与 boost asio 结合使用?

    我不明白boost asio在我的 C 程序中使用 cmake 我实际上已经尝试和谷歌搜索了很多小时 但我无法让它工作 我想包括boost asio在我的 Ubuntu 18 04 下的 c 项目中 带有一个 cmake 文件 所以我安装了
  • 如何从 Eclipse 为 javaCV 或 openCV 项目制作可运行的 jar

    我在 eclipse 中有一个 openCV 项目 现在 我试图使其可运行 Jar 但一旦尝试运行该 Jar 就无法启动它 我尝试遵循 https groups google com forum topic javacv ziqKIb7Pg
  • 如何在servlet中通过ajax获取数据?

    我想将页面上的一些数据发送到servlet 所以我写了下面的jquery来做到这一点 我用所有数据构建一个json字符串 并直接将其发送到servlet 但我不知道如何从servlet中的ajax获取全部数据 save click func
  • 优化 Sql Reporting Services 2005 中大报表的 PDF 导出

    首先 我知道运行非常大 长时间运行的报告是一个可怕的想法 我知道 Microsoft 有一条经验法则 规定 SSRS 报告的执行时间不应超过 30 秒 然而 有时 由于遵守州法律等外部力量 巨额报告是首选的祸害 在我的工作地点 我们有一个