using System.Drawing.Imaging; using System.IO; using System.Web; using System.Web.Mvc; using ZXing; using ZXing.QrCode; using Newtonsoft.Json; using System.Collections.Generic; using ZXing.Common; using System.Reflection; using System.Linq; namespace QR_GEN.Controllers { public class HomeController : Controller { /// /// Struct x richiesta serializzata/deserializzata /// public struct qrRequest { public string valore; } /// /// Payload da deserializzare json /// public struct qrPayload { public string baseUrl { get; set; } public string[] parameters { get; set; } } public ActionResult Index() { Assembly callingAssembly = Assembly.GetCallingAssembly(); ViewBag.Version = callingAssembly.GetName().Version; string text = "Steamware"; object[] customAttributes = callingAssembly.GetCustomAttributes(typeof(AssemblyCompanyAttribute), inherit: true); if (customAttributes.Length != 0) { text = ((AssemblyCompanyAttribute)customAttributes[0]).Company; } ViewBag.CopyRight = text; return View(); } public RedirectResult steamware() { return Redirect("https://www.steamware.net"); } #if false /// /// Restituisce un QR code dato valore /// /// /// public ActionResult QR(string id) { int hSize = 600; int wSize = 600; BarcodeFormat formato = BarcodeFormat.QR_CODE; return getImage2D(ref id, hSize, wSize, formato); } /// /// Restituisce un DataMatrix code dato valore /// /// /// public ActionResult DataMatrix(string id) { int hSize = 300; int wSize = 600; BarcodeFormat formato = BarcodeFormat.DATA_MATRIX; return getImage2D(ref id, hSize, wSize, formato); } /// /// Restituisce un Aztec code dato valore /// /// /// public ActionResult Aztec(string id) { int hSize = 600; int wSize = 600; BarcodeFormat formato = BarcodeFormat.AZTEC; return getImage2D(ref id, hSize, wSize, formato); } /// /// Restituisce un Aztec code dato valore /// /// /// public ActionResult Pdf417(string id) { int hSize = 300; int wSize = 600; BarcodeFormat formato = BarcodeFormat.PDF_417; return getImage2D(ref id, hSize, wSize, formato); } /// /// Restituisce un Code39 1D dato valore /// /// /// mostrare valore SOLO come codice (false --> testo sotto) /// public ActionResult code39(string id, bool pureBarcode = false) { int hSize = 70; BarcodeFormat formato = BarcodeFormat.CODE_39; return getImage(id, hSize, formato, pureBarcode); } /// /// Restituisce un Code128 1D dato valore /// /// /// mostrare valore SOLO come codice (false --> testo sotto) /// public ActionResult Code128(string id, bool pureBarcode = false) { int hSize = 70; BarcodeFormat formato = BarcodeFormat.CODE_128; return getImage(id, hSize, formato, pureBarcode); } #endif /// /// Restituisce un QR code dato valore /// /// id x impostare SITO x jumper /// valore delle opzioni da embeddare /// public ActionResult QR_site(string id, string val) { string cmdArg = ""; // se vuoto stea,ware... if (id == null || id == "") { cmdArg = "www.steamware.net"; } #if false // se arriva modo json --> deserializzo if (id.IndexOf("{") >= 0) { var richiesta = JsonConvert.DeserializeObject(id); id = richiesta.valore; } #endif #if false // url decode... id = HttpUtility.UrlDecode(id); #endif // valutare se usare file web.config, file .ini, file conf generico... string tgtUrl = ""; // se l' // in base a richiesta compongo stringa ... switch (id) { case "CTRACK_ELET_SCAL": tgtUrl = @"ctrack.steamware.net/elet-scal/jumper?USER_NAME=info@elettronicascalvina.it&UserAuthkey=asdfbqhewrqg7802345bhasdfg78&CodOpr="; break; case "CTRACK_ELET_SCAL_UFF": tgtUrl = @"http://192.168.1.117/CTRACK/jumper?USER_NAME=info@elettronicascalvina.it&UserAuthkey=asdfbqhewrqg7802345bhasdfg78&CodOpr="; break; case "CTRACK_SERIATE": tgtUrl = "https://iis01.egalware.com/CTRACK/jumper?USER_NAME=info@elettronicascalvina.it&UserAuthkey=asdfbqhewrqg7802345bhasdfg78&CodOpr="; break; case "CTRACK_COLCOM": tgtUrl = @"http://192.168.0.113/MP/CTRACK/jumper?USER_NAME=opr_mon&UserAuthkey=AK_sdurb4930r2d&CodOpr="; break; case "JSON": // devo DESERIALIZZARE... var obj = JsonConvert.DeserializeObject(val); // metto tutto in tgtUrl... tgtUrl = string.Format(obj.baseUrl, obj.parameters); // svuoto val... val = ""; break; case "JSON_ENC": // devo DESERIALIZZARE... var objRaw = JsonConvert.DeserializeObject(val); // eseguo urlencode dei parametri... var objEnc = objRaw.parameters.Select(x => HttpUtility.UrlEncode(x)).ToArray(); // metto tutto in tgtUrl... tgtUrl = string.Format(objRaw.baseUrl, objEnc); // svuoto val... val = ""; break; default: break; } cmdArg = string.Format("{0}{1}", tgtUrl, val); // creo! QrCodeEncodingOptions options = new QrCodeEncodingOptions { DisableECI = true, CharacterSet = "UTF-8", Width = 600, Height = 600, Margin = 0 }; var writer = new BarcodeWriter(); writer.Format = BarcodeFormat.QR_CODE; writer.Options = options; // scrivo bitmap var pixelData = writer.Write(cmdArg); // Return Image MemoryStream ms = new MemoryStream(); pixelData.Save(ms, ImageFormat.Png); ms.Position = 0; return new FileStreamResult(ms, "image/png"); } #if false /// /// Genera immagina barcode richeista secondo dimensioni e formato /// /// /// altezza /// formati 1D di ZXing /// indica se SOLO barcode /// private static ActionResult getImage(string dataStr, int hSize, BarcodeFormat formato, bool pureBarcode) { // se vuoto steamware... if (dataStr == null || dataStr == "") { dataStr = "www.steamware.net"; } dataStr = dataStr.ToUpper(); // url decode... dataStr = HttpUtility.UrlDecode(dataStr); // creo! EncodingOptions options = new EncodingOptions { Height = hSize, Margin = 0, PureBarcode = pureBarcode }; BarcodeWriter writer = new BarcodeWriter(); writer.Format = formato; writer.Options = options; // scrivo bitmap System.Drawing.Bitmap pixelData = writer.Write(dataStr); // Return Image MemoryStream ms = new MemoryStream(); pixelData.Save(ms, ImageFormat.Png); ms.Position = 0; return new FileStreamResult(ms, "image/png"); } /// /// Genera immagina barcode richeista secondo dimensioni e formato /// /// /// /// /// /// private static ActionResult getImage2D(ref string id, int hSize, int wSize, BarcodeFormat formato) { // se vuoto steamware... if (id == null || id == "") { id = "www.steamware.net"; } id = id.ToUpper(); // url decode... id = HttpUtility.UrlDecode(id); // creo! QrCodeEncodingOptions options = new QrCodeEncodingOptions { DisableECI = true, CharacterSet = "UTF-8", Width = 600, Height = 600, Margin = 0 }; BarcodeWriter writer = new BarcodeWriter(); writer.Format = formato; writer.Options = options; // scrivo bitmap System.Drawing.Bitmap pixelData = writer.Write(id); // Return Image MemoryStream ms = new MemoryStream(); pixelData.Save(ms, ImageFormat.Png); ms.Position = 0; return new FileStreamResult(ms, "image/png"); } #endif } }