Я использую здесь 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?
Я пытался реализовать решение, предоставленное в этот ответ , но этоне работает для меня.