2017-01-02 6 views
0

16 진수에서 PDF417 바코드를 만들 수 있습니까? 나는 ZXing으로 무언가를 시도했지만, 내 경우에는 인코딩 된 문자열로 작동하지 않을 것이다.ZXing.Net PDF417 Barcode from 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 

기타 발전기 (https://stackoverflow.com/a/39471232/3236231)을 수행 할 수 있습니다,하지만 지금이 솔루션은 몇 천 달러의 비용이 든다. ZXing은 내 모든 필요를 충족 시키지만 내 데이터를 사용하는 방법은 찾을 수 없습니다.

답변

2

다음 코드는 예상대로 작동한다 : 가 비 encodable 문자 검출 : (유니 코드 : 132) 은 또한 난을 디코딩

[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

CP850에서 '81'과 같은 일부 HEX 오류를 발생 barcode here online-barcode-reader.inliteresearch.com, 저장된 HEX 데이터가 원래 HEX가 아님을 보여줍니다. "FE"는 "5F"로 저장됩니다. – user3236231

+1

몇 가지 작은 오류 때문에 ZXing.Net의 현재 버전 0.14의 모든 상황에서 코드가 올바르게 작동하지 않습니다. – Michael

+0

고마워요! 소스 코드의 현재 버전과 완벽하게 작동합니다! 자체 https://github.com/micjahn/ZXing.Net/에서 컴파일! – user3236231