从c#中的字节数组生成PDF417条形码

时间:2016-09-12 13:33:05

标签: c# sdk barcode

我需要一种从字节数组生成PDF417条形码的方法。

我发现了许多可以生成条形码的SDK但是所有这些都需要一个字符串作为数据而不是一个字节数组,遗憾的是这不可能,因为我需要符合预先存在的标准

提前致谢

我按照Wyatt Earp的要求尝试过的代码。

    /// <summary>
    /// Writes the barcode data to a specified location
    /// </summary>
    /// <param name="data">Data of the barcode</param>
    /// <param name="Location">Location to save barcode</param>
    public void Write(byte[] data, string Location)
    {
        ///* Keep Automation Barcode Creator
        KeepAutomation.Barcode.Crystal.BarCode KABarcode = new KeepAutomation.Barcode.Crystal.BarCode();
        KABarcode.Symbology = KeepAutomation.Barcode.Symbology.PDF417;
        KABarcode.PDF417DataMode = KeepAutomation.Barcode.PDF417DataMode.Auto;
        KABarcode.CodeToEncode = data;
        KABarcode.ImageFormat = System.Drawing.Imaging.ImageFormat.Png;
        KABarcode.generateBarcodeToImageFile(Location);
        //*/

        ///* BarcodeLib Creator
        BarcodeLib.Barcode.PDF417 barcodeLibBar = new BarcodeLib.Barcode.PDF417();
        barcodeLibBar.Data = data;
        var BarLibImage = barcodeLibBar.drawBarcode();
        BarLibImage.Save(Location);
        //*/

        ///* PQScan.Barcode Creator
        PQScan.BarcodeCreator.Barcode PQScanBarcode = new PQScan.BarcodeCreator.Barcode();
        PQScanBarcode.BarType = PQScan.BarcodeCreator.BarCodeType.PDF417;
        PQScanBarcode.Data = data;
        PQScanBarcode.PictureFormat = System.Drawing.Imaging.ImageFormat.Png;
        var PQScanImage = PQScanBarcode.CreateBarcode();
        PQScanImage.Save(Location);
        //*/
    }          

这些都不会构建,因为他们都希望字符串作为条形码数据,我需要给它们一个字节[]

不幸的是,我已经从其他SDK中删除了代码,但所有这些代码都遵循相同的模式。

我尝试过的SDK的完整列表是:

  • SharpPdf417
  • 斑马线
  • PQScan.BarcodeCreator
  • 的TBarCode
  • KeepAutomation.Barcode
  • BarcodeLib

所有这些SDK只接受一个字符串作为条形码数据,我需要读取的字节数组是输入此空格的字节数组,

我无法为您提供确切的字节数组,但它的大小为454,并在整个字节数组中使用了几种不同的编码方法。

2 个答案:

答案 0 :(得分:1)

好吧,您可以将字节数组转换为ASCII字符串,并使用它来创建条形码。此条形码的使用者需要知道该字符串被编码为ASCII才能转换回来。例如:

/// <summary>
/// Writes the barcode data to a specified location
/// </summary>
/// <param name="data">Data of the barcode</param>
/// <param name="Location">Location to save barcode</param>
public void Write(byte[] data, string Location)
{
    ///* Keep Automation Barcode Creator
    KeepAutomation.Barcode.Crystal.BarCode KABarcode = new KeepAutomation.Barcode.Crystal.BarCode();
    KABarcode.Symbology = KeepAutomation.Barcode.Symbology.PDF417;
    KABarcode.PDF417DataMode = KeepAutomation.Barcode.PDF417DataMode.Auto;
    KABarcode.CodeToEncode = System.Text.Encoding.ASCII.GetString(data);
    KABarcode.ImageFormat = System.Drawing.Imaging.ImageFormat.Png;
    KABarcode.generateBarcodeToImageFile(Location);
    //*/

    ///* BarcodeLib Creator
    BarcodeLib.Barcode.PDF417 barcodeLibBar = new BarcodeLib.Barcode.PDF417();
    barcodeLibBar.Data = System.Text.Encoding.ASCII.GetString(data);
    var BarLibImage = barcodeLibBar.drawBarcode();
    BarLibImage.Save(Location);
    //*/

    ///* PQScan.Barcode Creator
    PQScan.BarcodeCreator.Barcode PQScanBarcode = new PQScan.BarcodeCreator.Barcode();
    PQScanBarcode.BarType = PQScan.BarcodeCreator.BarCodeType.PDF417;
    PQScanBarcode.Data = System.Text.Encoding.ASCII.GetString(data);
    PQScanBarcode.PictureFormat = System.Drawing.Imaging.ImageFormat.Png;
    var PQScanImage = PQScanBarcode.CreateBarcode();
    PQScanImage.Save(Location);
    //*/
}  

答案 1 :(得分:1)

谢谢,但是因为我需要保留它在Wyatt Earps中已有的格式。答案对我不起作用但看起来它确实适用于其他人。

对我来说,我设法发现Aspose.Barcode有一个功能可以让我直接从字节数组生成条形码而不必转换它。

以下是我使用的代码,任何人都感兴趣

    /// <summary>
    /// Writes the barcode data to a specified location
    /// </summary>
    /// <param name="data">Byte data of barcode</param>
    /// <param name="Location">Location to save barcode</param>
    public void Write(byte[] data, string location)
    {
        //Define the barcode builder with properties
        BarCodeBuilder builder = new BarCodeBuilder()
        {
            SymbologyType = Symbology.Pdf417,
            Rows = 30
        };

        //Set Data
        builder.SetBinaryCodeText(data);

        //Generate Barcode
        var barcodeBitmap = builder.GenerateBarCodeImage();

        //Save it to disk
        barcodeBitmap.Save(location);
    }