2017-01-02 4 views
0

Ist es möglich, einen PDF417 Barcode von einem HEX zu erstellen? Ich habe etwas mit ZXing versucht, aber in meinem Fall funktioniert es nicht mit einer codierten Zeichenkette.ZXing.Net PDF417 Barcode von HEX

HEX: fe-30-09-33-31-37-30-31-30-32-30-31-f9-20-01-34-fe-30-01-20-fc-20-06 

Andere Generatoren können dies tun (https://stackoverflow.com/a/39471232/3236231), aber jetzt diese Lösung kostet ein paar tausend Dollar. ZXing passt zu all meinen Bedürfnissen, aber ich finde keine geeignete Art, meine Daten zu verwenden.

Antwort

2

sollte das folgende Codefragment wie erwartet:

[Test] 
    public void Hex2Pdf417() 
    { 
    var hexStr = "fe3009333137303130323031f9200134fe300120fc2006"; 
    var byteArray = Enumerable.Range(0, hexStr.Length/2).Select(x => Convert.ToByte(hexStr.Substring(x * 2, 2), 16)).ToArray(); 
    var byteArrayAsString = new String(byteArray.Select(b => (char)b).ToArray()); 

    // encode the string as PDF417 
    var writer = new BarcodeWriter 
    { 
     Format = BarcodeFormat.PDF_417, 
     Options = new PDF417EncodingOptions 
     { 
      Height = 200, 
      Width = 200, 
      Margin = 10 
     } 
    }; 
    var bitmap = writer.Write(byteArrayAsString); 

    // try to decode the PDF417 
    var reader = new BarcodeReader 
    { 
     Options = new DecodingOptions 
     { 
      PossibleFormats = new List<BarcodeFormat> 
      { 
       BarcodeFormat.PDF_417 
      }, 
      PureBarcode = true 
     } 
    }; 
    var result = reader.Decode(bitmap); 

    // make sure, the result is the same as the original hex 
    var resultBackToBytes = result.Text.Select(c => (byte)c).ToArray(); 
    var resultAsHexString = String.Join("", resultBackToBytes.Select(b => b.ToString("x2"))); 

    Assert.That(resultAsHexString, Is.EqualTo(hexStr)); 
    } 
+0

Einige HEX wie „81“ von CP850 führt den Fehler: uncodierbarer Zeichen erkannt: (Unicode: 132) Auch wenn ich dekodieren die Barcode hier online-barcode-reader.inliteresearch.com, es zeigt, dass die gespeicherten HEX-Daten nicht die ursprüngliche HEX ist. "FE" wird als "5F" gespeichert. – user3236231

+1

Aufgrund einiger kleiner Fehler funktioniert der Code nicht in allen Situationen mit der aktuellen Version 0.14 von ZXing.Net. – Michael

+0

Vielen Dank! Es funktioniert perfekt mit der aktuellen Version aus dem Quellcode! Selbst zusammengestellt von https://github.com/micjahn/ZXing.Net/! – user3236231