You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 02:40:33