本文参考来源
工作中需要用到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")