跳過到頁腳內容
.NET幫助

LiteDB .NET(對開發者的解析)。

LiteDB 是一個簡單、快速且輕量的嵌入式 .NET 文件資料庫。 LiteDB .NET 的靈感來自於 MongoDB 資料庫,其 API 與 MongoDB 的官方 .NET API 非常相似。 LiteDB 是一種無伺服器資料庫,適用於小型專案和行動應用程式。

本文將提供您在專案中使用 LiteDB 功能的精確說明。 我們還介紹了 IronPDF(Iron Software 製作的 .NET 函式庫,用於產生和處理 PDF)的使用方法,以及如何運用它將 LiteDB 資料庫的內容輸出為 PDF,以供檢視和分享。

LiteDB 的主要功能

1.內嵌資料庫:無需獨立伺服器。 LiteDB 在您的應用程式流程中執行。 2.單一資料檔案:您可以在單一檔案資料庫中儲存所有資料,簡化部署和備份。 3.BSON 格式: 使用 BSON 格式進行儲存,確保快速讀寫作業。 4.LINQ 支援: 完全支援 LINQ 進行查詢,讓 .NET 開發人員可以直覺地進行查詢。 5.ACID 交易: 支援 ACID 交易,確保資料完整性。 6.跨平台: 可在 Windows、Linux 和 macOS 上運作。

在 .NET 專案中設定 LiteDB

在Visual Studio中打開您的項目。 然後,在解決方案總管中,右鍵按一下專案,並選擇 "管理 NuGet 套件"。搜尋 LiteDB 並安裝,即可輕鬆地將此資料庫解決方案整合至您的專案中。

另外,您也可以使用套件管理員控制台進行安裝。 若要在 NuGet 套件管理員控制台安裝 LiteDB,請使用下列指令:

Install-Package LiteDB

開始使用 LiteDB

安裝完成後,您就可以開始在應用程式中使用 LiteDB。 讓我們透過一些範例來說明它的用法。

範例 1:建立和插入資料

首先,讓我們建立一個簡單的 Product 類來表示我們的資料:

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
}
public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

接下來,我們將建立一個資料庫,並插入一些產品:

using LiteDB;
using System;

class Program
{
    static void Main()
    {
        // Open the database (or create it if it doesn't exist)
        using (var db = new LiteDatabase(@"MyData.db"))
        {
            // Get a collection (or create, if it doesn't exist)
            var products = db.GetCollection<Product>("products");

            // Create a list of products to insert into the database
            var productList = new[]
            {
                new Product { Id = 201, Name = "Apple", Price = 0.99m },
                new Product { Id = 202, Name = "Banana", Price = 0.59m },
                new Product { Id = 203, Name = "Orange", Price = 0.79m },
                new Product { Id = 204, Name = "Grape", Price = 2.99m },
                new Product { Id = 205, Name = "Watermelon", Price = 4.99m }
            };

            // Insert each product into the collection
            foreach (var product in productList)
            {
                products.Insert(product);
            }

            Console.WriteLine("Product inserted successfully.");
        }
    }
}
using LiteDB;
using System;

class Program
{
    static void Main()
    {
        // Open the database (or create it if it doesn't exist)
        using (var db = new LiteDatabase(@"MyData.db"))
        {
            // Get a collection (or create, if it doesn't exist)
            var products = db.GetCollection<Product>("products");

            // Create a list of products to insert into the database
            var productList = new[]
            {
                new Product { Id = 201, Name = "Apple", Price = 0.99m },
                new Product { Id = 202, Name = "Banana", Price = 0.59m },
                new Product { Id = 203, Name = "Orange", Price = 0.79m },
                new Product { Id = 204, Name = "Grape", Price = 2.99m },
                new Product { Id = 205, Name = "Watermelon", Price = 4.99m }
            };

            // Insert each product into the collection
            foreach (var product in productList)
            {
                products.Insert(product);
            }

            Console.WriteLine("Product inserted successfully.");
        }
    }
}
Imports LiteDB
Imports System

Friend Class Program
	Shared Sub Main()
		' Open the database (or create it if it doesn't exist)
		Using db = New LiteDatabase("MyData.db")
			' Get a collection (or create, if it doesn't exist)
			Dim products = db.GetCollection(Of Product)("products")

			' Create a list of products to insert into the database
			Dim productList = {
				New Product With {
					.Id = 201,
					.Name = "Apple",
					.Price = 0.99D
				},
				New Product With {
					.Id = 202,
					.Name = "Banana",
					.Price = 0.59D
				},
				New Product With {
					.Id = 203,
					.Name = "Orange",
					.Price = 0.79D
				},
				New Product With {
					.Id = 204,
					.Name = "Grape",
					.Price = 2.99D
				},
				New Product With {
					.Id = 205,
					.Name = "Watermelon",
					.Price = 4.99D
				}
			}

			' Insert each product into the collection
			For Each product In productList
				products.Insert(product)
			Next product

			Console.WriteLine("Product inserted successfully.")
		End Using
	End Sub
End Class
$vbLabelText   $csharpLabel

程式碼描述

該程式碼初始化與名為"MyData.db"的 LiteDB 資料庫的連線,並擷取名為"products"的集合。然後,程式會建立一個 Product 物件的陣列,該物件具有各種屬性,例如 ID、Name 和 Price。陣列中的每個產品都會插入資料庫中的 "products" 資料集中。 成功插入所有產品後,會在控制台列印一則確認訊息。

輸出為

LiteDB .NET (How It Works For Developers):圖 1 - 前述程式碼的控制台輸出

範例:簡化使用者資料管理。

想像您正在開發一個管理使用者帳號的行動應用程式。 每個使用者都有一個個人檔案,包含他們的姓名、電子郵件地址、偏好設定 (儲存為 JSON 物件) 以及喜愛項目清單。 以下是 LiteDb.NET 如何簡化您的資料儲存:

此代碼定義了一個 User 類,用來表示使用者資料,以及一個 UserManager 類,用來管理 LiteDb.NET 資料庫中的使用者操作。

using LiteDB;
using System.Collections.Generic;

public class User
{
    [BsonId]
    public string Id { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
    public Dictionary<string, string> Preferences { get; set; }
    public List<string> FavoriteItems { get; set; }
} 

public class UserManager
{
    private readonly LiteDatabase db;

    public UserManager(string connectionString)
    {
       db = new LiteDatabase(connectionString);
    }

    public void SaveUser(User user)
    {
        var collection = db.GetCollection<User>("users");
        collection.Insert(user);
    }

    public User GetUser(string userId)
    {
        var collection = db.GetCollection<User>("users");
        return collection.FindById(userId);
    }

    public void UpdateUser(User user)
    {
        var collection = db.GetCollection<User>("users");
        collection.Update(user);
    }

    public void DeleteUser(string userId)
    {
        var collection = db.GetCollection<User>("users");
        collection.Delete(userId);
    }
}
using LiteDB;
using System.Collections.Generic;

public class User
{
    [BsonId]
    public string Id { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
    public Dictionary<string, string> Preferences { get; set; }
    public List<string> FavoriteItems { get; set; }
} 

public class UserManager
{
    private readonly LiteDatabase db;

    public UserManager(string connectionString)
    {
       db = new LiteDatabase(connectionString);
    }

    public void SaveUser(User user)
    {
        var collection = db.GetCollection<User>("users");
        collection.Insert(user);
    }

    public User GetUser(string userId)
    {
        var collection = db.GetCollection<User>("users");
        return collection.FindById(userId);
    }

    public void UpdateUser(User user)
    {
        var collection = db.GetCollection<User>("users");
        collection.Update(user);
    }

    public void DeleteUser(string userId)
    {
        var collection = db.GetCollection<User>("users");
        collection.Delete(userId);
    }
}
Imports LiteDB
Imports System.Collections.Generic

Public Class User
	<BsonId>
	Public Property Id() As String
	Public Property Name() As String
	Public Property Email() As String
	Public Property Preferences() As Dictionary(Of String, String)
	Public Property FavoriteItems() As List(Of String)
End Class

Public Class UserManager
	Private ReadOnly db As LiteDatabase

	Public Sub New(ByVal connectionString As String)
	   db = New LiteDatabase(connectionString)
	End Sub

	Public Sub SaveUser(ByVal user As User)
		Dim collection = db.GetCollection(Of User)("users")
		collection.Insert(user)
	End Sub

	Public Function GetUser(ByVal userId As String) As User
		Dim collection = db.GetCollection(Of User)("users")
		Return collection.FindById(userId)
	End Function

	Public Sub UpdateUser(ByVal user As User)
		Dim collection = db.GetCollection(Of User)("users")
		collection.Update(user)
	End Sub

	Public Sub DeleteUser(ByVal userId As String)
		Dim collection = db.GetCollection(Of User)("users")
		collection.Delete(userId)
	End Sub
End Class
$vbLabelText   $csharpLabel

此實作有效利用 LiteDb.NET 的功能來管理使用者資料。 User 類會儲存使用者資訊,而 UserManager 類則提供在資料庫中儲存、擷取、更新及刪除使用者的方法。

LiteDB,適用於 .NET 的內嵌式 NoSQL 資料庫。

LiteDB 非常適合沒有使用者並發需求的中小型應用程式。 舉例來說,對於想要簡單快速地儲存資料的個人主控台應用程式來說,這是非常好的選擇。 本軟體完全以 C# 開發,重量輕、佔用不到 450KB,而且不依賴外部相依性。

還有一些要點,列在他們的 GitHub 頁面

1.無伺服器 NoSQL 文件儲存 2.簡單的 API,類似於 MongoDB 3.線程安全 4.LiteDB 完全以 C# 寫成,相容於 .NET 4.5、NETStandard 1.3/2.0,打包成單一 DLL 檔案,佔用不到 450KB。 5.ACID 與完整的交易支援 6.寫入失敗後的資料復原 (WAL 記錄檔) 7.使用 AES 加密技術進行資料檔案加密 8.您可以使用屬性或 LiteDB 提供的流暢映射器 API,輕鬆地將您的 Plain Old CLR Objects (POCO) 類別映射至 BsonDocument。 9.儲存檔案和串流資料(如 MongoDB 中的 GridFS) 10.單一資料檔案儲存(如 SQLite) 11.索引文件欄位以便快速搜尋 12.支援 LINQ 查詢 13.存取/轉換資料的類似 SQL 指令 14.LiteDB Studio - 資料存取的優美使用者介面 15.開放原始碼,人人皆可自由使用 - 包括商業用途

IronPDF 簡介:C# PDF Library

LiteDB .NET (How It Works For Developers):圖 2 - IronPdf 網頁

IronPDF是首屈一指的 C# PDF 函式庫,有助於在 .NET 專案中無縫建立編輯操作PDF。 它提供了全面的 API,可執行 HTML 至 PDF 轉換、動態 PDF 生成和資料擷取等任務。 利用 .NET Chromium 引擎可確保將 HTML 精確地渲染為 PDF 檔案,滿足跨 .NET Core、.NET Standard 和 .NET Framework 的各種專案需求。 IronPDF 可確保從 HTML 內容生成 PDF 的精確性、簡易性和效率,並支援網頁、桌面和控制台應用程式。

安裝 IronPdf 函式庫

若要在專案中啟動 IronPDF,請透過 Visual Studio 中的 NuGet 套件管理員安裝該函式庫。 然後只需遵循這些簡單的步驟即可:

1.開啟 Visual Studio 並導航至"解決方案總管"。 2.用滑鼠右鍵按一下 Dependencies,然後選擇"Manage NuGet Packages"(管理 NuGet 套件)選項。 3.選擇"瀏覽"標籤並搜尋 "IronPdf"。 4.選擇 IronPdf 並點擊 "安裝"。

另外,在 Visual Studio 中,您也可以利用套件管理員控制台執行下列指令來安裝函式庫:

Install-Package IronPdf

IronPDF 與 LiteDB 的使用範例

以下是一個簡單的程式碼範例,說明如何使用 IronPDF 從 HTML 內容產生 PDF,並使用"using"語句確保資源處理得宜。 在此,我們結合 LiteDB 與 IronPDF 的功能,展示如何將 LiteDB 內的資料輸出為 PDF 供檢視:

using LiteDB;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using IronPdf;

class Program
{
    static void Main()
    {
        using (var db = new LiteDatabase(@"MyData.db"))
        {
            // Retrieve the 'products' collection or create it
            var products = db.GetCollection<Product>("products");

            // Add some initial products to the collection
            var productList = new[]
            {
                new Product { Id = 101, Name = "Apple", Price = 0.99m },
                new Product { Id = 102, Name = "Banana", Price = 0.59m },
                new Product { Id = 103, Name = "Orange", Price = 0.79m },
                new Product { Id = 104, Name = "Grape", Price = 2.99m },
                new Product { Id = 105, Name = "Watermelon", Price = 4.99m }
            };

            // Insert products into the LiteDB collection
            foreach (var product in productList)
            {
                products.Insert(product);
            }

            Console.WriteLine("Product inserted successfully.");

            // Fetch all products from the database
            var allProducts = GetAllProducts(db);

            // Generate HTML content from the product list
            string htmlContent = GenerateHtml(allProducts);

            // Generate the PDF from the HTML content
            GeneratePDF(htmlContent);

            Console.WriteLine("PDF generated successfully.");
        }
    }

    public static List<Product> GetAllProducts(LiteDatabase db)
    {
        var products = db.GetCollection<Product>("products");
        return products.FindAll().ToList();
    }

    public static void GeneratePDF(string data)
    {
        // Set your IronPDF license key here
        IronPdf.License.LicenseKey = "Your-License-Key";
        Console.WriteLine("PDF Generating Started...");

        // Create a PDF renderer
        var renderer = new ChromePdfRenderer();
        Console.WriteLine("PDF Processing ....");

        // Render the HTML as a PDF
        var pdf = renderer.RenderHtmlAsPdf(data);

        // Save the PDF to a file
        string filePath = "Data.pdf";
        pdf.SaveAs(filePath);

        Console.WriteLine($"PDF Generation Completed, File Saved as {filePath}");
    }

    public static string GenerateHtml(List<Product> products)
    {
        // Build HTML table from product list
        StringBuilder htmlBuilder = new StringBuilder();
        htmlBuilder.Append("<html><head><style>table { width: 100%; border-collapse: collapse; } th, td { border: 1px solid black; padding: 8px; text-align: left; }</style></head><body>");
        htmlBuilder.Append("<h1>Product List</h1>");
        htmlBuilder.Append("<table><tr><th>ID</th><th>Name</th><th>Price</th></tr>");

        // Add each product row to the HTML table
        foreach (var product in products)
        {
            htmlBuilder.Append($"<tr><td>{product.Id}</td><td>{product.Name}</td><td>{product.Price:C}</td></tr>");
        }

        htmlBuilder.Append("</table></body></html>");
        return htmlBuilder.ToString();
    }
}
using LiteDB;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using IronPdf;

class Program
{
    static void Main()
    {
        using (var db = new LiteDatabase(@"MyData.db"))
        {
            // Retrieve the 'products' collection or create it
            var products = db.GetCollection<Product>("products");

            // Add some initial products to the collection
            var productList = new[]
            {
                new Product { Id = 101, Name = "Apple", Price = 0.99m },
                new Product { Id = 102, Name = "Banana", Price = 0.59m },
                new Product { Id = 103, Name = "Orange", Price = 0.79m },
                new Product { Id = 104, Name = "Grape", Price = 2.99m },
                new Product { Id = 105, Name = "Watermelon", Price = 4.99m }
            };

            // Insert products into the LiteDB collection
            foreach (var product in productList)
            {
                products.Insert(product);
            }

            Console.WriteLine("Product inserted successfully.");

            // Fetch all products from the database
            var allProducts = GetAllProducts(db);

            // Generate HTML content from the product list
            string htmlContent = GenerateHtml(allProducts);

            // Generate the PDF from the HTML content
            GeneratePDF(htmlContent);

            Console.WriteLine("PDF generated successfully.");
        }
    }

    public static List<Product> GetAllProducts(LiteDatabase db)
    {
        var products = db.GetCollection<Product>("products");
        return products.FindAll().ToList();
    }

    public static void GeneratePDF(string data)
    {
        // Set your IronPDF license key here
        IronPdf.License.LicenseKey = "Your-License-Key";
        Console.WriteLine("PDF Generating Started...");

        // Create a PDF renderer
        var renderer = new ChromePdfRenderer();
        Console.WriteLine("PDF Processing ....");

        // Render the HTML as a PDF
        var pdf = renderer.RenderHtmlAsPdf(data);

        // Save the PDF to a file
        string filePath = "Data.pdf";
        pdf.SaveAs(filePath);

        Console.WriteLine($"PDF Generation Completed, File Saved as {filePath}");
    }

    public static string GenerateHtml(List<Product> products)
    {
        // Build HTML table from product list
        StringBuilder htmlBuilder = new StringBuilder();
        htmlBuilder.Append("<html><head><style>table { width: 100%; border-collapse: collapse; } th, td { border: 1px solid black; padding: 8px; text-align: left; }</style></head><body>");
        htmlBuilder.Append("<h1>Product List</h1>");
        htmlBuilder.Append("<table><tr><th>ID</th><th>Name</th><th>Price</th></tr>");

        // Add each product row to the HTML table
        foreach (var product in products)
        {
            htmlBuilder.Append($"<tr><td>{product.Id}</td><td>{product.Name}</td><td>{product.Price:C}</td></tr>");
        }

        htmlBuilder.Append("</table></body></html>");
        return htmlBuilder.ToString();
    }
}
Imports LiteDB
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Text
Imports IronPdf

Friend Class Program
	Shared Sub Main()
		Using db = New LiteDatabase("MyData.db")
			' Retrieve the 'products' collection or create it
			Dim products = db.GetCollection(Of Product)("products")

			' Add some initial products to the collection
			Dim productList = {
				New Product With {
					.Id = 101,
					.Name = "Apple",
					.Price = 0.99D
				},
				New Product With {
					.Id = 102,
					.Name = "Banana",
					.Price = 0.59D
				},
				New Product With {
					.Id = 103,
					.Name = "Orange",
					.Price = 0.79D
				},
				New Product With {
					.Id = 104,
					.Name = "Grape",
					.Price = 2.99D
				},
				New Product With {
					.Id = 105,
					.Name = "Watermelon",
					.Price = 4.99D
				}
			}

			' Insert products into the LiteDB collection
			For Each product In productList
				products.Insert(product)
			Next product

			Console.WriteLine("Product inserted successfully.")

			' Fetch all products from the database
			Dim allProducts = GetAllProducts(db)

			' Generate HTML content from the product list
			Dim htmlContent As String = GenerateHtml(allProducts)

			' Generate the PDF from the HTML content
			GeneratePDF(htmlContent)

			Console.WriteLine("PDF generated successfully.")
		End Using
	End Sub

	Public Shared Function GetAllProducts(ByVal db As LiteDatabase) As List(Of Product)
		Dim products = db.GetCollection(Of Product)("products")
		Return products.FindAll().ToList()
	End Function

	Public Shared Sub GeneratePDF(ByVal data As String)
		' Set your IronPDF license key here
		IronPdf.License.LicenseKey = "Your-License-Key"
		Console.WriteLine("PDF Generating Started...")

		' Create a PDF renderer
		Dim renderer = New ChromePdfRenderer()
		Console.WriteLine("PDF Processing ....")

		' Render the HTML as a PDF
		Dim pdf = renderer.RenderHtmlAsPdf(data)

		' Save the PDF to a file
		Dim filePath As String = "Data.pdf"
		pdf.SaveAs(filePath)

		Console.WriteLine($"PDF Generation Completed, File Saved as {filePath}")
	End Sub

	Public Shared Function GenerateHtml(ByVal products As List(Of Product)) As String
		' Build HTML table from product list
		Dim htmlBuilder As New StringBuilder()
		htmlBuilder.Append("<html><head><style>table { width: 100%; border-collapse: collapse; } th, td { border: 1px solid black; padding: 8px; text-align: left; }</style></head><body>")
		htmlBuilder.Append("<h1>Product List</h1>")
		htmlBuilder.Append("<table><tr><th>ID</th><th>Name</th><th>Price</th></tr>")

		' Add each product row to the HTML table
		For Each product In products
			htmlBuilder.Append($"<tr><td>{product.Id}</td><td>{product.Name}</td><td>{product.Price:C}</td></tr>")
		Next product

		htmlBuilder.Append("</table></body></html>")
		Return htmlBuilder.ToString()
	End Function
End Class
$vbLabelText   $csharpLabel

程式碼會連線至 LiteDB 資料庫、新增產品清單、擷取所有產品,並產生產品清單的 HTML 表示內容。然後使用 IronPDF 函式庫將此 HTML 內容建立 PDF 檔案。 過程包括新增產品、擷取產品、將產品清單轉換為 HTML,以及產生 PDF 的方法。

輸出

LiteDB .NET (How It Works For Developers):圖 3 - 前述程式碼的控制台輸出

PDF 檔案輸出

LiteDB .NET (How It Works For Developers):圖 4 - 前述程式碼輸出的 PDF

結論

LiteDB 為 C# 開發人員提供輕量、無伺服器的嵌入式文件資料庫解決方案,是小型專案與行動應用程式的理想選擇,其特色包括受 MongoDB 啟發的 API、嵌入式資料庫以及跨平台相容性。

同時,IronPDF成為首屈一指的 C# PDF 函式庫,透過 HTML 至 PDF 的轉換和 NuGet 整合,簡化 .NET 專案中的 PDF 產生和操作。 LiteDB 和 IronPDF 都為開發人員提供了有價值的工具,其中 LiteDB 在資料庫管理方面表現優異,而 IronPDF 則在 PDF 處理方面表現突出。

IronPDF 提供免費試用,以發揮其在 PDF 生成和操作方面的全部潛力。

常見問題解答

如何在 C# 中將 HTML 內容轉換為 PDF?

您可以使用 IronPDF 在 C# 中將 HTML 內容轉換為 PDF。該函式庫提供的方法如 RenderHtmlAsPdf 可將 HTML 字串轉換為 PDF 文件。

整合 LiteDB 與 .NET 專案的最佳方式是什麼?

若要將 LiteDB 與 .NET 專案整合,您可以使用 Visual Studio 中的 NuGet Package Manager 安裝 LiteDB。這可讓您直接在應用程式中使用 C# 管理資料庫。

如何從 LiteDB 資料產生 PDF?

若要從 LiteDB 資料產生 PDF,您可以使用 IronPDF。透過從 LiteDB 擷取資料,並使用 IronPDF 的功能進行渲染,您可以建立 PDF 文件,用於報告或分享用途。

我可以使用 IronPDF 在 C# 中操作現有的 PDF 檔案嗎?

是的,IronPDF 可用於處理現有的 PDF 檔案。它提供了在 C# 應用程式中編輯、合併和擷取 PDF 內容的功能。

LiteDB 可以用於行動應用程式嗎?

是的,LiteDB 因其輕量、無伺服器的特性,以及將資料儲存於單一檔案的能力,特別適合行動應用程式。

LiteDB 整合有哪些常見的疑難排解步驟?

LiteDB 整合的常見疑難排解步驟包括透過 NuGet 檢查安裝是否正確、確保您的資料庫檔案路徑可被存取,以及確認您專案的 .NET 版本與 LiteDB 相容。

如何使用 LiteDB 確保資料完整性?

LiteDB 支援 ACID 交易,可確保資料的完整性與可靠性。您可以使用事務來維持一致性,並處理並發的資料修改。

在 .NET 中使用 IronPDF 生成 PDF 有哪些優點?

IronPDF 的優點包括 HTML 到 PDF 的簡易轉換、渲染的高準確性以及全面的 PDF 操作功能,使其成為在 .NET 應用程式中產生和處理 PDF 的理想工具。

Jacob Mellor, Team Iron 首席技术官
首席技术官

Jacob Mellor 是 Iron Software 的首席技術官,作為 C# PDF 技術的先鋒工程師。作為 Iron Software 核心代碼的原作者,他自開始以來塑造了公司產品架構,與 CEO Cameron Rimington 一起將其轉變為一家擁有超過 50 名員工的公司,為 NASA、特斯拉 和 全世界政府機構服務。

Jacob 持有曼徹斯特大學土木工程一級榮譽学士工程學位(BEng) (1998-2001)。他於 1999 年在倫敦開設了他的第一家軟件公司,並於 2005 年製作了他的首個 .NET 組件,專注於解決 Microsoft 生態系統內的複雜問題。

他的旗艦產品 IronPDF & Iron Suite .NET 庫在全球 NuGet 被安裝超過 3000 萬次,其基礎代碼繼續為世界各地的開發工具提供動力。擁有 25 年的商業經驗和 41 年的編碼專業知識,Jacob 仍專注於推動企業級 C#、Java 及 Python PDF 技術的創新,同時指導新一代技術領袖。