2014-11-15 63 views
0

我有攜帶條形碼,在Visual Studio預覽它看起來完美,但在發佈到服務器報告服務(Web)不顯示我的條形碼,就好像隱藏條碼是隱藏在報告服務

的時間報告

這是我在報告中使用的代碼:

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 
  • 難道我用的組件,而條形碼圖像是一種

回答

0

難道是在服務器上的條形碼字體丟失?