跳過到頁腳內容
使用 IRONQR
如何在 ASP .NET 中掃描 QR 碼

如何在 ASP .NET 中掃描 QR 碼

二維碼在我們的數位世界中已經無所不在,經常用於廣告、零售、活動管理等領域。 對於使用 ASP.NET 框架的開發人員來說,將二維碼掃描功能整合到 Web 應用程式中可以增強使用者體驗和功能。 本文探討了在 ASP.NET 應用程式中實作二維碼掃描器的過程,涵蓋了所需的工具、函式庫和逐步實作方法。 我們將使用IronQR (Iron Software出品的強大二維碼產生庫)來讀取二維碼。

如何在 ASP.NET 中掃描二維碼

  1. 使用 Visual Studio 建立一個 ASP.NET 專案。
  2. 從軟體套件管理器安裝IronQR庫。
  3. 上傳二維碼圖像並讀取二維碼。
  4. 讀取高級二維碼。

了解二維碼及其應用案例

二維碼(快速回應碼)是二維條碼,可以儲存從網址到聯絡資訊等各種訊息,通常使用智慧型手機或專用掃描設備進行掃描。 在網路應用中,二維碼可以用於多種用途,例如:

*快速存取網站*:無需輸入即可將使用者引導至特定 URL。 活動票務:驗證門票上的二維碼以確認是否可進入活動現場。 支付系統:透過掃描二維碼實現便利支付。 產品資訊**:提供更多有關產品的資訊。

隆重推出 IronQR

IronQR是一個功能強大的 .NET 函式庫,專為二維碼產生和掃描而設計,在提供強大功能的同時,也兼顧了易用性。 這個功能強大的函式庫不僅可以處理二維碼,還可以管理其他類型的條碼,因此成為 .NET 生態系統中開發人員的首選。 在這裡,我們將探討如何將 IronQR 函式庫整合到 ASP.NET 應用程式中,以方便二維碼掃描。

IronQR 的主要優勢和特點

1.讀取二維碼IronQR可以讀取各種影像格式的二維碼,包括 jpg、png、svg、bmp、gif、tif、tiff 等。 它還支援多頁圖像和自訂二維碼檢測模型。 輸出資料格式包括文字、URL、座標等。

2.編寫二維碼:您可以產生二維碼並將其儲存為圖像(jpg、png、gif、tiff、bmp)、串流,甚至可以將其添加到現有的 PDF 中。 對文字、網址、位元組和數字等資料進行編碼,並產生二維碼。 透過調整大小、調整邊距、重新著色和添加徽標來自訂二維碼樣式。

3.錯誤處理與修正IronQR提供詳細的錯誤訊息和自訂 QR 錯誤修正。 它能確保容錯性,並支援空值檢查和校驗和。

4.先進的機器學習模型IronQR使用先進的機器學習模型進行二維碼辨識。 此模型可確保在各種平台上(包括行動裝置、桌面裝置和雲端環境)準確可靠地讀取二維碼。

5.跨平台相容性IronQR專為 C#、F# 和 VB.NET 設計,可在各種 .NET 版本上運行,例如 .NET Core(8、7、6、5 和 3.1+)、.NET Standard(2.0+)、.NET Framework(4.6.2+)。

  1. 它支援不同的專案類型,包括 Web(Blazor 和 WebForms)、行動裝置(Xamarin 和 MAUI)、桌面(WPF 和 MAUI)和控制台應用程式。

7.廣泛的二維碼支援:IronQR 擅長處理各種二維碼和其他類型的條碼。 無論您處理的是標準二維碼、微型二維碼、二維碼條碼影像,甚至是 Aztec 或 Data Matrix 等特定格式, IronQR都能滿足您的需求。 IronQR 也支援讀取二維碼條碼的功能。

IronQR的 .NET API 產品,包括各種辦公室文件工具、PDF 編輯工具、OCR 工具等等。

步驟 1:使用 Visual Studio 建立一個新的 ASP.NET 項目

首先建立一個新項目,然後選擇 MVC 模板,如下所示:

如何在 ASP.NET 中掃描二維碼:圖 1 - 使用 Visual Studio 建立一個新的 ASP.NET 項目

接下來,您應該提供項目名稱和項目地點。

如何在 ASP.NET 中掃描二維碼:圖 2 - 提供項目名稱和要儲存的位置。

選擇.NET版本。

如何在 ASP.NET 中掃描二維碼:圖 3 - 選擇要使用的 .NET 版本。

點擊建立按鈕將建立以下程式碼和項目。

如何在 ASP.NET 中掃描二維碼:圖 4 - 點選 Visual Studio 的"建立"按鈕,即可獲得專案範本。

步驟 2:從 Visual Studio 套件管理器安裝 IronQR 庫

請依照下列步驟,從 Visual Studio 套件管理器安裝IronQR庫:

如何在 ASP.NET 中掃描二維碼:圖 5 - 使用 Visual Studio 套件管理器搜尋 IronQR 並安裝它

IronQR也可以使用NuGet套件管理器來安裝。

如何在 ASP.NET 中掃描二維碼:圖 6 - 透過 NuGet 套件管理器搜尋 IronQR

步驟 3:上傳二維碼圖像並讀取二維碼圖像

現在,讓我們建立一個二維碼應用程式。

建立QRCodeModel

// Import necessary namespaces
using System.ComponentModel.DataAnnotations;

namespace IronQRScannerAsp.Models
{
    public class QRCodeModel
    {
        // Property to hold the uploaded QR code image
        [Display(Name = "Select QR Image")]
        public IFormFile QRCodeImage { get; set; }
    }
}
// Import necessary namespaces
using System.ComponentModel.DataAnnotations;

namespace IronQRScannerAsp.Models
{
    public class QRCodeModel
    {
        // Property to hold the uploaded QR code image
        [Display(Name = "Select QR Image")]
        public IFormFile QRCodeImage { get; set; }
    }
}
' Import necessary namespaces
Imports System.ComponentModel.DataAnnotations

Namespace IronQRScannerAsp.Models
	Public Class QRCodeModel
		' Property to hold the uploaded QR code image
		<Display(Name := "Select QR Image")>
		Public Property QRCodeImage() As IFormFile
	End Class
End Namespace
$vbLabelText   $csharpLabel

建立二維碼控制器

新增控制器,方法是右鍵單擊控制器資料夾,並提供如下所示的名稱:

如何在 ASP.NET 中掃描二維碼:圖 7 - 按一下資料夾新增控制器並為其命名

選擇空控制器。

如何在 ASP.NET 中掃描二維碼:圖 8 - 點選提示方塊中的"空控制器"

請提供控制器名稱。

如何在 ASP.NET 中掃描二維碼:圖 9 - 命名控制器

現在將以下程式碼新增至控制器。

// Import necessary namespaces
using IronQr;
using IronQRScannerAsp.Models;
using IronSoftware.Drawing;
using Microsoft.AspNetCore.Mvc;

namespace IronQRScannerAsp.Controllers
{
    // Controller to handle QR code scanning functionalities
    public class QrCodeController : Controller
    {
        private readonly IWebHostEnvironment _environment;

        // Constructor for dependency injection of the hosting environment
        public QrCodeController(IWebHostEnvironment environment)
        {
            _environment = environment;
        }

        // Displays the initial View
        public IActionResult Index()
        {
            ViewBag.QrCodeText = "Text";
            return View();
        }

        // Handles the POST request to scan a QR code
        [HttpPost]
        public IActionResult ScanQRCode(QRCodeModel qrImage)
        {
            string path = Path.Combine(_environment.WebRootPath, "ScanQRCode");
            if (!Directory.Exists(path))
            {
                Directory.CreateDirectory(path);
            }

            // Define the file path for saving the uploaded QR image
            string filePath = Path.Combine(_environment.WebRootPath, "ScanQRCode/qrcode.png");
            using (var stream = System.IO.File.Create(filePath))
            {
                qrImage.QRCodeImage.CopyTo(stream); // Save uploaded image to server
            }

            // Open the asset to read a QR Code from
            var bitmap = AnyBitmap.FromFile(filePath);

            // Load the asset into QrImageInput
            QrImageInput imageInput = new QrImageInput(bitmap);

            // Create a QR Reader object
            QrReader reader = new QrReader();

            // Read the Input and get all embedded QR Codes
            IEnumerable<QrResult> results = reader.Read(imageInput);

            // Display scanned text and image on the view
            ViewBag.QrCodeText = results.First().Value;
            string imageUrl = $"{this.Request.Scheme}://{this.Request.Host}{this.Request.PathBase}" + "/ScanQRCode/qrcode.png";
            ViewBag.QrCodeUri = imageUrl;

            return View();
        }
    }
}
// Import necessary namespaces
using IronQr;
using IronQRScannerAsp.Models;
using IronSoftware.Drawing;
using Microsoft.AspNetCore.Mvc;

namespace IronQRScannerAsp.Controllers
{
    // Controller to handle QR code scanning functionalities
    public class QrCodeController : Controller
    {
        private readonly IWebHostEnvironment _environment;

        // Constructor for dependency injection of the hosting environment
        public QrCodeController(IWebHostEnvironment environment)
        {
            _environment = environment;
        }

        // Displays the initial View
        public IActionResult Index()
        {
            ViewBag.QrCodeText = "Text";
            return View();
        }

        // Handles the POST request to scan a QR code
        [HttpPost]
        public IActionResult ScanQRCode(QRCodeModel qrImage)
        {
            string path = Path.Combine(_environment.WebRootPath, "ScanQRCode");
            if (!Directory.Exists(path))
            {
                Directory.CreateDirectory(path);
            }

            // Define the file path for saving the uploaded QR image
            string filePath = Path.Combine(_environment.WebRootPath, "ScanQRCode/qrcode.png");
            using (var stream = System.IO.File.Create(filePath))
            {
                qrImage.QRCodeImage.CopyTo(stream); // Save uploaded image to server
            }

            // Open the asset to read a QR Code from
            var bitmap = AnyBitmap.FromFile(filePath);

            // Load the asset into QrImageInput
            QrImageInput imageInput = new QrImageInput(bitmap);

            // Create a QR Reader object
            QrReader reader = new QrReader();

            // Read the Input and get all embedded QR Codes
            IEnumerable<QrResult> results = reader.Read(imageInput);

            // Display scanned text and image on the view
            ViewBag.QrCodeText = results.First().Value;
            string imageUrl = $"{this.Request.Scheme}://{this.Request.Host}{this.Request.PathBase}" + "/ScanQRCode/qrcode.png";
            ViewBag.QrCodeUri = imageUrl;

            return View();
        }
    }
}
' Import necessary namespaces
Imports IronQr
Imports IronQRScannerAsp.Models
Imports IronSoftware.Drawing
Imports Microsoft.AspNetCore.Mvc

Namespace IronQRScannerAsp.Controllers
	' Controller to handle QR code scanning functionalities
	Public Class QrCodeController
		Inherits Controller

		Private ReadOnly _environment As IWebHostEnvironment

		' Constructor for dependency injection of the hosting environment
		Public Sub New(ByVal environment As IWebHostEnvironment)
			_environment = environment
		End Sub

		' Displays the initial View
		Public Function Index() As IActionResult
			ViewBag.QrCodeText = "Text"
			Return View()
		End Function

		' Handles the POST request to scan a QR code
		<HttpPost>
		Public Function ScanQRCode(ByVal qrImage As QRCodeModel) As IActionResult
			Dim path As String = System.IO.Path.Combine(_environment.WebRootPath, "ScanQRCode")
			If Not Directory.Exists(path) Then
				Directory.CreateDirectory(path)
			End If

			' Define the file path for saving the uploaded QR image
			Dim filePath As String = System.IO.Path.Combine(_environment.WebRootPath, "ScanQRCode/qrcode.png")
			Using stream = System.IO.File.Create(filePath)
				qrImage.QRCodeImage.CopyTo(stream) ' Save uploaded image to server
			End Using

			' Open the asset to read a QR Code from
			Dim bitmap = AnyBitmap.FromFile(filePath)

			' Load the asset into QrImageInput
			Dim imageInput As New QrImageInput(bitmap)

			' Create a QR Reader object
			Dim reader As New QrReader()

			' Read the Input and get all embedded QR Codes
			Dim results As IEnumerable(Of QrResult) = reader.Read(imageInput)

			' Display scanned text and image on the view
			ViewBag.QrCodeText = results.First().Value
			Dim imageUrl As String = $"{Me.Request.Scheme}://{Me.Request.Host}{Me.Request.PathBase}" & "/ScanQRCode/qrcode.png"
			ViewBag.QrCodeUri = imageUrl

			Return View()
		End Function
	End Class
End Namespace
$vbLabelText   $csharpLabel

程式碼解釋

提供的程式碼片段是一個名為QrCodeController的 ASP.NET Core MVC 控制器,它使用 IronQR 函式庫來處理二維碼掃描功能。 以下是這段程式碼功能的簡要描述:

1. 儲存上傳的二維碼圖像

路徑建設

  • 它會在應用程式的 Web 根目錄中建立一個專門用於保存二維碼影像的檔案路徑("ScanQRCode"目錄)。
  • 它會檢查該目錄是否存在,如果不存在,則會建立該目錄,以避免在儲存檔案時出現檔案未找到錯誤。

文件保存

  • 它會建立上傳的二維碼圖像將保存的完整檔案路徑( filePath )("ScanQRCode/qrcode.png")。 這將覆蓋任何同名的現有文件,從而有效地處理新的掃描,而不會累積文件。
  • 它開啟一個檔案流,並將上傳的映像( qrImage.QRCodeImage ,很可能是表單檔案)的內容複製到伺服器上的指定位置。

2. 解碼二維碼

讀取圖像文件

  • 使用AnyBitmap.FromFile(filePath)將已儲存的影像檔案載入為適合二維碼掃描的格式。 AnyBitmap很可能是一個輔助類,用於將影像檔案轉換為 QR 閱讀器可以處理的點陣圖物件。

初始化二維碼閱讀器

  • 將載入的點陣圖封裝到QrImageInput中,該 QrImageInput 專門設計用於作為 QR 碼讀取過程的輸入。
  • 實例化QrReader ,它是 IronQR 庫的一個元件,配置為檢測和解碼二維碼。

掃描二維碼

  • 呼叫reader.Read(imageInput)掃描影像中的二維碼。 此方法傳回一個IEnumerable<QrResult>其中每個QrResult包含從影像中偵測到的二維碼所取得的資料。
  • 它使用results.First().Value提取第一個結果的值,並將解碼後的資訊儲存在ViewBag.QrCodeText中。 這假設影像中至少包含一個二維碼,並且無法處理未偵測到二維碼的潛在錯誤。

3. 準備並提交答复

圖片 URL 建構

  • 建構一個指向伺服器上儲存的二維碼圖像的 URL( imageUrl )。 該 URL 使用當前 HTTP 請求的協定、主機和路徑基址構建,確保使用者可以存取並查看。
  • 產生的 URL 保存在ViewBag.QrCodeUri中。

查看返回

  • 傳回相同的視圖( View() ),該視圖可能會向使用者顯示二維碼圖像和解碼後的文字。 ViewBag用於將二維碼的解碼文字和圖像的 URL 傳遞給視圖進行渲染。

將視圖新增至控制器類

新增視圖,右鍵點選QrCodeController類別中的CreateQRCode操作方法。

如何在 ASP.NET 中掃描二維碼:圖 10 - 在QrCodeController類別中新增視圖

選擇"新增視圖"選項,然後選擇"Razor視圖"。 點擊"新增"。

如何在 ASP.NET 中掃描二維碼:圖 11 - 選擇"新增視圖"選項,然後選擇"Razor 視圖",再選擇"新增"。

然後選擇之前產生的"創建"模板和模型類別。

如何在 ASP.NET 中掃描二維碼:圖 12 - 選擇先前產生的建立模板

現在將視圖類別中的程式碼替換為下面所示的程式碼。

@model IronQRScannerAsp.Models.QRCodeModel

@{
    ViewData["Title"] = "ScanQRCode";
}

<h1>ScanQRCode</h1>
<h4>QRCodeModel</h4>
<hr />
<div class="row">
    <div class="col-md-14">
        <form asp-action="ScanQRCode" enctype="multipart/form-data">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-group">
                <label for="QRCodeImage">Select QR Image:</label>
                <input asp-for="QRCodeImage" class="form-control" type="file" />
            </div>
            <div class="form-group">
                <input type="submit" value="Upload" class="btn btn-primary" />
            </div>
        </form>
    </div>
</div>
<div>
    <h3>Scanned Text:</h3>
    <h4>@ViewBag.QrCodeText</h4>
    @if (ViewBag.QrCodeUri != null)
    {
        <img src="@ViewBag.QrCodeUri" class="img-thumbnail" />
    }
</div>
<div>
    <a asp-action="Index">Clear</a>
</div>

@section Scripts {
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}

現在,在Program.cs檔案中,修改以下程式碼,將上述視圖設定為預設路由:

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=QrCode}/{action=Index}");
app.MapControllerRoute(
    name: "default",
    pattern: "{controller=QrCode}/{action=Index}");
app.MapControllerRoute(name:= "default", pattern:= "{controller=QrCode}/{action=Index}")
$vbLabelText   $csharpLabel

這將預設路由從HomeController更改為我們的QrCode控制器。

輸入圖片(需提供URL):https://ironsoftware.com/csharp/qr/

如何在 ASP.NET 中掃描二維碼:圖 13 - 二維碼輸入範例

輸出

如何在 ASP.NET 中掃描二維碼:圖 14 - 依照上述步驟操作後的範例輸出

在頁面上,選擇二維碼圖片,然後點擊上傳以解碼二維碼。 該應用程式還可以進行修改,以讀取視訊串流並顯示結果。

步驟 4:讀取高階二維碼

為了讀取高級二維碼,IronQR 提供了以下設定。

// Import necessary namespaces
using IronQr;
using IronSoftware.Drawing;
using IronQr.Enum;
using System.Collections.Generic;

// Load an image file as a bitmap
var inputBmp = AnyBitmap.FromFile("QrImage.png");

// Use Auto => Machine Learning Scan
QrImageInput scan_ML_and_normal = new QrImageInput(inputBmp, QrScanMode.OnlyDetectionModel);
IEnumerable<QrResult> results1 = new QrReader().Read(scan_ML_and_normal);

// Use Machine Learning Scan - High Speed
QrImageInput scan_ML_only = new QrImageInput(inputBmp, QrScanMode.OnlyDetectionModel);
IEnumerable<QrResult> results2 = new QrReader().Read(scan_ML_only);

// Use Scan without Machine Learning
QrImageInput scan_normal_only = new QrImageInput(inputBmp, QrScanMode.OnlyBasicScan);
IEnumerable<QrResult> results3 = new QrReader().Read(scan_normal_only);
// Import necessary namespaces
using IronQr;
using IronSoftware.Drawing;
using IronQr.Enum;
using System.Collections.Generic;

// Load an image file as a bitmap
var inputBmp = AnyBitmap.FromFile("QrImage.png");

// Use Auto => Machine Learning Scan
QrImageInput scan_ML_and_normal = new QrImageInput(inputBmp, QrScanMode.OnlyDetectionModel);
IEnumerable<QrResult> results1 = new QrReader().Read(scan_ML_and_normal);

// Use Machine Learning Scan - High Speed
QrImageInput scan_ML_only = new QrImageInput(inputBmp, QrScanMode.OnlyDetectionModel);
IEnumerable<QrResult> results2 = new QrReader().Read(scan_ML_only);

// Use Scan without Machine Learning
QrImageInput scan_normal_only = new QrImageInput(inputBmp, QrScanMode.OnlyBasicScan);
IEnumerable<QrResult> results3 = new QrReader().Read(scan_normal_only);
' Import necessary namespaces
Imports IronQr
Imports IronSoftware.Drawing
Imports IronQr.Enum
Imports System.Collections.Generic

' Load an image file as a bitmap
Private inputBmp = AnyBitmap.FromFile("QrImage.png")

' Use Auto => Machine Learning Scan
Private scan_ML_and_normal As New QrImageInput(inputBmp, QrScanMode.OnlyDetectionModel)
Private results1 As IEnumerable(Of QrResult) = (New QrReader()).Read(scan_ML_and_normal)

' Use Machine Learning Scan - High Speed
Private scan_ML_only As New QrImageInput(inputBmp, QrScanMode.OnlyDetectionModel)
Private results2 As IEnumerable(Of QrResult) = (New QrReader()).Read(scan_ML_only)

' Use Scan without Machine Learning
Private scan_normal_only As New QrImageInput(inputBmp, QrScanMode.OnlyBasicScan)
Private results3 As IEnumerable(Of QrResult) = (New QrReader()).Read(scan_normal_only)
$vbLabelText   $csharpLabel

透過利用最新的機器學習技術,我們將二維碼閱讀器提升到了新的高度。 即使在複雜條件下,先進的機器學習模型也能提高應用程式解碼二維碼的準確性和效率。 無論是從靜態影像、視訊串流或即時相機畫面中讀取二維碼,這款基於機器學習的解決方案都能快速可靠地提供所需資訊。 這項創新透過識別真正的二維碼並標記潛在威脅,簡化了資料檢索並提高了安全性。 借助我們的機器學習技術,您可以確信您的二維碼掃描功能處於領先地位,為您的用戶提供流暢安全的體驗。

授權(可試用)

開發者可以從這裡取得 IronQR 試用許可證。 需要將金鑰放置在appSettings.json檔案中。

{
  "IronQR.License.LicenseKey": "My Key"
}

結論

在本文中,我們探討如何使用IronQR在 ASP.NET Core 中掃描二維碼。 將IronQR整合到 ASP.NET 應用程式中進行二維碼掃描是一個簡單的過程,它增強了 Web 應用程式的功能,使其更具互動性和使用者友善性。 IronQR的強大功能和易用性使其成為希望實現條碼相關功能的開發人員的絕佳選擇。

常見問題解答

如何在 ASP.NET 應用程式中實作 QR 掃描器?

若要在 ASP.NET 應用程式中實作 QR 掃描器,請先在 Visual Studio 中建立新專案,透過套件管理員安裝 IronQR 函式庫,並新增程式碼,以使用 IronQR for .NET 的強大功能處理 QR 掃描。

在 ASP.NET 中設定 QRCodeModel 的步驟為何?

在 ASP.NET 中建立 QRCodeModel,定義一個模型類別來處理 QR 碼資料,使用 IronQR 來處理輸入,並確保您的 ASP.NET 應用程式能夠管理 QR 碼掃描與結果顯示。

IronQR 可以讀取不同影像格式的 QR 碼嗎?

是的,IronQR 可以讀取多種圖像格式的 QR 碼,包括 jpg、png、svg、bmp、gif、tif、tiff 和多頁圖像,使其成為各種應用程式的多面手。

IronQR 如何利用機器學習進行 QR 掃描?

IronQR 採用先進的機器學習模型來提升 QR 碼掃描的精確度,確保在不同的環境和平台上都能進行可靠且精確的讀取。

IronQR 可以用於哪些平台的 QR 掃描?

IronQR 支援多種平台,包括網頁應用程式 (Blazor & WebForms)、行動應用程式 (Xamarin & MAUI)、桌面應用程式 (WPF & MAUI) 以及控制台應用程式,相容於 C#、F# 和 VB.NET。

如何在 ASP.NET 中處理 QR 掃描的檔案上傳?

在 ASP.NET 中,透過設定接收檔案的控制器來管理 QR 掃描的檔案上傳,然後再使用 IronQR 來有效地處理和掃描上傳的 QR 碼影像。

是否可以使用 IronQR 從視訊來源掃描 QR 碼?

是的,IronQR 可以適應掃描視訊來源的 QR 碼,將應用擴展到需要即時資料處理的動態環境。

IronQR 有哪些授權選項?

IronQR 提供可從 Iron Software 網站取得的試用授權。開發人員應該將授權金鑰放入 appSettings.json 檔案以啟用試用版。

在 ASP.NET 中使用 IronQR 進行 QR 掃描有哪些好處?

在 ASP.NET 中使用 IronQR 進行 QR 掃描具有多種優點,例如容易整合、支援各種影像格式、機器學習增強的準確性,以及跨平台相容性。

如何使用 IronQR for .NET 自訂 ASP.NET 中的 QR 碼建立?

若要使用 IronQR for .NET 自訂 ASP.NET 中的 QR 碼建立,請使用函式庫的功能修改 QR 碼大小、顏色和內嵌資料,依據特定應用程式需求量身打造輸出。

Jordi Bardia
軟體工程師
Jordi 在 Python、C# 和 C++ 上最得心應手,當他不在 Iron Software 展現技術時,便在做遊戲編程。在分担产品测测试,产品开发和研究的责任时,Jordi 为持续的产品改进增值。他说这种多样化的经验使他受到挑战并保持参与, 而这也是他与 Iron Software 中工作一大乐趣。Jordi 在佛罗里达州迈阿密长大,曾在佛罗里达大学学习计算机科学和统计学。