SQL Server 2016 SSRS条码中间出现空格问题求助
SQL Server 2016 SSRS Code128条码随机空格问题解决方案
问题背景
从SQL Server 2014 Report Builder升级到2016版本后,原自定义Code128条码代码失效,更换IDAutomationC128L字体后,条码中间随机在Item Number或Raw Material Item Number字段出现空格,附加.NET 4.8的System.Drawing.dll也无法解决。
解决方案
1. 重写自定义代码适配SSRS 2016
SSRS 2016对自定义代码的.NET依赖有变化,原代码可能调用了旧版System.Drawing的API导致兼容问题。改用纯字符串生成Code128条码逻辑,无需依赖外部DLL:
Public Function Code128(ByVal input As String) As String ' Code128A字符集,包含数字、大写字母及常用符号 Dim charSet As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-./:+=^ " Dim checksum As Integer = 104 ' Code128A起始符对应的校验值 Dim result As String = Chr(204) ' 起始符(Code128A) For Each c As Char In input Dim index As Integer = charSet.IndexOf(c) If index = -1 Then Throw New Exception("无效字符: " & c) checksum += index * result.Length result &= c Next ' 计算校验位 checksum = checksum Mod 103 result &= Chr(204 + checksum) ' 校验字符 result &= Chr(206) ' 终止符 Return result End Function
使用时,在条码文本框的表达式里调用:=Code.Code128(Fields!ItemNumber.Value)
2. 清理字段中的隐形字符
空格可能是字段本身包含的不可见字符(如制表符、换行、全角空格),在表达式中提前清理:
' 去除前后空格及制表符、换行 =Code.Code128(Trim(Replace(Replace(Fields!ItemNumber.Value, vbTab, ""), vbCrLf, "")))
或者用正则替换所有非打印字符:
=Code.Code128(System.Text.RegularExpressions.Regex.Replace(Fields!ItemNumber.Value, "\p{C}", ""))
3. 调整报表渲染参数
- 打开报表属性,将
ConsumeContainerWhitespace设为True,防止渲染时自动填充空格 - 条码文本框的Padding设为
0pt,取消Allow grow和Allow shrink选项,固定宽度确保字符连续 - 确认字体大小与IDAutomationC128L匹配(例如12pt字体对应标准条码宽度,避免字符间距异常)
4. 改用内置/第三方条码控件
如果自定义代码方案仍有问题,直接使用SSRS 2016支持的内置条码控件(部分版本需启用),或安装第三方条码扩展插件,彻底避开自定义代码的兼容问题。
内容的提问来源于stack exchange,提问作者Glenn94
相关产品推荐
相关产品推荐

