Создать штрих-код с ZXing.net - PullRequest
0 голосов
/ 07 января 2019

Я пытаюсь сгенерировать штрих-код, используя ZXing.NET для приложения dot net core asp.net. Я не могу понять, как отобразить текст со штрих-кодом, и документации, кажется, действительно, действительно не хватает. У кого-нибудь есть идеи, как заставить это работать?

Это код, который у меня есть (в основном взят из другого поста на SO):

BarcodeWriterPixelData writer = new BarcodeWriterPixelData()
{
    Format = BarcodeFormat.CODE_128,
    Options = new EncodingOptions
    {
        Height = 400,
        Width = 800,
        PureBarcode = false, // this should indicate that the text should be displayed, in theory. Makes no difference, though.
        Margin = 10
    }
};

var pixelData = writer.Write("test text");

using (var bitmap = new Bitmap(pixelData.Width, pixelData.Height, System.Drawing.Imaging.PixelFormat.Format32bppRgb))
{
    using (var ms = new System.IO.MemoryStream())
    {
        var bitmapData = bitmap.LockBits(new Rectangle(0, 0, pixelData.Width, pixelData.Height), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppRgb);
        try
        {
            System.Runtime.InteropServices.Marshal.Copy(pixelData.Pixels, 0, bitmapData.Scan0, pixelData.Pixels.Length);
        }
        finally
        {
            bitmap.UnlockBits(bitmapData);
        }

        bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
        return File(ms.ToArray(), "image/jpeg");
    }
}

Это дает мне штрих-код, но без содержания.

Или, предложения по лучшим / более легким в использовании / лучше документированным библиотекам тоже будут оценены.

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Не каждая доступная реализация рендерера поддерживает вывод содержимого под штрих-кодом (например, рендерер PixelData не поддерживает его). Вы должны использовать одну из конкретных реализаций для разных библиотек изображений. Например, следующие привязки предоставляют средство визуализации (и определенный BarcodeWriter) с поддержкой вывода контента: https://www.nuget.org/packages/ZXing.Net.Bindings.CoreCompat.System.Drawing https://www.nuget.org/packages/ZXing.Net.Bindings.Windows.Compatibility https://www.nuget.org/packages/ZXing.Net.Bindings.ZKWeb.System.Drawing https://www.nuget.org/packages/ZXing.Net.Bindings.SkiaSharp

0 голосов
/ 07 января 2019

Вам не нужно копировать данные пикселей в другой поток вручную. Всегда предпочитайте использовать методы, предоставляемые интерфейсом, а именно метод Save().

public void YourActionMethod()
{
    BarcodeWriter writer = new BarcodeWriter(){
        Format = BarcodeFormat.CODE_128,
        Options = new EncodingOptions {
            Height = 400,
            Width = 800,
            PureBarcode = false,
            Margin = 10,
        },
    };

    var bitmap = writer.Write("test text");
    bitmap.Save(HttpContext.Response.Body,System.Drawing.Imaging.ImageFormat.Png);
    return; // there's no need to return a `FileContentResult` by `File(...);`
}

Демо:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...