65.9K
CodeProject 正在变化。 阅读更多。
Home

如何在 SSRS 报告中嵌入条形码

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.79/5 (30投票s)

2014年6月24日

CPOL

4分钟阅读

viewsIcon

335755

downloadIcon

5872

如何在 SSRS 中使用 barcodelib 生成的条形码(请注意,条形码字体在运行时不起作用)。

引言

以下摘录将展示如何在 SSRS 报告中成功嵌入条形码(类似于 Crystal Reports,但略有不同)。使用条形码字体很好,但它们无法在 SSRS 报告服务器上发布的报告中使用。此外,条形码字体可能相当昂贵。感谢 一篇精彩的文章,世界变得更美好了。

要继续执行以下步骤,您需要从他的文章中下载二进制文件barcodelib

背景

因此,我首先尝试使用免费的条形码字体来使其工作,但如引言中所述,结果失败了。您可以尝试一下,您会认为它有效,直到您发布报告。

接下来,我尝试编写一些自定义代码来生成一个Bitmap,在其中使用Graphics.DrawStringBarcode字体,然后将其返回为Byte[]。太好了,它奏效了,但导出的 PDF 报告的图像质量急剧下降,因为首先,它是一个 TrueType 字体……所以渲染、转换和打印的条形码有时可以被扫描,但遗憾的是,条形码扫描器有时会失败,因为图像不够好而无法读取。所以使用我自己的代码和一个免费字体还不够好。在浏览了许多论坛和想法后,我找到了 Brad 的文章,并想尝试一下,因为它直接渲染条形码,而不是字体到图像的转换。

使用 Brad Barnhill 提供的 barcodelib 似乎可以完美生成条形码,即使在打印后也能获得出色的质量,并且配置高度灵活,可以旋转、带有或不带有标签,支持各种条形码格式等。

那么,如何将这些自定义 DLL 东西集成到 SSRS 中?好吧,请看下面。

Using the Code

首先,您将 barcodelib.dll (来自 Brad Barnhill 的文章 Barcode Image Generation Library)复制

到“随处可见”。更具体地说(以我使用 SSRS 2008 和 VS 2008 的示例为例)->

C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportServer\bin\

C:\Program Files (x86)\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies

C:\Program Files (x86)\Microsoft Visual Studio 9\Common7\IDE\PrivateAssemblies

然后,您在 Report->Properties 中添加对 .NET 选项卡中 System.Drawing 的引用,以及

使用浏览选项卡对报表服务器的 bin 文件夹中的 barcodelib.dll 的另一个引用。

然后,添加类名“Barcodelib.Barcode”和实例名“bar”。

现在它看起来应该像这样

在报表 Properties 的 Code 部分,您现在添加以下代码

 Public Function Convert(Text As String) As Byte()
            Dim b As System.Drawing.Bitmap
         '   Dim bar As New BarcodeLib.Barcode
            bar.Alignment = BarcodeLib.AlignmentPositions.LEFT
            bar.IncludeLabel = False
            bar.RotateFlipType = Drawing.RotateFlipType.RotateNoneFlipNone
            b = bar.Encode(BarcodeLib.TYPE.CODE39Extended, Text, 400, 30)
            Dim bitmapData As Byte() = Nothing
            Using ms As New System.IO.MemoryStream()
                b.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp)
                bitmapData = ms.ToArray()
            End Using
            Return bitmapData
        End Function

您是否认出了前面提到的实例“bar”在这里被使用了?

您可以根据需要更改条形码的格式设置(例如,增强函数以接受参数),旋转、条形码类型等。请参阅引言中提到的有关 barcodelib 功能的文章!非常感谢 Brad!

并调整大小(在本例中为 400x30),也许能满足您的期望。通过反复试验,玩得开心。

SSRS 图像属性(请参阅下方)需要一个 byte[]。所以它们会得到一个,快速将 bitmap 写入 memorystream 并获取 byte[]。其他方法,例如使用 Marshal.Copy 也可以工作,但在我们目前处理的 SSRS 嵌入式代码场景中会引入更多麻烦。

现在一切都准备就绪,我们进入有趣的部分。

您向报告中添加一个 Image 以包含条形码。转到 Image 属性:

将图像源设置为“Database”,MIME 类型设置为“Image/bmp”,并将字段的表达式设置为以下内容

Code”访问您嵌入的代码的命名空间,我们在其中调用 barcodelib 来生成 Barcode

您可以将“*Test1234*”替换为您要编码的条形码内容,例如来自 datasource

First(Fields!myfield.Value)

报告的预览将生成一个整洁的条形码,部署/发布的版本在报表服务器上也会生成 :-)。太简单了,不是吗?

voilà - 都完成了!

关注点

有几件事需要注意。

  • 确保您的图像大小足够大,或者允许自动增长,或者设置为“按比例缩放”。如果条形码失真或被裁剪,则可能无法被 barcodescanner 读取,因为它的一半丢失了。
  • Code39Extended 似乎需要一个星号来开始和结束条形码。这意味着您的文本需要以 * 开头并以 * 结尾。然后读取的条形码内容将是 * 星号之间的内容。这可能也适用于某些其他条形码格式。
  • 确保以高分辨率打印报告,以便条形码正常显示,而不是模糊不清。使用彩色打印,因为原始条形码图像是 24 位位图,灰度化可能会使其模糊。在我的激光打印机上,我使用彩色、单面和光栅打印作为选项。
  • 如果您将报告部署到另一台远程计算机,请确保您已将 barcodelib 部署到该计算机的报表服务器的 bin 目录。
  • 使用 VS2012 时可能存在问题,请参阅 此链接

本网站上有很多关于条形码主题的其他非常有趣的文章,请留意!

历史

  • 2014-09-09:添加了关于 VS2012 嵌入自定义库时问题的提示
  • 2014-06-27:添加了更多关于打印条形码的要点细节
© . All rights reserved.