准备
通过第三方软件BarTender的SDK扩展实现,本次测试使用的版本为:BarTender2016R9版本,该版本可从各下载平台下载。
注意
- 版本安装时,可以选择试用,即可试用所有功能,如若不选择试用,则需要选择Automation版本,否则无法实现。
- 该软件为收费软件,需自行解决授权问题,如若试用或授权过期则可能生成二维码时会报错。
原理
- 通过BarTenderSDK实现自动化生成二维码图片
- 再将生成的二维码图片读取为Byte[]数组,以便rdl报表中可以试用
步骤
- 在ReportServer所在的服务器上安装BarTender软件
- 安装完成后,从BarTender安装目录
C:\Program Files\Seagull\BarTender Suite\SDK\Assemblies
内复制Seagull.BarTender.Print.dll文件至C:\Program Files\Microsoft SQL Server\MSRS11.MSSQLSERVER\Reporting Services\ReportServer\bin
目录,该目录为ReportServer的安装目录,默认安装会存在于上述路径。 - 使用BarTender软件制作QRCode模板,需要创建具名数据源,在添加条形码后修改其属性的数据源为嵌入的数据,选择类型为链接到现有的具名数据源即可,保存模板。
- 打开报表属性,点击引用标签,点击添加或删除程序集下的添加按钮,浏览至1中的目录,选择Seagull.BarTender.Print.dll文件,点击打开即可,该dll也是基于.NET Framework4.0开发。
- 点击代码标签,添加下列代码,btw_path为此前创建的btw模板文件所在路径,该路径可自由设置,尽量放置在非系统目录下。pic_path为所生成的二维码图片所在路径,可与btw模板文件在同一目录。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16Public Function QRCode(ByVal stringText as String) as Byte()
Const btw_path As String = "C:\Temp\SNM_BT_JobNum.btw"
Const pic_path As String = "C:\Temp\tmp.jpg"
Try
Dim btEngine As Seagull.BarTender.Print.Engine = New Seagull.BarTender.Print.Engine(True)
Dim labelFormat As Seagull.BarTender.Print.LabelFormatDocument = btEngine.Documents.Open(btw_path)
'JobHead为创建的btw模板中具名数据源的名字,根据自定义内容修改
labelFormat.SubStrings.SetSubString("JobHead", stringText)
labelFormat.ExportImageToFile(pic_path, Seagull.BarTender.Print.ImageType.JPEG, Seagull.BarTender.Print.ColorDepth.ColorDepth256, New Seagull.BarTender.Print.Resolution(96),Seagull.BarTender.Print.OverwriteOptions.Overwrite)
labelFormat.Close(Seagull.BarTender.Print.SaveOptions.DoNotSaveChanges)
btEngine.Stop()
Catch ex As Exception
'Return ex.ToString()
End Try
Return System.IO.File.ReadAllBytes(pic_path)
End Function - 关闭报表属性,在报表所需位置内插入图像,在打开的图像属性中,选择图像来源为
数据库
,使用此字段填写表达式为=Code.QRCode("This is a test. " + Fields!QRDemo.Value)
括号中填写你需要显示在二维码中的字段,使用此MIME类型选择image/png
- 关闭图像属性,点击运行报表即可预览。
参考
- BarTender安装目录下的SDK目录中有相关SDK Help文档,具体路径:
C:\Program Files\Seagull\BarTender Suite\SDK\BarTender .NET SDK Help