Crystal Reports中的动态图像不一致

时间:2019-06-12 10:25:49

标签: c# asp.net-web-api crystal-reports

我开发了一种自动化的Web服务,该服务使用SAP的Crystal Reports SDK生成pdf,word和excel报告。在过去的某一时刻,需要动态图像(特别是照片),因此该功能是通过以下方式实现的:

  • 图像是从静态目录中提取的,并根据宽高比将其调整为特定尺寸(例如,将4:3图像手动调整为800x600),然后放置在新的子文件夹中。调整大小是通过以下方法完成的:
    private Bitmap ResizeImage(Bitmap image, int width, int height) {
        var destRect = new System.Drawing.Rectangle(0, 0, width, height);
        var destImage = new Bitmap(width, height);
        destImage.SetResolution(image.HorizontalResolution, 
        image.VerticalResolution);
        using (var graphics = Graphics.FromImage(destImage)) {
            graphics.CompositingMode = CompositingMode.SourceCopy;
            graphics.CompositingQuality = CompositingQuality.HighQuality;
            graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
            graphics.SmoothingMode = SmoothingMode.HighQuality;
            graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
            using (var wrapMode = new ImageAttributes()) {
                wrapMode.SetWrapMode(WrapMode.TileFlipXY);
                graphics.DrawImage(image, destRect, 0, 0, image.Width, 
                image.Height, GraphicsUnit.Pixel, wrapMode);
            }
        }
        return destImage;
    }
    
  • 放置在该子文件夹中的所有图像的完整路径都作为Crystal Reports自定义对象集合数据源输入(对于最多10张照片,有10个字符串变量,而对于其他图像,还有一些其他变量,所有这些变量都具有自己的占位符图像抑制部分中的对象)。
  • 在报告中,被抑制部分中的占位符图像在“图形位置”公式中具有包含图像路径的变量。如果在图形位置中输入的变量是存在图像的有效路径,则该部分将以编程方式取消抑制,并且占位符图像将替换为目录中的图像。

问题:让我们以文字格式(.doc)的4:3图像为例。使用上述方法将两个具有相同文件扩展名(.jpg)的图像调整为800x600,并在相同的rpt文件中输入并且实际上使用具有相同设置的相同占位符图像对象(我已将所有占位符图像设置为0.7 CR设计器中的X和Y缩放比例)在报告中显示的方式完全不同。一幅4:3的图像可能会占据页面的50-60%(在导出的文档中),而另一幅实际上设置相同的图像可能太大,以至于溢出到另外两三页。

我的问题:这是Crystal报表的一个众所周知的或已记录的问题,还是我描述的过程的不同部分导致了这种不一致? 如果是CR问题,是否有任何已知的解决方法?

我期待每个人的答复以及对我所描述内容的任何反馈。

1 个答案:

答案 0 :(得分:0)

请确保未调整用作动态图像的虚拟占位符的静态图像的大小。它们应该从已经具有所需大小的图像中插入。

如果这不是问题,请提供rpt示例。

顺便说一下,您可以使用UFL在Crystal中即时创建调整大小的图像版本。