加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

ASP.NET MVC中的QR代码生成

发布时间:2020-12-15 19:11:49 所属栏目:asp.Net 来源:网络整理
导读:有一个.NET API生成 QR Codes,如这一个? 我想在我希望我的用户打印出来的页面上显示这些。 解决方法 我写了一个基本的HTML帮助方法来发出正确的 img标记以利用Google的API。所以,在你的页面(假设ASPX视图引擎)使用这样的东西: %: Html.QRCodeImage(Reque
有一个.NET API生成 QR Codes,如这一个?

我想在我希望我的用户打印出来的页面上显示这些。

解决方法

我写了一个基本的HTML帮助方法来发出正确的< img>标记以利用Google的API。所以,在你的页面(假设ASPX视图引擎)使用这样的东西:
<%: Html.QRCodeImage(Request.Url.AbsolutePath) %>
<%: Html.QRCodeImage("Meagre human needs a phone to read QR codes. Ha ha ha.") %>

或者如果要指定像素大小(图像始终为正方形):

<%: Html.QRCodeImage(Request.Url.AbsolutePath,size: 92) %>

这里是代码:

public static class QRCodeHtmlHelper
{
    /// <summary>
    /// Produces the markup for an image element that displays a QR Code image,as provided by Google's chart API.
    /// </summary>
    /// <param name="htmlHelper"></param>
    /// <param name="data">The data to be encoded,as a string.</param>
    /// <param name="size">The square length of the resulting image,in pixels.</param>
    /// <param name="margin">The width of the border that surrounds the image,measured in rows (not pixels).</param>
    /// <param name="errorCorrectionLevel">The amount of error correction to build into the image.  Higher error correction comes at the expense of reduced space for data.</param>
    /// <param name="htmlAttributes">Optional HTML attributes to include on the image element.</param>
    /// <returns></returns>
    public static MvcHtmlString QRCode(this HtmlHelper htmlHelper,string data,int size = 80,int margin = 4,QRCodeErrorCorrectionLevel errorCorrectionLevel = QRCodeErrorCorrectionLevel.Low,object htmlAttributes = null)
    {
        if (data == null)
            throw new ArgumentNullException("data");
        if (size < 1)
            throw new ArgumentOutOfRangeException("size",size,"Must be greater than zero.");
        if (margin < 0)
            throw new ArgumentOutOfRangeException("margin",margin,"Must be greater than or equal to zero.");
        if (!Enum.IsDefined(typeof(QRCodeErrorCorrectionLevel),errorCorrectionLevel))
            throw new InvalidEnumArgumentException("errorCorrectionLevel",(int)errorCorrectionLevel,typeof (QRCodeErrorCorrectionLevel));

        var url = string.Format("http://chart.apis.google.com/chart?cht=qr&chld={2}|{3}&chs={0}x{0}&chl={1}",HttpUtility.UrlEncode(data),errorCorrectionLevel.ToString()[0],margin);

        var tag = new TagBuilder("img");
        if (htmlAttributes != null)
            tag.MergeAttributes(new RouteValueDictionary(htmlAttributes));
        tag.Attributes.Add("src",url);
        tag.Attributes.Add("width",size.ToString());
        tag.Attributes.Add("height",size.ToString());

        return new MvcHtmlString(tag.ToString(TagRenderMode.SelfClosing));
    }
}

public enum QRCodeErrorCorrectionLevel
{
    /// <summary>Recovers from up to 7% erroneous data.</summary>
    Low,/// <summary>Recovers from up to 15% erroneous data.</summary>
    Medium,/// <summary>Recovers from up to 25% erroneous data.</summary>
    QuiteGood,/// <summary>Recovers from up to 30% erroneous data.</summary>
    High
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读