【发布时间】:2019-06-12 10:25:49
【问题描述】:
我开发了一个使用 SAP 的 Crystal 报表 SDK 生成 pdf、word 和 excel 报表的自动化 Web 服务。在过去的某个时间点,出现了对动态图像(特别是照片)的需求,因此该功能是通过以下方式实现的:
- 图像从静态目录中提取,根据纵横比调整为特定尺寸(例如,手动将 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 图像为例。使用上述方法调整大小为 800x600 的两个图像,具有相同的文件扩展名 (.jpg),输入到相同的 rpt 文件中,并且确实使用具有相同设置的相同占位符图像对象(我已将所有占位符图像设置为 0.7 CR 设计器中的 X 和 Y 缩放)在报表中的显示完全不同。一张 4:3 的图片可能会占用大约 50-60% 的页面(在导出的文档中),而另一张具有相同设置的图片可能会太大,以至于溢出到两三个页面。
我的问题:这是水晶报告中众所周知或记录在案的问题,还是我所描述的流程的不同部分导致了这种不一致? 如果是 CR 问题,是否有任何已知的解决方法?
我期待大家的回复,以及对我所描述内容的任何反馈。
【问题讨论】:
标签: c# asp.net-web-api crystal-reports