我有一个报告,呈现从各种来源收集的图像(jpg)。这在报表查看器中以及通过Excel导出时都可以正常工作。
但是,当导出为PDF时,大约5%的图像会被错误地渲染,如下图所示,左边是原始图像,右边是渲染图像;
我发现如果我在mspaint中打开其中一个图像,只需单击“保存”,则在下一个报表运行时,图像现在可以正确呈现。
对于哪些图像属性/格式对SSRS有效以在PDF中正确呈现图像,是否有任何规则?基本上我想以某种方式找到这些图像,它们会在报告运行之前呈现错误并在之前修复它们......
答案 0 :(得分:3)
由于输出的外观,我会说这些JPEG图像具有CMYK颜色空间,但SSRS假定它们使用RGB颜色空间并在PDF中设置错误的颜色空间。
如果您可以发布JPEG图像和PDF样本,我可以为您提供更多详细信息。
答案 1 :(得分:3)
我从来没有最终获得SSRS来显示问题图像,但是,在运行报告之前确定哪些图像将包含在不可显示的集合中,以便它们可以转换为支持的格式(自动)也是一个解决方案。
在我的情况下,所有图像都是通过用户上传到网站提供的,因此我能够在图像到达时识别和转换图像。对于所有现有图像,我能够运行一个脚本来识别问题图像并进行转换。
从我拍摄的数千张照片中,我能够确定无法正确渲染的图像具有以下属性:
我最初使用标准的.NET GDI(System.Drawing
)来处理图像,但是在处理具有额外数据的图像时,API通常容易崩溃(OutOfMemoryException
)。因此,我转而使用ImageMagick对于每个已识别的图像I:
请注意,在没有剥离颜色配置文件的情况下从CMYK 转换为RGB不足以让所有图像都能正确呈现。
在将上传的图像保存到磁盘之前,我最终只是在从用户收到的每个图像字节流上执行这些项目(没有先确定问题)。之后,我再也没有出现渲染问题。
答案 2 :(得分:1)
我在屏幕上正确渲染图像时出现了完全相同的问题,但在将报告导出为PDF时,问题与问题中的问题完全相同。以下是我如何解决它。
问题
我在MSDN上遇到的第一个线索是this article。似乎无论原始图像密度如何,SSRS中的PDF渲染器都会将所有图像调整为96 DPI。如果图像的原始大小大于页面(或容器)的大小,那么您将遇到此问题。
解决方案
解决方案是调整源图像的大小,使其适合您的页面。根据您的页面大小和边距设置,需要一些计算。
在我的情况下,我使用A4纸尺寸,即21厘米×29.7厘米。但是,我的左边距为1.5厘米,右边距为0.5厘米,内部宽度为19厘米。我允许额外的0.5厘米作为误差范围,因此我使用18.5厘米的内部宽度。
21 cm - 1.5 cm - 0.5 cm - 0.5 cm = 18.5 cm
如前所述,PDF渲染器生成的分辨率为96 DPI(每英寸点数)。对于我们这些不在美国或利比里亚共和国的人来说,这是37.79 DPC(每厘米点数)。所以,要获得我们的宽度:
18.5 cm * 37.79 dpc = 699 pixels
您的结果可能会有所不同,具体取决于(1)您使用的纸张尺寸,以及(2)左右边距。
由于页面高于宽度,我们只需要在保持图像比例的同时调整宽度。如果您使用的纸张尺寸比较高,请使用长度。
现在在Paint(或您选择的图像编辑器)中打开源图像,并按比例将图像调整为所需的宽度(或长度)(以像素为单位),保存,将其导入容器,并以视觉方式调整图像大小关于容器。它应该在屏幕上看起来相同,现在可以正确呈现为PDF。
答案 3 :(得分:0)
这是向Microsoft Connect报告的问题 来自SSRS 2008 How to get the best image quality possible?:
您在PDF中看到的图像行为是PDF渲染器根据PDF规范将图像序列化为PDF所需的图像转换的结果。
我们知道它并不理想,我们将图像质量的损失归类为产品问题。因此,很难真正说出如何获得最佳质量的图像。
有趣的是,我听说客户在原始图片为BMP时效果不错