博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SSRS 呈现Barcode Free
阅读量:4474 次
发布时间:2019-06-08

本文共 12425 字,大约阅读时间需要 41 分钟。

  本文参考来源

工作中需要用到SSRS呈现标签

1、引用对应的字体(39、128)下载修改后缀名

2、添加code代码,对字符编码

 

Public Shared Function Code39(ByVal stringText As String) As Byte()        Dim result As Byte() = Nothing         Try            result = GenerateImage("Code 3 de 9", StringToBarcode39String(stringText))        Catch ex As Exception        End Try         Return result    End Function     Public Shared Function Code128(ByVal stringText As String) As Byte()        Dim result As Byte() = Nothing         Try            result = GenerateImage("Code 128", StringToBarcode128String(stringText))        Catch ex As Exception        End Try         Return result    End Function     Public Shared Function GenerateImage(ByVal fontName As String, ByVal stringText As String) As Byte()        Dim oGraphics As System.Drawing.Graphics        Dim barcodeSize As System.Drawing.SizeF        Dim ms As System.IO.MemoryStream         Using font As New System.Drawing.Font(New System.Drawing.FontFamily(fontName), 36)            Using tmpBitmap As New System.Drawing.Bitmap(1, 1, System.Drawing.Imaging.PixelFormat.Format32bppArgb)                oGraphics = System.Drawing.Graphics.FromImage(tmpBitmap)                oGraphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixel                barcodeSize = oGraphics.MeasureString(stringText, font)                oGraphics.Dispose()            End Using             Using newBitmap As New System.Drawing.Bitmap(barcodeSize.Width, barcodeSize.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb)                oGraphics = System.Drawing.Graphics.FromImage(newBitmap)                oGraphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixel                 Using oSolidBrushWhite As New System.Drawing.SolidBrush(System.Drawing.Color.White)                    Using oSolidBrushBlack As New System.Drawing.SolidBrush(System.Drawing.Color.Black)                        oGraphics.FillRectangle(oSolidBrushWhite, New System.Drawing.Rectangle(0, 0, barcodeSize.Width, barcodeSize.Height))                        oGraphics.DrawString(stringText, font, oSolidBrushBlack, 0, 0)                    End Using                 End Using                 ms = New System.IO.MemoryStream()                newBitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png)            End Using        End Using         Return ms.ToArray()    End Function    Public Shared Function StringToBarcode128String(ByVal value As String) As String        ' Parameters : a string        ' Return     : a string which give the bar code when it is dispayed with CODE128.TTF font        '              : an empty string if the supplied parameter is no good        Dim charPos As Integer, minCharPos As Integer        Dim currentChar As Integer, checksum As Integer        Dim isTableB As Boolean = True, isValid As Boolean = True        Dim returnValue As String = String.Empty         If value.Length > 0 Then             ' Check for valid characters            For charCount As Integer = 0 To value.Length - 1                'currentChar = char.GetNumericValue(value, charPos);                currentChar = AscW(Char.Parse(value.Substring(charCount, 1)))                If Not (currentChar >= 32 AndAlso currentChar <= 126) Then                    isValid = False                    Exit For                End If            Next             ' Barcode is full of ascii characters, we can now process it            If isValid Then                charPos = 0                While charPos < value.Length                    If isTableB Then                        ' See if interesting to switch to table C                        ' yes for 4 digits at start or end, else if 6 digits                        If charPos = 0 OrElse charPos + 4 = value.Length Then                            minCharPos = 4                        Else                            minCharPos = 6                        End If                          minCharPos = IsNumber(value, charPos, minCharPos)                         If minCharPos < 0 Then                            ' Choice table C                            If charPos = 0 Then                                ' Starting with table C                                ' char.ConvertFromUtf32(210);                                returnValue = (ChrW(210)).ToString()                            Else                                ' Switch to table C                                returnValue = returnValue & (ChrW(204)).ToString()                            End If                            isTableB = False                        Else                            If charPos = 0 Then                                ' Starting with table B                                ' char.ConvertFromUtf32(209);                                returnValue = (ChrW(209)).ToString()                             End If                        End If                    End If                     If Not isTableB Then                        ' We are on table C, try to process 2 digits                        minCharPos = 2                        minCharPos = IsNumber(value, charPos, minCharPos)                        If minCharPos < 0 Then                            ' OK for 2 digits, process it                            currentChar = Integer.Parse(value.Substring(charPos, 2))                            currentChar = IIf(currentChar < 95, currentChar + 32, currentChar + 105) ''                            returnValue = returnValue & (ChrW(currentChar)).ToString()                            charPos += 2                        Else                            ' We haven't 2 digits, switch to table B                            returnValue = returnValue & (ChrW(205)).ToString()                            isTableB = True                        End If                    End If                    If isTableB Then                        ' Process 1 digit with table B                        returnValue = returnValue & value.Substring(charPos, 1)                        charPos += 1                    End If                End While                 ' Calculation of the checksum                checksum = 0                For [loop] As Integer = 0 To returnValue.Length - 1                    currentChar = AscW(Char.Parse(returnValue.Substring([loop], 1)))                    currentChar = IIf(currentChar < 127, currentChar - 32, currentChar - 105)                    If [loop] = 0 Then                        checksum = currentChar                    Else                        checksum = (checksum + ([loop] * currentChar)) Mod 103                    End If                Next                 ' Calculation of the checksum ASCII code                checksum = IIf(checksum < 95, checksum + 32, checksum + 105)                ' Add the checksum and the STOP                returnValue = returnValue & (ChrW(checksum)).ToString() & (ChrW(211)).ToString()            End If        End If         Return returnValue    End Function      Private Shared Function IsNumber(ByVal InputValue As String, ByVal CharPos As Integer, ByVal MinCharPos As Integer) As Integer        ' if the MinCharPos characters from CharPos are numeric, then MinCharPos = -1        MinCharPos -= 1        If CharPos + MinCharPos < InputValue.Length Then            While MinCharPos >= 0                If AscW(Char.Parse(InputValue.Substring(CharPos + MinCharPos, 1))) < 48 OrElse AscW(Char.Parse(InputValue.Substring(CharPos + MinCharPos, 1))) > 57 Then                    Exit While                End If                MinCharPos -= 1            End While        End If        Return MinCharPos    End Function     Public Shared Function StringToBarcode39String(ByVal value As String, Optional ByVal addChecksum As Boolean = False) As String        ' Parameters : a string        ' Return     : a string which give the bar code when it is dispayed with CODE128.TTF font        '              : an empty string if the supplied parameter is no good        Dim isValid As Boolean = True        Dim currentChar As Char        Dim returnValue As String = String.Empty        Dim checksum As Integer = 0        If value.Length > 0 Then             'Check for valid characters            For CharPos As Integer = 0 To value.Length - 1                currentChar = Char.Parse(value.Substring(CharPos, 1))                If Not ((currentChar >= "0"c AndAlso currentChar <= "9"c) OrElse (currentChar >= "A"c AndAlso currentChar <= "Z"c) OrElse currentChar = " "c OrElse currentChar = "-"c OrElse currentChar = "."c OrElse currentChar = "$"c OrElse currentChar = "/"c OrElse currentChar = "+"c OrElse currentChar = "%"c) Then                    isValid = False                    Exit For                End If            Next            If isValid Then                ' Add start char                returnValue = "*"                ' Add other chars, and calc checksum                For CharPos As Integer = 0 To value.Length - 1                    currentChar = Char.Parse(value.Substring(CharPos, 1))                    returnValue += currentChar.ToString()                    If currentChar >= "0"c AndAlso currentChar <= "9"c Then                        checksum = checksum + AscW(currentChar) - 48                    ElseIf currentChar >= "A"c AndAlso currentChar <= "Z"c Then                        checksum = checksum + AscW(currentChar) - 55                    Else                        Select Case currentChar                            Case "-"c                                checksum = checksum + AscW(currentChar) - 9                                Exit Select                            Case "."c                                checksum = checksum + AscW(currentChar) - 9                                Exit Select                            Case "$"c                                checksum = checksum + AscW(currentChar) + 3                                Exit Select                            Case "/"c                                checksum = checksum + AscW(currentChar) - 7                                Exit Select                            Case "+"c                                checksum = checksum + AscW(currentChar) - 2                                Exit Select                            Case "%"c                                checksum = checksum + AscW(currentChar) + 5                                Exit Select                            Case " "c                                checksum = checksum + AscW(currentChar) + 6                                Exit Select                        End Select                    End If                Next                ' Calculation of the checksum ASCII code                If addChecksum Then                    checksum = checksum Mod 43                    If checksum >= 0 AndAlso checksum <= 9 Then                        returnValue += (ChrW(checksum + 48)).ToString()                    ElseIf checksum >= 10 AndAlso checksum <= 35 Then                        returnValue += (ChrW(checksum + 55)).ToString()                    Else                        Select Case checksum                            Case 36                                returnValue += "-"                                Exit Select                            Case 37                                returnValue += "."                                Exit Select                            Case 38                                returnValue += " "                                Exit Select                            Case 39                                returnValue += "$"                                Exit Select                            Case 40                                returnValue += "/"                                Exit Select                            Case 41                                returnValue += "+"                                Exit Select                            Case 42                                returnValue += "%"                                Exit Select                        End Select                    End If                End If                ' Add stop char                returnValue += "*"            End If        End If        Return returnValue    End Function

3、添加条码图片的绘制,引用

System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a

 

4、呈现

=Code.Code39("39BARCODE")

=Code.Code128("128BARCODE")

 

转载于:https://www.cnblogs.com/Doitman/archive/2012/10/16/2726035.html

你可能感兴趣的文章
扑克序列
查看>>
java笔记--适配器模式的运用
查看>>
C#与数据结构--图的遍历
查看>>
ispy 编译笔记
查看>>
bzoj1067——SCOI2007降雨量(线段树,细节题)
查看>>
day 1
查看>>
洛谷P1282 多米诺骨牌【线性dp】
查看>>
数据类型的提升(promotion)
查看>>
Thead是不能返回值的,但是作为更高级的Task当然要弥补一下这个功能。
查看>>
Android呼叫转移跳转到拨号盘 “#”号显示不出来
查看>>
Python中的生成器与yield
查看>>
JQuery 的Bind()事件
查看>>
Maven 常用配置
查看>>
Objects源码解析
查看>>
video
查看>>
栈的c语言顺序实现(动态申请空间)
查看>>
【转】 Pro Android学习笔记(六七):HTTP服务(1):HTTP GET
查看>>
获取子iframe框架的元素
查看>>
WordCount bug修复录
查看>>
承载进程 (vshost.exe)
查看>>