c# - Crystal Reports 中的动态图像不一致
问题描述
我开发了一个使用 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 问题,是否有任何已知的解决方法?
我期待大家的回复,以及对我所描述内容的任何反馈。
解决方案
确保用作动态图像的虚拟占位符的静态图像未调整大小。它们应该从已经是所需大小的图像中插入。
如果这不是问题,请提供 rpt 样本。
顺便说一句,您可以使用 UFL 在 Crystal 中动态创建调整大小的图像版本。
推荐阅读
- c# - 如何在 EF Core 的 SELECT 中映射数据库生成的列?
- python - Collatz 序列 - 尝试修复打印的“无”值
- sorting - 您将如何决定在快速排序中将哪个元素用作枢轴?
- arrays - 如何从散列中制作散列数组?
- r - R - 重新塑造数据框
- matlab - MATLAB 从不包含在另一个时间表中的时间表中删除观察结果
- sql - 在下一列定义中使用使用“AS”子句命名的列
- react-native - 仅以编程方式覆盖和控制 goBack
- javascript - 如何获取输入的值并在javascript和html中加上任意数字?
- r - 如何计算多个变量的比例