2010-09-25 4 views
28

Есть ли .NET API, который генерирует QR Codes, например, этот?Генерация QR-кода в ASP.NET MVC

Meagre human needs a phone to read QR codes. Ha ha ha.

Я хотел бы показать их на страницах, которые я ожидаю, что мои пользователи распечатать.

+4

QR-код гласит: «Мизеру нужен телефон для чтения QR-кодов. Ха-ха-ха. «Прекрасно. :) –

+2

Я не знаю, почему это было настроено как вне темы. Я считаю, что это точно по теме ...:/ –

ответ

53

Я написал основной метод HTML помощник испускать правильный <img> тег, чтобы воспользоваться API Google. Так, на странице (при условии, 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}", size, 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 
} 
+1

+1 для забавной строки примера – usr

+1

+1 для точно того, что я искал. – Gallen

+1

Имейте в виду, что согласно этой странице developers.google.com/chart/infraphics Google Chart QR Code устарел – Alexandre

28

Один из вариантов заключается в использовании Google Chart Server API для этого, like this.

Например, вот QR-код для этой самой страницы ...

не требуется код :)

+1

Спасибо. Я нашел этот API вскоре после публикации и завернул его с помощью вспомогательного метода ASP.NET MVC, поскольку я собираюсь назвать его из нескольких мест. Код отправляется в ответ, если он помогает кому-то другому. –

+1

быстрое обновление URL: http://code.google.com/apis/chart/infographics/docs/qr_codes.html – benpage

+0

@benpage: Спасибо, сделано. –

7
+0

Спасибо. Первая ссылка выглядит интересной. Кстати, эта ссылка устарела (я отредактирую ваш ответ.) –