2015-11-04 119 views
1

我創建了一個SSRS報告,其中包含一些Code128條形碼。條碼是使用最新的zxing.net庫生成的。我想在Code128條形碼中包含製表符(char(9))。但它會失敗,以下異常消息:如何使用zxing.net處理Code128中的特殊字符

System.ArgumentException:壞字符輸入:

不用說,它的工作原理就像一個沒有製表性格魅力。

在報告中使用GetBarCodeHorizontal來生成條形碼。然而,用於測試目的,我把它包成一個Visual Studio VB項目:

Class MainWindow 
    Public Function GetBarCodeHorizontal(ByVal s As String, ByVal width As Integer) As Byte() 
     Dim writer As New ZXing.BarcodeWriter() 
     Dim ms As System.IO.MemoryStream = New System.IO.MemoryStream() 

     writer.Format = ZXing.BarcodeFormat.CODE_128 
     writer.Options = New ZXing.Common.EncodingOptions 
     writer.Options.Width = width 
     writer.Options.Height = 60 
     writer.Options.PureBarcode = False 
     'writer.Options.Hints.Add(ZXing.EncodeHintType.CHARACTER_SET, "UTF-8") 

     Dim bmp As System.Drawing.Bitmap = writer.Write(s) 

     bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Png) 
     Dim imagedata As Byte() 
     imagedata = ms.GetBuffer() 
     Return imagedata 
    End Function 


    Private Sub MainWindow_OnLoaded(sender As Object, e As RoutedEventArgs) 
     Try 
      Dim barCodeHorizontal = GetBarCodeHorizontal("3999999 80 1XXXXXX8 r1XX3", 200) 
     Catch ex As Exception 
      Console.WriteLine(ex) 
     End Try 
    End Sub 
End Class 

問題:

  • 我怎樣才能解決這個問題?
  • 這是zxing庫的限制嗎?
  • 是否有任何合適的解決方法(或甚至另一個庫)?
+0

你爲什麼試圖在條碼中使用標籤?也許有一點背景,我們可以提出一個替代方案。 – Nefariis

+0

條形碼ist用於將信息插入基於控制檯的傳統系統。該選項卡用於切換到下一個字段。條形碼應該如下所示:[MaterialNumber] [Tab] [Quantity] [Tab] [Batch] [Tab] [Location]。你知道另一個與SSRS合作的圖書館嗎? – Joel

+1

您是否可以使用另一個字符切換到下一個字段,如管道「|」? zxing是標準 - 這裏有一些其他的選項,雖然 - http://stackoverflow.com/questions/8116990/looking-for-best-barcode-scanner-library-besides-zxing ...我會看看如果我可以改變第一個問題....你將遇到的問題是「表格式」不是任何編碼表(utf-8,iso等)的一部分,所以我沒有看到「表格式」的方式可以永遠工作的圖書館...也許如果你能找到一個有它的表,那麼找到支持該表的圖書館 - 但除此之外...... – Nefariis

回答

0

我結束了another (free) library事實證明,工作得很好。

還有一個tutorial如何將條形碼嵌入到SSRS中用於此特定庫。

對於那些在這裏感興趣的是我的代碼創建條形碼:

Public Function GetBarcode(ByVal text As String, ByVal barcodeWidth As Integer, ByVal barcodeHeight As Integer) As Byte() 
     Dim b As System.Drawing.Bitmap 
     Dim bar As New BarcodeLib.Barcode 
     bar.Alignment = BarcodeLib.AlignmentPositions.CENTER 

     bar.IncludeLabel = False 
     b = bar.Encode(BarcodeLib.TYPE.CODE128, text, barcodeWidth, barcodeHeight) 
     Dim bitmapData As Byte() = Nothing 
     Using ms As New System.IO.MemoryStream() 
      b.Save(ms, System.Drawing.Imaging.ImageFormat.Png) 
      bitmapData = ms.ToArray() 
     End Using 
     Return bitmapData 
    End Function 

條形碼數據直接從查詢中涉及如下所示:

SELECT  MilkrunID, Code, Quantity, Batch, PickLocation, Code + CHAR(9) + CAST(Quantity AS NVARCHAR(20)) + CHAR(9) + Batch + CHAR(9) + PickLocation AS Barcode 
FROM   Tbl_ReportData_ProductionReplenishment_MilkrunSummary 

CHAR(9)創建一個標籤。