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")

  • 相关阅读:
    Apache的Order Allow,Deny 详解
    apache的AllowOverride以及Options使用详解
    安装启动apache2.4后报Invalid command 'order', perhaps misspelled or defined by a module not included
    前端常见跨域解决方案(全)
    php面试宝典
    php面试题2018
    nginx负载均衡的5种策略
    多台服务器共享session问题
    小程序定义并使用类
    微信小程序真机预览接口不到数据,打开调试确能请求到
  • 原文地址:https://www.cnblogs.com/Doitman/p/2726035.html
Copyright © 2011-2022 走看看