From 33e84a30eda0918b54b0be01fccce7bace584fd5 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Fri, 14 Mar 2025 10:03:39 +0100 Subject: [PATCH] update componenti, spostamento codice XZing --- .../EgwCoreLib.BlazorTest.csproj | 5 +- EgwCoreLib.BlazorTest/Pages/TestHwInfo.razor | 246 ++++++++++-------- EgwCoreLib.Razor/BCodeUtils.cs | 126 +++++++++ EgwCoreLib.Razor/EgwCoreLib.Razor.csproj | 6 +- EgwCoreLib.Razor/QrCodeDisplay.razor | 2 +- EgwCoreLib.Razor/ZXingOptions.cs | 189 ++++++++++++++ EgwCoreLib.Utils/EgwCoreLib.Utils.csproj | 11 +- 7 files changed, 464 insertions(+), 121 deletions(-) create mode 100644 EgwCoreLib.Razor/BCodeUtils.cs create mode 100644 EgwCoreLib.Razor/ZXingOptions.cs diff --git a/EgwCoreLib.BlazorTest/EgwCoreLib.BlazorTest.csproj b/EgwCoreLib.BlazorTest/EgwCoreLib.BlazorTest.csproj index 8ce552e..73eda87 100644 --- a/EgwCoreLib.BlazorTest/EgwCoreLib.BlazorTest.csproj +++ b/EgwCoreLib.BlazorTest/EgwCoreLib.BlazorTest.csproj @@ -1,4 +1,4 @@ - + net6.0 @@ -23,7 +23,8 @@ - + + diff --git a/EgwCoreLib.BlazorTest/Pages/TestHwInfo.razor b/EgwCoreLib.BlazorTest/Pages/TestHwInfo.razor index ce3fe40..0483709 100644 --- a/EgwCoreLib.BlazorTest/Pages/TestHwInfo.razor +++ b/EgwCoreLib.BlazorTest/Pages/TestHwInfo.razor @@ -2,72 +2,108 @@ @using DeviceId @using EgwCoreLib.Utils - -
-
-
    -
  • - Device ID -
  • - @if (ListDevId != null && ListDevId.Count > 0) - { - @foreach (var item in ListDevId) - { -
  • -
    @item.Key
    -
    @item.Value
    -
  • - } - } -
-
-
-
    -
  • - Sublicense -
  • -
  • -
    CodImpiego
    -
    @codImpiego
    -
  • -
  • -
    Payload
    -
    @decVal
    -
  • -
  • -
    AppKey
    -
    @appKey
    -
  • -
  • - -
  • -
-
-
-
    -
  • - Machine Info -
  • - @if (ListAllMacInfo != null && ListAllMacInfo.Count > 0) - { - @foreach (var item in ListAllMacInfo) - { -
  • -
    @item.Key
    -
    @item.Value
    -
  • - } - } -
-
-
- @if (ListUserInfo != null && ListUserInfo.Count > 0) - { +@if (isLoading) +{ + +} +else +{ +
+
  • - UserInfo + Device ID
  • - @foreach (var item in ListUserInfo) + @if (ListDevId != null && ListDevId.Count > 0) + { + @foreach (var item in ListDevId) + { +
  • +
    @item.Key
    +
    @item.Value
    +
  • + } + } +
+
+
+
    +
  • + Sublicense +
  • +
  • +
    CodImpiego
    +
    @codImpiego
    +
  • +
  • +
    Payload
    +
    @decVal
    +
  • +
  • +
    AppKey
    +
    @appKey
    +
  • +
  • + +
  • +
+
+
+
    +
  • + Machine Info +
  • + @if (ListAllMacInfo != null && ListAllMacInfo.Count > 0) + { + @foreach (var item in ListAllMacInfo) + { +
  • +
    @item.Key
    +
    @item.Value
    +
  • + } + } +
+
+
+ @if (ListUserInfo != null && ListUserInfo.Count > 0) + { +
    +
  • + UserInfo +
  • + @foreach (var item in ListUserInfo) + { +
  • +
    @item.Key
    +
    @item.Value
    +
  • + } +
+ } + @if (ListNetInfo != null && ListNetInfo.Count > 0) + { +
+
    +
  • + NetInfo +
  • + @foreach (var item in ListNetInfo) + { +
  • +
    @item.Key
    +
    @item.Value
    +
  • + } +
+ } +
+
+
    +
  • + CpuInfo +
  • + @foreach (var item in ListOsInfo) {
  • @item.Key
    @@ -75,15 +111,12 @@
  • }
- } - @if (ListNetInfo != null && ListNetInfo.Count > 0) - {
  • - NetInfo + OsInfo
  • - @foreach (var item in ListNetInfo) + @foreach (var item in ListOsInfo) {
  • @item.Key
    @@ -91,50 +124,23 @@
  • }
- } +
+
    +
  • + VolInfo +
  • + @foreach (var item in ListVolInfo) + { +
  • +
    @item.Key
    +
    @item.Value
    +
  • + } +
+
-
-
    -
  • - CpuInfo -
  • - @foreach (var item in ListOsInfo) - { -
  • -
    @item.Key
    -
    @item.Value
    -
  • - } -
-
-
    -
  • - OsInfo -
  • - @foreach (var item in ListOsInfo) - { -
  • -
    @item.Key
    -
    @item.Value
    -
  • - } -
-
-
    -
  • - VolInfo -
  • - @foreach (var item in ListVolInfo) - { -
  • -
    @item.Key
    -
    @item.Value
    -
  • - } -
-
-
+} @code { protected Dictionary ListAllMacInfo { get; set; } = new Dictionary(); @@ -153,7 +159,22 @@ protected string appKey = ""; protected string decVal = ""; - protected override void OnInitialized() + private bool isLoading { get; set; } = true; + + protected override async Task OnInitializedAsync() + { + isLoading = true; + await InvokeAsync(StateHasChanged); + await Task.Run(() => + { + GetInfo(); + }); + Regenerate(); + isLoading = false; + await InvokeAsync(StateHasChanged); + } + + protected void GetInfo() { string deviceId = ""; deviceId = new DeviceIdBuilder() @@ -201,14 +222,15 @@ } } - Regenerate(); } protected void Regenerate() { + isLoading = true; codImpiego = SubLicManager.CodImpiego(); appKey = SubLicManager.GenKey(passphrase, false); decVal = SteamCrypto.DecryptString(appKey, passphrase); + isLoading = false; } private string passphrase = "SaltPass"; diff --git a/EgwCoreLib.Razor/BCodeUtils.cs b/EgwCoreLib.Razor/BCodeUtils.cs new file mode 100644 index 0000000..a9e02f9 --- /dev/null +++ b/EgwCoreLib.Razor/BCodeUtils.cs @@ -0,0 +1,126 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Web; +using System.IO; +using ZXing; +using ZXing.Common; +using ZXing.QrCode; +using System.Drawing.Imaging; +using System.Drawing; +using ZXing.Rendering; +using System.Data; + +namespace EgwCoreLib.Razor +{ + /// + /// Classe gestione rendering QRCode, da XZing + /// + /// https://github.com/micjahn/ZXing.Net/ + /// https://stackoverflow.com/questions/72114518/show-an-image-stream-to-client-in-blazor-server-without-javascript + /// + /// valutare output SVG + /// https://www.nayuki.io/page/qr-code-generator-library#third-party-ports + /// https://github.com/manuelbl/QrCodeGenerator + /// https://github.com/manuelbl/QrCodeGenerator/blob/master/Demo-ASP.NET-Core/QrCodeController.cs + /// + public class BCodeUtils + { + /// + /// Genera immagina barcode richiesta secondo dimensioni e formato + /// + /// + /// altezza + /// formati 1D di ZXing + /// indica se SOLO barcode + /// indica se forzare i caratteri a maiuscolo + /// + public static Stream getImage(string dataStr, int hSize, BarcodeFormat formato, bool pureBarcode, bool forceUpper) + { + // se vuoto steamware... + if (dataStr == null || dataStr == "") + { + dataStr = "www.steamware.net"; + } + if(forceUpper) + { + dataStr = dataStr.ToUpper(); + } + // url decode... + dataStr = HttpUtility.UrlDecode(dataStr); + // creo! + EncodingOptions options = new EncodingOptions + { + Height = hSize, + Margin = 0, + PureBarcode = pureBarcode + }; + var writer = new ZXing.Windows.Compatibility.BarcodeWriter() + { + Format = formato, + Options = options + }; + //writer.Format = formato; + //writer.Options = options; + // scrivo bitmap + Bitmap pixelData = writer.Write(dataStr); + + // Return Image + MemoryStream ms = new MemoryStream(); + pixelData.Save(ms, ImageFormat.Png); + ms.Position = 0; + return ms; + //return new FileStreamResult(ms, "image/png"); + } + /// + /// Genera immagina barcode richiesta secondo dimensioni e formato + /// + /// + /// altezza + /// + /// formati 1D di ZXing + /// indica se forzare i caratteri a maiuscolo + /// + public static Stream getImage2D(string dataStr, int hSize, int wSize, BarcodeFormat formato, bool forceUpper) + { + // se vuoto steamware... + if (dataStr == null || dataStr == "") + { + dataStr = "www.egalware.com"; + } + if (forceUpper) + { + dataStr = dataStr.ToUpper(); + } + // url decode... + dataStr = HttpUtility.UrlDecode(dataStr); + // creo! + QrCodeEncodingOptions options = new QrCodeEncodingOptions + { + DisableECI = true, + CharacterSet = "UTF-8", + Width = wSize, + Height = hSize, + Margin = 0 + }; + var writer = new ZXing.Windows.Compatibility.BarcodeWriter() + { + Format = formato, + Options = options + }; + // svrivo svg... + var svgImage = writer.Write(dataStr); + // scrivo bitmap + Bitmap pixelData = writer.Write(dataStr); + + // Return Image + MemoryStream ms = new MemoryStream(); + pixelData.Save(ms, ImageFormat.Png); + ms.Position = 0; + return ms; + //return new FileStreamResult(ms, "image/png"); + } + } +} diff --git a/EgwCoreLib.Razor/EgwCoreLib.Razor.csproj b/EgwCoreLib.Razor/EgwCoreLib.Razor.csproj index 93cd269..77bf6d2 100644 --- a/EgwCoreLib.Razor/EgwCoreLib.Razor.csproj +++ b/EgwCoreLib.Razor/EgwCoreLib.Razor.csproj @@ -71,10 +71,12 @@ - - + + + + diff --git a/EgwCoreLib.Razor/QrCodeDisplay.razor b/EgwCoreLib.Razor/QrCodeDisplay.razor index c97b9b2..f0a8804 100644 --- a/EgwCoreLib.Razor/QrCodeDisplay.razor +++ b/EgwCoreLib.Razor/QrCodeDisplay.razor @@ -25,7 +25,7 @@ protected override void OnParametersSet() { - var imgStream = Utils.BCodeUtils.getImage2D(rawCode, Height, Width, ImgFormat, false); + var imgStream = BCodeUtils.getImage2D(rawCode, Height, Width, ImgFormat, false); // compilo oggetto image MemoryStream ms = new MemoryStream(); imgStream.CopyTo(ms); diff --git a/EgwCoreLib.Razor/ZXingOptions.cs b/EgwCoreLib.Razor/ZXingOptions.cs new file mode 100644 index 0000000..b04bd2e --- /dev/null +++ b/EgwCoreLib.Razor/ZXingOptions.cs @@ -0,0 +1,189 @@ +// ********************************** +// Densen Informatica 中讯科技 +// 作者:Alex Chow +// e-mail:zhouchuanglin@gmail.com +// ********************************** + +using System.Text.Json.Serialization; + +namespace ZXingBlazor.Components; + +/// +/// ZXing 选项类 +/// +/// https://zxing.github.io/zxing/apidocs/com/google/zxing/DecodeHintType.htm +public class ZXingOptions +{ + /// + /// 只解码 Pdf417 格式 / decode only Pdf417 format + /// + public bool Pdf417 { get; set; } + + /// + /// 单次|连续解码,默认单次 / Decode Once or Decode Continuously, default is Once + /// + public bool Decodeonce { get; set; } = true; + + /// + /// Time Between Decoding Attempts + /// + public int TimeBetweenDecodingAttempts { get; set; } = 10; + + /// + /// 解码所有编码形式,性能较差, 开启后可用 options.formats 指定编码形式.默认为 false | Decodde All Formats, performance is poor, you can set options.formats to customize specify the encoding formats. The default is false + /// + public bool DecodeAllFormats { get; set; } + + /// + /// 已知图像是几种可能的格式之一。 + /// + public List formats { get; set; } = new List() { + BarcodeFormat.AZTEC , + BarcodeFormat.CODABAR, + BarcodeFormat.CODE_39, + BarcodeFormat.CODE_93, + BarcodeFormat.CODE_128, + BarcodeFormat.DATA_MATRIX, + BarcodeFormat.EAN_8, + BarcodeFormat.EAN_13, + BarcodeFormat.ITF, + BarcodeFormat.MAXICODE, + BarcodeFormat.PDF_417, + BarcodeFormat.QR_CODE, + BarcodeFormat.RSS_14, + BarcodeFormat.RSS_EXPANDED, + BarcodeFormat.UPC_A, + BarcodeFormat.UPC_E, + BarcodeFormat.UPC_EAN_EXTENSION, + }; + + public bool Debug { get; set; } + + ///// + ///// 如果为 true,尝试解码为倒置图像。所有配置的解码器都被简单地用倒置图像第二次调用 + ///// + //[JsonPropertyName("ALSO_INVERTED")] + //public bool ALSO_INVERTED { get; set; } + + /// + /// EAN 或 UPC 条形码允许的扩展长度, 默认为 2. + /// + [JsonPropertyName("ALLOWED_EAN_EXTENSIONS")] + public int[]? ALLOWED_EAN_EXTENSIONS { get; set; } //= new int[] { 2 }; + + /// + /// 允许的编码数据长度——拒绝任何其他长度 + /// + [JsonPropertyName("ALLOWED_LENGTHS")] + public int[]? ALLOWED_LENGTHS { get; set; } + + /// + /// 假设 Code 39 代码使用校验位。 + /// + [JsonPropertyName("ASSUME_CODE_39_CHECK_DIGIT")] + public bool? ASSUME_CODE_39_CHECK_DIGIT { get; set; } + + /// + /// 假设条形码正在作为 GS1 条形码进行处理,并根据需要修改行为 + /// + [JsonPropertyName("ASSUME_GS1")] + public bool? ASSUME_GS1 { get; set; } + + /// + /// 指定解码时使用的字符编码(如果适用) + /// + [JsonPropertyName("CHARACTER_SET")] + public string? CHARACTER_SET { get; set; } + + ///// + ///// ResultPoint 当发现可能的情况时,需要通过回调通知调用者, 映射到一个ResultPointCallback + ///// + //public object NEED_RESULT_POINT_CALLBACK { get; set; } + + /// + /// 未指定的、特定于应用程序的提示。 + /// + [JsonPropertyName("OTHER")] + public object? OTHER { get; set; } + + /// + /// 图像是条形码的纯单色图像。 + /// + [JsonPropertyName("PURE_BARCODE")] + public bool? PURE_BARCODE { get; set; } + + /// + /// 如果为 true,则返回 Codabar 条形码中的开始和结束数字,而不是剥离它们 + /// 如果为 true,则返回 Codabar 条形码中的开始和结束数字,而不是剥离它们。它们是字母,而其余的是数字。默认情况下,它们会被剥离,但这会导致它们不会被剥离 + /// + [JsonPropertyName("RETURN_CODABAR_START_END")] + public bool? RETURN_CODABAR_START_END { get; set; } + + /// + /// 花更多的时间尝试寻找条形码;优化准确性,而不是速度 + /// + [JsonPropertyName("TRY_HARDER")] + public bool? TRY_HARDER { get; set; } +} + + +/** + * Enumerates barcode formats known to this package. Please keep alphabetized. + * + * @author Sean Owen + */ +public enum BarcodeFormat +{ + + /** Aztec 2D barcode format. */ + AZTEC, + + /** CODABAR 1D format. */ + CODABAR, + + /** Code 39 1D format. */ + CODE_39, + + /** Code 93 1D format. */ + CODE_93, + + /** Code 128 1D format. */ + CODE_128, + + /** Data Matrix 2D barcode format. */ + DATA_MATRIX, + + /** EAN-8 1D format. */ + EAN_8, + + /** EAN-13 1D format. */ + EAN_13, + + /** ITF (Interleaved Two of Five) 1D format. */ + ITF, + + /** MaxiCode 2D barcode format. */ + MAXICODE, + + /** PDF417 format. */ + PDF_417, + + /** QR Code 2D barcode format. */ + QR_CODE, + + /** RSS 14 */ + RSS_14, + + /** RSS EXPANDED */ + RSS_EXPANDED, + + /** UPC-A 1D format. */ + UPC_A, + + /** UPC-E 1D format. */ + UPC_E, + + /** UPC/EAN extension format. Not a stand-alone format. */ + UPC_EAN_EXTENSION + +} diff --git a/EgwCoreLib.Utils/EgwCoreLib.Utils.csproj b/EgwCoreLib.Utils/EgwCoreLib.Utils.csproj index 74f5a8e..21f1c34 100644 --- a/EgwCoreLib.Utils/EgwCoreLib.Utils.csproj +++ b/EgwCoreLib.Utils/EgwCoreLib.Utils.csproj @@ -1,4 +1,4 @@ - + net6.0 @@ -15,16 +15,19 @@ EgwCoreLib Core + + + + + - + - -