Невозможно добавить BarCode в 'cshtml' с помощью TagHelper в проекте класса ASP.NET core 2.0. - PullRequest
0 голосов
/ 25 сентября 2018

Я использую здесь TagHelper в библиотеке классов ASP.Net core 2.0.

using Microsoft.AspNetCore.Razor.TagHelpers;
using ZXing.QrCode;
using System.Drawing;
using System.IO;
using System;

namespace DRC.Taxpayer.TagHelpers
{
    [HtmlTargetElement("barcode")]
    public class BarCodeTagHelper : TagHelper
    {
        public override void Process(TagHelperContext context, TagHelperOutput output)
        {
            var content = context.AllAttributes["content"].Value.ToString();
            var width = int.Parse(context.AllAttributes["width"].Value.ToString());
            var height = int.Parse(context.AllAttributes["height"].Value.ToString());
            var barcodeWriterPixelData = new ZXing.BarcodeWriterPixelData
            {
                Format = ZXing.BarcodeFormat.CODE_128,
                Options = new QrCodeEncodingOptions
                {
                    Height = height,
                    Width = width,
                    Margin = 0
                }
            };

            var pixelData = barcodeWriterPixelData.Write(content);

            using (var bitmap = new Bitmap(pixelData.Width, pixelData.Height, System.Drawing.Imaging.PixelFormat.Format32bppRgb))
            {
                using (var memoryStream = new 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(memoryStream, System.Drawing.Imaging.ImageFormat.Png);
                    output.TagName = "img";
                    output.Attributes.Clear();
                    output.Attributes.Add("width", width);
                    output.Attributes.Add("height", height);
                    output.Attributes.Add("src", string.Format("data:image/png,base64,{0}", Convert.ToBase64String(memoryStream.ToArray())));
                }
            }
        }
    }
}

В CSHTML Я добавил ниже помощники тегов:

@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers;
@addTagHelper *, BarCodeTagHelper;

Чтобы установить barCode в cshtml (используя бритву, например, RazorEngine.Core.NetCore , я добавил ниже строки кода:

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

Я что-то не так делаю в этом?

Правильно ли этоПодход, который я использую здесь для создания штрих-кода? Есть ли другой способ сделать это в ASP.Net core 2.0?

Я пытался реализовать решение, предоставленное в этот ответ , но этоне работает для меня.

...