我在ASP.Net core 2.0类库中使用 TagHelper 概念。
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;
要在cshtml
中设置barCode(使用剃须刀引擎,即 RazorEngine.Core.NetCore ),我在下面添加了一行代码:
但是,当我执行该应用程序时,它并没有考虑使用标签助手并将其保留为空白。
我在这方面做错了吗?
这是我在此处用于生成条形码的正确方法吗?在ASP.Net core 2.0中还有其他方法吗?
我已经尝试实施this answer中提供的解决方案,但是它对我不起作用。