如何从从SSRS导出的PDF中删除空白页面

219

我有一个两页的SSRS报告,当我将其导出为PDF时,由于其宽度问题,它需要4页来显示,其中第二页和第四页显示了我的表中的一个字段。我尝试在报告属性中设置布局大小为宽度=18英寸和高度=8.5英寸。

这使我在PDF的一页上获得了整个表格,但我仍然得到第二页和第四页为空白。

我这样做的方式是不正确的吗?还有其他方法可以摆脱这些空白页吗?

17个回答

385

在BIDS或SSDT-BI中,执行以下操作:

  1. 单击“报表” > “报表属性” > “布局”选项卡(在SSDT-BI中为“页面设置”选项卡)
  2. 记录下页面宽度左边距右边距的值
  3. 关闭并返回到设计界面
  4. 在属性窗口中,选择主体
  5. 单击“+”符号以展开大小节点
  6. 记录下宽度的值

要正确渲染PDF文件,主体宽度加上左右边距必须小于或等于页面宽度。当您看到空白页面被渲染时,几乎总是因为主体宽度加上边距大于页面宽度。

请记住:(主体宽度 + 左边距 + 右边距) <= (页面宽度)


15
无法运行。 我的身体宽度小于“报告宽度-页边距”。 但仍然有很多空白页面。 - adolf garlic
3
@adolfgarlic 我发现在报表属性下,页面宽度设置并不总是正常工作。你尝试过在Visual Studio中手动拖动报表宽度吗?今天我就是这样解决了这个问题,之前一直纠结了好久。也值得检查一下页眉/页脚的宽度,它们可能略微过大。 - Michael A
23
我发现这里适用的规则不是 (正文宽度 + 左页边距 + 右页边距) ≤ (页面宽度),而更像是 (正文宽度 + 左页边距 + 右页边距) < (页面宽度 - 1厘米)。 - Jafin
6
需要注意的另一件事是标题 + 正文 + 页眉 + 页脚 + 上下边距的高度必须小于页面高度,否则页面将会分成多页。 - desiguy
4
当你第一次创建报告时,生成器会在屏幕的宽度上跑一个白色区域(Nathan提到的“正文”),用来放东西。通常情况下,在新的信箱式屏幕上,这个白色区域是17英寸宽。并不是显而易见的是,这被视为可打印对象,需要缩小到你放置内容的宽度。如果你不这样做,无论其他人说什么,你都会得到空白页。 - BobRodes
显示剩余10条评论

130

还有一种尝试的方法是将名为ConsumeContainerWhitespacereport属性设置为True(默认值为false)。这就是我解决问题的方式。


2
没错,我也成功了。我有一个带有列组的表格容器。显然,容器会增长以包含列组,并且如果不利用容器的空白空间,它将溢出页面边界。 - Ciarán
5
这对我来说确实是关键。我总是采用Nathan的被采纳答案,结果参差不齐。但每次Nathan的解决方案无法解决问题时,这个解决方案却行之有效。请注意,你仍应该使用Nathan建议的方法。 - bojingo
1
是的,太遗憾了,你不能有两个“被接受的答案”,因为这似乎是正确方法和被接受的答案的结合。向你致敬! - NateJ
我正在使用VS 2017 SSRS,但是没有看到这个属性。 - codeMonkey
3
哎呀,收回一下。我正在使用VS 2017的SSRS/SSDT;花了我一些时间才弄清楚,你必须使用"属性窗口"来找到这个功能,而不是"报表属性..."对话框。 - codeMonkey

29
经过几个小时的解决问题,我偶然发现了一个对我有效的解决方案:
在 SSDT(2012)中,我最初将页面设置/页面单位设置为厘米。当我将其更改为英寸时,奇怪的是,我能够将我的报表导出为PDF而不会使其他每一页都是空白的。 输入图像描述

这对我完美地起作用了。将英寸转换为厘米或反之亦然都可以,但没有必要坚持使用厘米。还有一件事是,需要设置至少1厘米的边距,然后报告就可以生成而不会产生额外的空白页。 - Ravi Shankar

26

在编辑 SSRS 文档时,在设计表面(演示的是 Visual Studio 2012,但可以在其他版本中完成)上先进行设计比在计算数学之前更好。

以下是红色圆圈中的数字,它们映射到以下步骤:

  1. 在设计表面上,有时编辑器会创建一个比实际控件大的 page,因此会打印出幽灵区域。
  2. 调整大小以适应控件。在视觉上查看宽度/高度,并尝试将 页面 在设计表面上 缩小到仅适合控件所需的空间而不超过。
  3. 然后尝试创建 PDF 并查看是否解决了问题。
  4. 如果第三步无法解决问题,则表示某些控件需要太多实际页面大小,并且在长度/宽度方面超出。因此,需要缩小控件的大小以适应较小的页面大小。

手动纠正步骤


此外,在某些情况下,可以通过将报告页面的属性设置为 ConsumeContainerWhitespace,将其设置为 true 来自动消耗空格。


2
谢谢!我知道这一定比通过数字和做数学更简单。我不知道它会打印空格,只是因为报告正文太大了。 - Tor
1
将 ConsumeContainerWhitespace 属性设置为 true 对我有用。尽管我已经清理了我的报表、正文和表格宽度。 - Jon Dosmann

25

对我来说问题在于,SSRS会有意地将您的空格视为您想要它被保留:

图片描述

除了空格之外,还要确保没有右边距。


2
嗨@jeremy-thompson,你的提示非常有用。干杯 - Andy K
2
去掉右边距对我有用,而且不会影响Web报表查看器或PDF的呈现。 - andrej351
2
五年后,这就是适合我的那一个。 - MPJ567

20

如果从SSRS输出的页面是空白的,您需要调整报表布局。这样做比运行输出并后处理来修复布局问题的副作用要更有效。

在边界范围方面,SSRS非常挑剔。通过调整报表上的文本框或其他控件很容易意外地扩大/延长报表。仔细检查报表表面的宽度和高度属性,并尽可能缩小它们。注意大型页眉和页脚。


6

我已经使用SSRS超过10年了,上面的答案都是常用的答案。但是如果什么都不起作用,而且你完全陷入困境......就把报告中的项目删除,直到问题消失为止。一旦确定哪一行或报告项导致了问题,将其放在矩形容器内。这就是解决方法。这种方法帮助我们很多次!额外的页面大多是由于报告项溢出右边缘而导致的。当其他方法都失败时,将物品放在矩形内或空白矩形内,可以防止发生这种情况。祝你好运!


通过在表格中添加额外的空列,我的PDF格式报告不会显示额外的空白页,它对我很有效! - firefly

5

您是否尝试查看报表右侧是否有任何空白?如果是,则可以将其拖回报表的末尾,然后将报表背景拖回到相同位置。


5
在报表的属性选项卡(myReport.rdlc),将“保持在一起”属性改为False。我已经为此问题苦苦挣扎了一段时间,这似乎解决了我的问题。 enter image description here

5

除了边距之外,我最常见到的问题是另外两个可能性:

  1. 使用 + 连接文本。你应该使用 & 代替。
  2. 文本超出了指定文本框的宽度。所以如果你的文本框只能容纳30个字符,而你试图塞入300个字符,你可能会得到额外的页面。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接