在做项目中。我们可能会经常遇到需要在报表中显示图片的需求。如果说这个图片是个固定的,只是作为一个报表的标题或者logo之类的。那么就很简单,可是对于那些保存在数据库中或者通过程序生成的一个内存中的图片又该如何显示呢?我们大家来共同讨论一下。在讨论之前先说明一下我的问题,我的图片刚好是通过程序生成的一个条码图像。他返回的是一个Bitmap类型的缩略图。就是要把这图像显示在报表中.

阅读之前大家可以先参考一下MSDN上面所描述的方法。

http://msdn.microsoft.com/zh-cn/library/ms251715(VS.80).aspx

其内容描述如下:

图像是一种包含对存储在报表服务器上、嵌入在报表中或存储在数据库中的图像的引用的报表项。图像可以是报表中显示一次的徽标或图片,也可以是数据行中重复显示的图片。还可以将图像用作某些报表项的背景。您可以从以下来源获取图像:

数据库

外部文件共享区或网站

在本地嵌入到报表中的图像

无法使用已经添加到项目的图像文件。

数据绑定的图像可以由数据库中存储的二进制数据来显示。例如,在产品列表中产品名称旁边显示的图片就属于数据库图像。

外部图像是由指向图像文件的 URL 指定的。外部图像适用于在多个报表或网页间共享的徽标和静态图片。

本地报表图像先嵌入在报表中,然后再被引用。图像数据存储在报表定义中,不作为单独的文件存在。嵌入图像可确保图像始终可用于报表,但嵌入图像不能共享。嵌入图像会增大报表定义文件的大小。嵌入图像时,报表设计器会对该图像进行 MIME 编码,然后以文本形式将其存储在报表定义中。

如何向报表添加嵌入图像

在图形设计模式下打开客户端报表定义 (.rdlc) 文件。

从“报表”菜单中,选择“嵌入图像”,然后添加要在报表中使用的所有图像。如果“报表”菜单不可用,请在报表设计区内单击。

将图像控件从工具箱拖到报表布局。必须使用用于 ReportViewer 报表的图像控件。

在 Visual Studio 中选择图像,然后打开“属性”窗口。

将 Source 设置为 Embedded。

将 Value 设置为嵌入在报表定义中的某个图像。可以从下拉列表中选择要使用的图像。

在报表中使用外部图像或数据库图像

默认情况下,不支持在 ReportViewer 报表中使用外部图像。若要使用外部图像,必须在代码中设置 EnableExternalImages 属性。若要查看如何指定外部图像的示例,请参见示例:在 ReportViewer 中使用 RSS 源。

若要使用数据库图像,在 MIME 类型为 JPG、PNG 或 BMP 时,可以指定包含图像的数据库字段。如果图像是以二进制对象形式存储的,则必须编写一个表达式,将图像转换为支持的类型。

背景图像

您可以将图像用作表体或矩形、文本框、列表、矩阵或表的背景图像。背景图像与图像具有相同的属性。您还可以指定如何重复图像来填充项的背景。

注意

某些呈现扩展插件(例如,HTML 呈现扩展插件)可以在表体、页眉和页脚中呈现表体的背景图像。可以为页眉和页脚定义单独的背景图像,但如果没有定义图像,报表将使用表体的背景图像。其他呈现扩展插件(例如,图像呈现扩展插件)在页眉和页脚中不呈现表体背景图像。



若要添加背景图像,请执行以下操作:

在图形设计模式下打开客户端报表定义 (.rdlc) 文件。

选择要为其添加背景图像的报表项。

注意

背景图像仅适用于矩形、文本框、表、矩阵、列表或表体等项。



在“属性”窗口中,展开 BackgroundImage,然后执行以下操作:

对于 Source,选择 External、Embedded 或 Database。

注意

若要使用项目中的图像,请选择 External。



对于 Value,键入或选择一个计算结果为图像来源的表达式。

如果 Source 属性设置为 External,则表达式的计算结果必须是图像的有效路径。此路径可以是驻留在报表服务器上的图像的静态路径,也可以是基于某个字段的路径。如果图像存储在项目中,则键入该图像在项目中显示的名称。

如果 Source 属性设置为 Embedded,则表达式的计算结果必须是嵌入到报表中的图像的名称。如果 Source 属性设置为 Database,则表达式的计算结果必须是包含二进制图像数据的字段。

对于 MIMEType,为图像选择适当的 MIME 类型。

注意

只有将 Source 属性设置为 Database 时,MIMEType 才适用。如果 Source 属性设置为 External 或 Embedded,则忽略 MIMEType 的值。



对于 BackgroundRepeat,选择 Repeat、NoRepeat、RepeatX 或 RepeatY。

看完之后,我们就继续来说我之前提到得问题, 首先我把生成的条码图像转化为二进制字节数组,方法如下:

private byte[] BitmapToBytes(Bitmap Bitmap)

{

MemoryStream ms = null;

try

{

ms = new MemoryStream();

Bitmap.Save(ms, ImageFormat.Gif);

byte[] byteImage = new Byte[ms.Length];

byteImage = ms.ToArray();

return byteImage;

}

catch (ArgumentNullException ex)

{

throw ex;

}

finally

{

ms.Close();

}

}

然后把得到这个二进制字节数组要转码成 Base64 类型的字符串。转化后放入到报表的数据集中。代码如下:

bytes[] imgBytes = BitmapToBytes(bmp);

DataTable dt = new DSHgz.DT_HgzDataTable();  //自定义的数据集

DataRow dtRow  = dt.NewRow();

dtRow["ProID"] = "BD11-12/800-16D";

dtRow["barCode"] = Convert.ToBase64String(imgBytes);  //存放前先转码。关键之处。

dtRow["date"] = "2009年06月26日";

dt.Rows.Add(dtRow);

在表报rdlc中。在报表主体中拖放一个image控件。设置其Source为database,value=System.Convert.FromBase64String(Fields!barCode.Value) // 关键之处。

然后设置MIMEType 属性。这样,你的图片就可以动态的显示到报表中了。

ReportViewer报表模版中显示图片相关推荐

  1. 在DataGrid中显示图片

    兼谈 DadaGrid 模板列的创建 DadaGrid 是 ASP.NET 编程中一个很重要的控件,其优良的可定制功能为提高它的表现力提供了极大的方便.除了与数据源直接绑定以外,我们还可以通过列绑定模 ...

  2. python opencv 内存泄露_解决python中显示图片的plt.imshow plt.show()内存泄漏问题

    当要处理批量图片,且每张图片都要进行显示时,用plt.imshow() plt.show()会出现内存泄漏, 管理器中看到其中一个python进程的内存不断上涨,目前有找到解决方法 from matp ...

  3. 如何在CSDN博客中显示图片而不是链接

    之前想在发的博客里加入图片,结果试了好多次,只是在博客中显示图片链接...... 后来发现添加图片时没有选择宽度与高度,无语了...... 总结一下,希望以后遇到和我一样问题的朋友可以通过这篇博客得到 ...

  4. python plt.show_解决python中显示图片的plt.imshow plt.show()内存泄漏问题

    当要处理批量图片,且每张图片都要进行显示时,用plt.imshow() plt.show()会出现内存泄漏, 管理器中看到其中一个python进程的内存不断上涨,目前有找到解决方法 from matp ...

  5. Android - 文字中显示图片

    Android TextView中显示图片的4种方式 转载于:https://www.cnblogs.com/qlky/p/7282658.html

  6. php显示网络图片,php中显示图片的方法

    php中显示图片的方法 发布时间:2020-08-25 14:08:07 来源:亿速云 阅读:80 作者:小新 这篇文章给大家分享的是有关php中显示图片的方法的内容.小编觉得挺实用的,因此分享给大家 ...

  7. 如何在Python中显示图片?

    如何在Python中显示图片? 相信很多程序员都曾经因为要在Python中显示图片而苦恼过,毕竟图像处理是数据分析和人工智能领域中的重要一环.所以,今天我们就来介绍一下Python中显示图片的方法. ...

  8. java开发 图片显示不出来_java web开发中 显示图片的问题

    记录一个java Web开发中显示图片的小问题: 我碰到的问题是:把服务器上存的图片,在客户端的浏览器中显示出来.解决方法如下: 两种显示方式 一是:在servlet 或 action中直接输入图片到 ...

  9. python截取图片的ROI+OpenCV 在坐标中显示图片+鼠标点击图片显示点坐标

    又来做下笔记了.现在我的毕业设计进行到数据处理的阶段,要在乳腺图像上截取4张相同大小的1024*1024图片,并且每张图片都必须覆盖微钙化点,以下是我现在用到的一些简单程序. 1.首先是截图程序如下: ...

最新文章

  1. 如何学好 Linux、C++,并搞定 BAT 面试 作者/分享人:天千
  2. 【小白学习C++ 教程】五、C++数据结构向量和数组
  3. 可自动定时切换的选项卡/滑动门导航代码
  4. recaptcha_与reCAPTCHA的Spring集成
  5. xshell连接突然报Connection closed by foreign host.
  6. 安卓逆向_10 --- Log 日志的插入和分析、toast方法、栈跟踪
  7. tomcat启动关闭两种方法
  8. 陌陌 3 千万数据暗网出售;美团反腐 89 人受刑事查处;iPhone 推迟 5G 采用时间 | 极客头条...
  9. datagrid底部显示水平滚动_CSS flex 布局,头部和底部固定,中间出现滚动条
  10. python软件-Python软件下载|Python最新版本v3.5.1 下载_当游网
  11. Windows10右键没有新建文本文件
  12. 智能实验室-全能优化(Guardio) 4.0.0.691 beta 11
  13. 电脑一直显示服务器不兼容,原神PC版提示版本不兼容怎么办 PC版常见问题介绍...
  14. Android 手把手教你实现百度身份证识别
  15. 为 Nexus 5 准备的 Sailfish 移植版本
  16. python创建学生类姓名学号_python定义一个学生类,包括学号、姓名和出生日期三个属性(数据成员);包括一个用...
  17. AlertDialog基本使用
  18. 海康 布防 java
  19. JavaWeb27.2【综合案例:旅游线路详情展示】
  20. 超市小程序怎么做_分享超市微信小程序制作步骤

热门文章

  1. Java设计原则——开闭原则
  2. 软考第五章 无线通信网
  3. 【flowable】十、flowable网关
  4. linux-shell脚本-利用shell函数计算两数之和--思考return原理
  5. JavaScript简单的Tab栏导航——切换页面
  6. MATLAB输入排序代码,matlab快速排序算法实现
  7. anaconda安装scrapy过程
  8. 关于sql注入中的 --+
  9. chrome 启动参数--user-data-dir 和 --profile-directory的关系
  10. hrms系统的服务器名是什么,解读HRMS.doc