zoukankan      html  css  js  c++  java
  • SSRS 呈现Barcode Free

    http://www.ssrstips.com/free-reporting-services-barcodes  本文参考来源

    工作中需要用到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")

  • 相关阅读:
    scikit-opt——DE(差分进化)
    scikit-opt——SA(模拟退火)
    scikit-opt——Python中的群体智能优化算法库
    springboot EnableAutoConfiguration
    JAVA线程sleep和wait方法区别
    数据库优化-水平拆分 垂直拆分
    component和bean区别
    mysql 索引
    maven资源文件的相关配置
    IntelliJ IDEA 2017.2.2 的破解 有效期 2116年
  • 原文地址:https://www.cnblogs.com/Doitman/p/2726035.html
Copyright © 2011-2022 走看看