跳過到頁腳內容
.NET幫助

Deedle C#(對於開發者的運行原理)

針 C#。

Deedle 是一個功能強大的資料處理和資料分析函式庫。 它提供整個資料框架和序列,讓您有效率地處理結構化資料框架。 Deedle 提供了遺失資料、對齊資料以及套用具有靜態成員 ofNullablesofObservations 的輔助函數的工具。 因其靈活性和效能,被廣泛應用於資料科學。

IronPDF 是一個用於在 .NET 中建立和操作 PDF 文件的函式庫。 它可以幫助您從 HTML 生成 PDF、將圖像轉換為 PDF,以及從 PDF 檔案中提取內容。 IronPDF 可簡化 .NET 專案中的 PDF 任務。

在本文中,您將學習如何開始使用 Deedle for C#,使用 Visual Studio 在您的 .NET 專案中設定它,並透過自動產生的文件實現主要功能。 您將看到程式碼範例和說明,以協助您瞭解如何有效使用 Deedle,包括如何套用指定的函式。

開始使用 Deedle C#。

在 .NET 專案中設定 Deedle

首先,在 Visual Studio 中建立一個新的 C# Console Application 專案。

若要在您的 .NET 專案中使用 Deedle,您需要安裝 Deedle NuGet 套件。 在 NuGet 主控台中執行以下指令:

Install-Package Deedle

安裝完成後,您需要將 Deedle 命名空間匯入專案中:

using Deedle;
using Deedle;
Imports Deedle
$vbLabelText   $csharpLabel

基本程式碼範例

讓我們從一個基本範例開始,建立並操作資料框架。 這將有助於您瞭解 Deedle 的基本知識。

using System;
using Deedle;

class Program
{
    static void Main()
    {
        // Creating a series with integer keys and double values
        var series = new Series<int, double>(new[] { 1, 2, 3 }, new[] { 3.5, 4.2, 5.1 });
        Console.WriteLine("Series:");
        Console.WriteLine(series);

        // Creating a data frame from a 2D array
        var rowIndex = new[] { 1, 2, 3 };
        var colIndex = new[] { "A", "B" };
        var data = new double[,] { { 1.0, 3.5 }, { 2.0, 4.2 }, { 3.0, 5.1 } };
        var dataFrame = Frame.FromArray2D(data)
                             .IndexRowsWith(rowIndex)
                             .IndexColumnsWith(colIndex);
        Console.WriteLine("Data Frame:");
        Console.WriteLine(dataFrame);
    }
}
using System;
using Deedle;

class Program
{
    static void Main()
    {
        // Creating a series with integer keys and double values
        var series = new Series<int, double>(new[] { 1, 2, 3 }, new[] { 3.5, 4.2, 5.1 });
        Console.WriteLine("Series:");
        Console.WriteLine(series);

        // Creating a data frame from a 2D array
        var rowIndex = new[] { 1, 2, 3 };
        var colIndex = new[] { "A", "B" };
        var data = new double[,] { { 1.0, 3.5 }, { 2.0, 4.2 }, { 3.0, 5.1 } };
        var dataFrame = Frame.FromArray2D(data)
                             .IndexRowsWith(rowIndex)
                             .IndexColumnsWith(colIndex);
        Console.WriteLine("Data Frame:");
        Console.WriteLine(dataFrame);
    }
}
Imports System
Imports Deedle

Friend Class Program
	Shared Sub Main()
		' Creating a series with integer keys and double values
		Dim series As New Series(Of Integer, Double)( { 1, 2, 3 }, { 3.5, 4.2, 5.1 })
		Console.WriteLine("Series:")
		Console.WriteLine(series)

		' Creating a data frame from a 2D array
		Dim rowIndex = { 1, 2, 3 }
		Dim colIndex = { "A", "B" }
		Dim data = New Double(, ) {
			{ 1.0, 3.5 },
			{ 2.0, 4.2 },
			{ 3.0, 5.1 }
		}
		Dim dataFrame = Frame.FromArray2D(data).IndexRowsWith(rowIndex).IndexColumnsWith(colIndex)
		Console.WriteLine("Data Frame:")
		Console.WriteLine(dataFrame)
	End Sub
End Class
$vbLabelText   $csharpLabel

在這個範例中,您建立了一個具有整數行鍵和雙值的序列。 然後,您使用雙值的 2D 陣列建立資料框架。 您以整數為行索引,以字串為列索引。

實現 Deedle C&num 的功能;

處理缺失值

處理遺漏值在資料處理中至關重要。 Deedle 提供強大的遺失資料支援。 您可以建立有缺失值的序列,並執行處理這些缺失值的作業。

using System;
using Deedle;

class Program
{
    static void Main()
    {
        // Creating a series with nullable doubles to represent missing values
        var series = new Series<int, double?>(
            new[] { 75, 8, 47, 5 },
            new double?[] { 75.0, null, 47.0, 5.0 }
        );
        Console.WriteLine("Original Series with Missing Values:");
        Console.WriteLine(series);

        // Fill missing values with a specified value (e.g., 0.0)
        var filledSeries = series.FillMissing(0.0);
        Console.WriteLine("Series after Filling Missing Values:");
        Console.WriteLine(filledSeries);
    }
}
using System;
using Deedle;

class Program
{
    static void Main()
    {
        // Creating a series with nullable doubles to represent missing values
        var series = new Series<int, double?>(
            new[] { 75, 8, 47, 5 },
            new double?[] { 75.0, null, 47.0, 5.0 }
        );
        Console.WriteLine("Original Series with Missing Values:");
        Console.WriteLine(series);

        // Fill missing values with a specified value (e.g., 0.0)
        var filledSeries = series.FillMissing(0.0);
        Console.WriteLine("Series after Filling Missing Values:");
        Console.WriteLine(filledSeries);
    }
}
Imports System
Imports Deedle

Friend Class Program
	Shared Sub Main()
		' Creating a series with nullable doubles to represent missing values
		Dim series As New Series(Of Integer, Double?)( { 75, 8, 47, 5 }, New Double?() { 75.0, Nothing, 47.0, 5.0 })
		Console.WriteLine("Original Series with Missing Values:")
		Console.WriteLine(series)

		' Fill missing values with a specified value (e.g., 0.0)
		Dim filledSeries = series.FillMissing(0.0)
		Console.WriteLine("Series after Filling Missing Values:")
		Console.WriteLine(filledSeries)
	End Sub
End Class
$vbLabelText   $csharpLabel

本範例建立一個有缺失值的序列,並將其填入指定值。 您也可以使用靜態成員方法,例如 ofOptionalObservationsofValues 來處理更複雜的情境。

資料處理

Deedle 可讓您執行各種資料處理工作。 您可以過濾、轉換和匯集資料框架中的資料。

using System;
using Deedle;

class Program
{
    static void Main()
    {
        // Creating a data frame
        var rowIndex = new[] { 1, 2, 3 };
        var colIndex = new[] { "A", "B" };
        var data = new double[,] { { 1.0, 3.5 }, { 2.0, 4.2 }, { 3.0, 5.1 } };
        var dataFrame = Frame.FromArray2D(data)
                             .IndexRowsWith(rowIndex)
                             .IndexColumnsWith(colIndex);
        Console.WriteLine("Original Data Frame:");
        Console.WriteLine(dataFrame);

        // Filter rows where column 'A' is greater than 1.5
        var filteredFrame = dataFrame.Where(row => row.Value.GetAs<double>("A") > 1.5);
        Console.WriteLine("Filtered Data Frame:");
        Console.WriteLine(filteredFrame);

        // Add a new column 'C' which is the sum of columns 'A' and 'B'
        dataFrame.AddColumn("C", dataFrame["A"] + dataFrame["B"]);
        Console.WriteLine("Transformed Data Frame with New Column 'C':");
        Console.WriteLine(dataFrame);
    }
}
using System;
using Deedle;

class Program
{
    static void Main()
    {
        // Creating a data frame
        var rowIndex = new[] { 1, 2, 3 };
        var colIndex = new[] { "A", "B" };
        var data = new double[,] { { 1.0, 3.5 }, { 2.0, 4.2 }, { 3.0, 5.1 } };
        var dataFrame = Frame.FromArray2D(data)
                             .IndexRowsWith(rowIndex)
                             .IndexColumnsWith(colIndex);
        Console.WriteLine("Original Data Frame:");
        Console.WriteLine(dataFrame);

        // Filter rows where column 'A' is greater than 1.5
        var filteredFrame = dataFrame.Where(row => row.Value.GetAs<double>("A") > 1.5);
        Console.WriteLine("Filtered Data Frame:");
        Console.WriteLine(filteredFrame);

        // Add a new column 'C' which is the sum of columns 'A' and 'B'
        dataFrame.AddColumn("C", dataFrame["A"] + dataFrame["B"]);
        Console.WriteLine("Transformed Data Frame with New Column 'C':");
        Console.WriteLine(dataFrame);
    }
}
Imports System
Imports Deedle

Friend Class Program
	Shared Sub Main()
		' Creating a data frame
		Dim rowIndex = { 1, 2, 3 }
		Dim colIndex = { "A", "B" }
		Dim data = New Double(, ) {
			{ 1.0, 3.5 },
			{ 2.0, 4.2 },
			{ 3.0, 5.1 }
		}
		Dim dataFrame = Frame.FromArray2D(data).IndexRowsWith(rowIndex).IndexColumnsWith(colIndex)
		Console.WriteLine("Original Data Frame:")
		Console.WriteLine(dataFrame)

		' Filter rows where column 'A' is greater than 1.5
		Dim filteredFrame = dataFrame.Where(Function(row) row.Value.GetAs(Of Double)("A") > 1.5)
		Console.WriteLine("Filtered Data Frame:")
		Console.WriteLine(filteredFrame)

		' Add a new column 'C' which is the sum of columns 'A' and 'B'
		dataFrame.AddColumn("C", dataFrame("A") + dataFrame("B"))
		Console.WriteLine("Transformed Data Frame with New Column 'C':")
		Console.WriteLine(dataFrame)
	End Sub
End Class
$vbLabelText   $csharpLabel

本範例示範根據條件篩選行,並新增一列已轉換的資料。 Deedle 實作了標準的框架延伸方法,讓資料分析變得簡單直接。

統計函數

Deedle 提供標準的統計功能來分析資料。 使用統計功能,您可以計算平均值、標準差和其他統計量度。

using System;
using Deedle;

class Program
{
    static void Main()
    {
        // Creating a series with integer keys and double values
        var series = new Series<int, double>(
            new[] { 1, 2, 3, 4 },
            new[] { 1.0, 2.0, 3.0, 4.0 }
        );
        Console.WriteLine("Series:");
        Console.WriteLine(series);

        // Calculate the mean of the series
        var mean = series.Mean();
        Console.WriteLine($"Mean: {mean}");

        // Calculate the standard deviation of the series
        var stddev = series.StdDev();
        Console.WriteLine($"Standard Deviation: {stddev}");
    }
}
using System;
using Deedle;

class Program
{
    static void Main()
    {
        // Creating a series with integer keys and double values
        var series = new Series<int, double>(
            new[] { 1, 2, 3, 4 },
            new[] { 1.0, 2.0, 3.0, 4.0 }
        );
        Console.WriteLine("Series:");
        Console.WriteLine(series);

        // Calculate the mean of the series
        var mean = series.Mean();
        Console.WriteLine($"Mean: {mean}");

        // Calculate the standard deviation of the series
        var stddev = series.StdDev();
        Console.WriteLine($"Standard Deviation: {stddev}");
    }
}
Imports System
Imports Deedle

Friend Class Program
	Shared Sub Main()
		' Creating a series with integer keys and double values
		Dim series As New Series(Of Integer, Double)( { 1, 2, 3, 4 }, { 1.0, 2.0, 3.0, 4.0 })
		Console.WriteLine("Series:")
		Console.WriteLine(series)

		' Calculate the mean of the series
		Dim mean = series.Mean()
		Console.WriteLine($"Mean: {mean}")

		' Calculate the standard deviation of the series
		Dim stddev = series.StdDev()
		Console.WriteLine($"Standard Deviation: {stddev}")
	End Sub
End Class
$vbLabelText   $csharpLabel

此 Deedle 程式碼範例實作了標準統計函數 Mean()StdDev() 以分別計算序列的平均值和標準差。

從 CSV 建立資料框架

Deedle 可讓您輕鬆地從 CSV 檔案建立資料框架。 這對於載入和分析結構化資料很有幫助。

using System;
using Deedle;

class Program
{
    static void Main()
    {
        // Load a data frame from a CSV file
        var dataFrame = Frame.ReadCsv("data.csv");
        Console.WriteLine("Data Frame from CSV:");
        Console.WriteLine(dataFrame);

        // Aggregate rows by a specified column and compute sum
        var summary = dataFrame.AggregateRowsBy<string, double>(
            new[] { "ColumnName" }, // rowKeys
            null, // columnKeys, you can pass null if not required
            v => v.Sum() // aggFunc
        );
        Console.WriteLine("Summary of Data Frame:");
        Console.WriteLine(summary);
    }
}
using System;
using Deedle;

class Program
{
    static void Main()
    {
        // Load a data frame from a CSV file
        var dataFrame = Frame.ReadCsv("data.csv");
        Console.WriteLine("Data Frame from CSV:");
        Console.WriteLine(dataFrame);

        // Aggregate rows by a specified column and compute sum
        var summary = dataFrame.AggregateRowsBy<string, double>(
            new[] { "ColumnName" }, // rowKeys
            null, // columnKeys, you can pass null if not required
            v => v.Sum() // aggFunc
        );
        Console.WriteLine("Summary of Data Frame:");
        Console.WriteLine(summary);
    }
}
Imports System
Imports Deedle

Friend Class Program
	Shared Sub Main()
		' Load a data frame from a CSV file
		Dim dataFrame = Frame.ReadCsv("data.csv")
		Console.WriteLine("Data Frame from CSV:")
		Console.WriteLine(dataFrame)

		' Aggregate rows by a specified column and compute sum
		Dim summary = dataFrame.AggregateRowsBy(Of String, Double)( { "ColumnName" }, Nothing, Function(v) v.Sum())
		Console.WriteLine("Summary of Data Frame:")
		Console.WriteLine(summary)
	End Sub
End Class
$vbLabelText   $csharpLabel

本範例將一個 CSV 檔案讀入資料框架,並對資料執行摘要作業。

將 Deedle 與 IronPDF 整合。

IronPDF 簡介

Deedle C# (How It Works For Developers):圖 1 - IronPDF for .NET:C# PDF Library

IronPDF 是一個功能強大的函式庫,可讓您在 .NET 應用程式中建立、處理 PDF 檔案,並從 PDF 檔案中擷取內容。 它具有高度的通用性,可以處理各種 PDF 相關工作,例如從 HTML 產生 PDF、擷取文字、合併 PDF 等。 將 IronPDF 與 Deedle 整合,對於需要從資料框架產生動態報告的資料分析和報告情境特別有用。

安裝 IronPdf

若要使用 NuGet Package Manager Console 在您的 .NET 專案中安裝 IronPDF,請新增下列指令:

Install-Package IronPdf

或者您也可以使用 NuGet Package Manager for Solutions 安裝 IronPDF。 在搜尋結果中尋找 IronPDF 在 NuGet 上的套件,選取該套件,然後按一下"安裝"按鈕。 Visual Studio 會自動處理下載與安裝。

安裝完成後,IronPdf 即可用於您的專案。

將 IronPDF 與 Deedle 合併的使用案例

假設您有一個資料框架,其中包含一些您想要在 PDF 報告中呈現的統計資料。 Deedle 可以處理資料處理與分析部分,而 IronPDF 則可用來格式化並產生最終報告。 例如,您可以產生包含表格、圖表和描述性統計資料的 PDF,讓資料更容易分享和呈現。

使用個案的程式碼範例

以下是一個完整的程式碼範例,示範如何將 Deedle 與 IronPDF 整合。 我們將從 Deedle 資料框架建立一個簡單的報告,並使用 IronPDF 產生 PDF。

using System;
using System.Linq;
using Deedle;
using IronPdf;

namespace DeedleIronPDFIntegration
{
    class Program
    {
        static void Main(string[] args)
        {
            // Set IronPDF license key
            IronPdf.License.LicenseKey = "License-Key";

            // Create a sample data frame from in-memory records
            var data = new[]
            {
                new { Name = "Robert", Age = 30, City = "New York" },
                new { Name = "Johnny", Age = 25, City = "San Francisco" },
                new { Name = "Charlie", Age = 35, City = "Los Angeles" }
            };
            var frame = Frame.FromRecords(data);

            // Convert the data frame to an HTML table format
            var htmlTable = "<table border='1' cellpadding='5' cellspacing='0'><thead><tr><th>Name</th><th>Age</th><th>City</th></tr></thead><tbody>" +
                            string.Join("", frame.Rows.Select(row =>
                                $"<tr><td>{row.Value.GetAs<string>("Name")}</td><td>{row.Value.GetAs<int>("Age")}</td><td>{row.Value.GetAs<string>("City")}</td></tr>")
                            ) +
                            "</tbody></table>";

            // Wrap the HTML table in basic HTML structure with CSS styling
            var htmlContent = $@"
            <html>
            <head>
                <style>
                    table {{
                        width: 100%;
                        border-collapse: collapse;
                    }}
                    th, td {{
                        border: 1px solid black;
                        padding: 8px;
                        text-align: left;
                    }}
                    th {{
                        background-color: #f2f2f2;
                    }}
                </style>
            </head>
            <body>
                {htmlTable}
            </body>
            </html>";

            // Create a PDF from the HTML content
            var renderer = new ChromePdfRenderer();
            var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);

            // Save the generated PDF to a file
            pdfDocument.SaveAs("f:\\DeedleReport.pdf");
            Console.WriteLine("PDF report created successfully!");
        }
    }
}
using System;
using System.Linq;
using Deedle;
using IronPdf;

namespace DeedleIronPDFIntegration
{
    class Program
    {
        static void Main(string[] args)
        {
            // Set IronPDF license key
            IronPdf.License.LicenseKey = "License-Key";

            // Create a sample data frame from in-memory records
            var data = new[]
            {
                new { Name = "Robert", Age = 30, City = "New York" },
                new { Name = "Johnny", Age = 25, City = "San Francisco" },
                new { Name = "Charlie", Age = 35, City = "Los Angeles" }
            };
            var frame = Frame.FromRecords(data);

            // Convert the data frame to an HTML table format
            var htmlTable = "<table border='1' cellpadding='5' cellspacing='0'><thead><tr><th>Name</th><th>Age</th><th>City</th></tr></thead><tbody>" +
                            string.Join("", frame.Rows.Select(row =>
                                $"<tr><td>{row.Value.GetAs<string>("Name")}</td><td>{row.Value.GetAs<int>("Age")}</td><td>{row.Value.GetAs<string>("City")}</td></tr>")
                            ) +
                            "</tbody></table>";

            // Wrap the HTML table in basic HTML structure with CSS styling
            var htmlContent = $@"
            <html>
            <head>
                <style>
                    table {{
                        width: 100%;
                        border-collapse: collapse;
                    }}
                    th, td {{
                        border: 1px solid black;
                        padding: 8px;
                        text-align: left;
                    }}
                    th {{
                        background-color: #f2f2f2;
                    }}
                </style>
            </head>
            <body>
                {htmlTable}
            </body>
            </html>";

            // Create a PDF from the HTML content
            var renderer = new ChromePdfRenderer();
            var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);

            // Save the generated PDF to a file
            pdfDocument.SaveAs("f:\\DeedleReport.pdf");
            Console.WriteLine("PDF report created successfully!");
        }
    }
}
Imports System
Imports System.Linq
Imports Deedle
Imports IronPdf

Namespace DeedleIronPDFIntegration
	Friend Class Program
		Shared Sub Main(ByVal args() As String)
			' Set IronPDF license key
			IronPdf.License.LicenseKey = "License-Key"

			' Create a sample data frame from in-memory records
			Dim data = {
				New With {
					Key .Name = "Robert",
					Key .Age = 30,
					Key .City = "New York"
				},
				New With {
					Key .Name = "Johnny",
					Key .Age = 25,
					Key .City = "San Francisco"
				},
				New With {
					Key .Name = "Charlie",
					Key .Age = 35,
					Key .City = "Los Angeles"
				}
			}
			Dim frame = Frame.FromRecords(data)

			' Convert the data frame to an HTML table format
			Dim htmlTable = "<table border='1' cellpadding='5' cellspacing='0'><thead><tr><th>Name</th><th>Age</th><th>City</th></tr></thead><tbody>" & String.Join("", frame.Rows.Select(Function(row) $"<tr><td>{row.Value.GetAs(Of String)("Name")}</td><td>{row.Value.GetAs(Of Integer)("Age")}</td><td>{row.Value.GetAs(Of String)("City")}</td></tr>")) & "</tbody></table>"

			' Wrap the HTML table in basic HTML structure with CSS styling
			Dim htmlContent = $"
            <html>
            <head>
                <style>
                    table {{
                        width: 100%;
                        border-collapse: collapse;
                    }}
                    th, td {{
                        border: 1px solid black;
                        padding: 8px;
                        text-align: left;
                    }}
                    th {{
                        background-color: #f2f2f2;
                    }}
                </style>
            </head>
            <body>
                {htmlTable}
            </body>
            </html>"

			' Create a PDF from the HTML content
			Dim renderer = New ChromePdfRenderer()
			Dim pdfDocument = renderer.RenderHtmlAsPdf(htmlContent)

			' Save the generated PDF to a file
			pdfDocument.SaveAs("f:\DeedleReport.pdf")
			Console.WriteLine("PDF report created successfully!")
		End Sub
	End Class
End Namespace
$vbLabelText   $csharpLabel

輸出

Deedle C# (How It Works For Developers):圖 2 - 使用 IronPDF 和 Deedle 產生的輸出 PDF

就是這樣! 您剛剛建立了一個功能完整的應用程式,它可以從 Deedle 取得複雜的資料,並使用 IronPDF 的 .NET PDF Library 將它轉換成格式化的 PDF 報表。 這是以專業格式傳達資料分析結果的有效方式。

結論

在本文中,我們探討了如何將 DeedleIronPDF 整合,從資料框架建立動態 PDF 報表。 使用 Deedle,您可以有效地操作和分析資料,而 IronPDF 則處理最終 PDF 文件的建立和格式化。 這樣的組合讓您可以輕鬆產生專業報告,自動化從資料分析到簡報的流程。

IronPdf 提供詳細的 功能與使用說明文件,以及各種 IronPDF 程式碼範例,引導您如何開始使用並有效地使用其豐富的功能。

探索 IronPDF 授權選項,從 $799 開始。 試試看,看看它能如何增強您的報告能力。

常見問題解答

Deedle C# 用來做什麼?

Deedle C# 用於資料處理和分析,提供有效處理結構化資料框架和序列的工具。它在資料科學應用程式中特別有用,因為它具有管理遺失資料、對齊資料和套用函數的能力。

如何在 .NET 中整合 Deedle 與 PDF 生成?

您可以將 Deedle 與 IronPDF 整合,從資料框架產生動態 PDF 報告。Deedle 負責資料處理,而 IronPDF 則用來格式化並產生最終的 PDF 報告,其中包含表格、圖表和統計資料。

如何在 .NET 專案中安裝 Deedle?

要在 .NET 專案中安裝 Deedle,您可以使用 Visual Studio 建立一個新的 C# Console Application,然後使用 Install-Package Deedle 指令安裝 Deedle NuGet 套件,並使用 using Deedle; 將其包含在專案中。

使用 Deedle 從 CSV 檔案建立資料框架的流程為何?

要使用 Deedle 從 CSV 檔案建立資料框架,您可以使用 Frame.ReadCsv() 方法。這可讓您從 CSV 檔案載入結構化資料至資料框架,以便進行分析和操作。

Deedle 可以處理資料框架中的缺失值嗎?

是的,Deedle 提供強大的支援來處理資料框架中的遺失值。您可以使用類似 FillMissing() 之類的函式來管理和適當地填入序列或資料框架中的遺漏資料。

如何使用 Deedle 執行統計分析?

Deedle 提供內建的統計功能,可讓您執行資料分析,包括直接在資料框架和序列上計算平均值、標準差和其他統計指標。

如何在 .NET 中從資料框架產生 PDF 報告?

若要從 .NET 中的資料框架產生 PDF 報告,您可以使用 Deedle 來處理資料,並使用 IronPDF 來產生 PDF。使用 Deedle 處理資料後,再使用 IronPDF 將資料格式化並輸出為專業風格的 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 技術的創新,同時指導新一代技術領袖。