跳至頁尾內容
產品對比

IronPDF 與 ComPDFKit 的比較

IronPDF 在 C# PDF 生成方面優於 ComPDFKit,它具有基於 Chromium 的原生 HTML 渲染、完整的 Bootstrap 支援、完整的文檔和卓越的 .NET 集成,而 ComPDFKit 需要外部 API 呼叫進行 HTML 轉換,並且缺乏高級 CSS 框架兼容性。

PDF ,即便攜式文件格式(Portable Document Format)的縮寫,是由 Adobe 創建的一種文件類型,旨在確保文件共享的統一性。 這種格式可以在各種裝置和作業系統上保持佈局、文字和影像的一致性。 PDF 檔案具有安全性高、互動功能強、檔案體積小等優點,是分發文件而不更改內容的理想選擇。

對於使用 C# 的開發人員來說,PDF 庫提供了處理 PDF 文件的解決方案。 這些庫支援文件創建、內容修改以及文字和圖像提取。 它們支援表單處理、數位簽章和跨平台相容性等功能。 這些庫旨在提高效能,可實現高效的 PDF 處理。

本文比較了兩個 C# PDF 函式庫: IronPDFComPDFKit 。 此比較涵蓋特性、功能、程式碼範例和許可。 透過考察這些方面,開發人員可以確定哪個程式庫最適合他們的 PDF 相關專案。

快速對比概覽

在進行詳細分析之前,先來看看主要功能的完整比較:

特徵IronPDFComPDFKit
HTML 轉 PDF原生 Chromium 引擎需要外部 API
Bootstrap 支持完全支援 CSS3/FlexboxCSS框架支援有限
安裝單一 NuGet 套件需要多個包裹
文件內容豐富,包含 500 多個範例。基本文檔
支援24/5 全天候工程支持標準電子郵件支援
定價模式永久許可,起價 749 美元基於報價的定價
跨平台Windows、Linux、macOS、Docker、AzureWindows、Linux、macOS
表現優化異步/多線程標準同步處理
企業功能PDF/A、PDF/UA、HSM 簽名基本 PDF/A 支持
學習曲線極簡直直觀的 API中等至複雜的 API 結構
  1. PDF 檢視: ComPDFKit 提供了一個強大的 PDF 檢視器,使用戶能夠高保真地檢視 PDF 文件。 此檢視器支援流暢的滾動、縮放和導航,確保流暢的用戶體驗。 2.註:此函式庫包含用於順利整合 PDF 註解的工具。 使用者可以高亮顯示文字、新增評論和建立各種類型的註釋,這對於協作工作流程至關重要。 3.表單處理:此程式庫為互動式表單提供了廣泛的支援。 開發人員可以建立、填寫和提取 PDF 表單中的數據,使其成為需要表單處理的應用程式的理想選擇。
  2. PDF 編輯: ComPDFKit 提供強大的 PDF 編輯功能,包括修改 PDF 文件中的文字、圖像和其他內容。 此功能適用於需要更新或自訂現有 PDF 文件的應用程式。 5.轉換:此程式庫支援將 PDF 檔案轉換為 Word、Excel、PowerPoint 和圖像等各種格式,反之亦然。 這種靈活性對於需要將 PDF 內容轉換為不同用途的應用程式至關重要。 6.安全性: ComPDFKit 包含強大的安全功能,例如加密和權限管理。 開發人員可以對 PDF 文件進行安全保護,以防止敏感資訊被未經授權的存取。 7.光學字元辨識 (OCR):此程式庫包含 OCR 功能,可將掃描文件轉換為可編輯和可搜尋的 PDF。 此功能對於將紙本文件數位化並使其能夠以電子方式存取至關重要。

ComPDFKit 主頁展示了其面向開發人員的完整 PDF SDK 解決方案,其中包含註釋功能的螢幕截圖和程式碼範例,並演示了 PDF 操作功能。

ComPDFKit PDF SDK 是一款可靠的 C# PDF SDK,可讓開發人員將完整的 PDF 功能整合到他們的應用程式中。 該程式庫支援以程式設計方式處理 PDF 文件所需的各種 PDF 功能。 它可在各種環境下使用,包括網頁、桌面和行動平台,使其成為從事跨平台專案的開發人員的多功能工具。 範例解決方案包含多個功能,開發人員可以選擇並進行測試。

ComPDFKit 提供哪些主要功能?

核心能力:

  • PDF 檢視:提供高效率的檢視器,具備流暢的捲動、縮放和導航功能 -:包含用於高亮文字、新增註解和建立各種註解類型的工具 -表單處理:支援建立、填寫和提取互動式 PDF 表單中的數據
  • PDF 編輯:允許修改現有 PDF 文件中的文字、圖像和其他內容。 -格式轉換:支援將 PDF 檔案轉換為 Word、Excel、 PowerPoint和圖片格式 -安全性:包括加密和權限管理,以保護敏感資訊 -光學字元辨識 (OCR) :將掃描文件轉換為可編輯和可搜尋的 PDF 文件

為什麼應該考慮 ComPDFKit 的架構?

  1. HTML 轉 PDF: IronPDF 擅長將 HTML、CSS 和 JavaScript 內容轉換為高品質的 PDF 文件。 此功能支援將 HTML 字串轉換為 PDF 、URL、ASPX Web 表單和 MVC 視圖,使其成為各種基於 Web 的內容的靈活解決方案。
  2. PDF 編輯:此程式庫提供廣泛的編輯功能,包括新增、複製和刪除頁面,合併和分割 PDF,以及操作文字和圖像。 開發人員還可以為 PDF 文件添加頁首、頁尾、浮水印和數位簽章。 3.表單處理: IronPDF 支援智慧表單建立和以程式方式填入 PDF 表單。 對於需要動態產生表單和從使用者提交的表單中提取資料的應用程式來說,此功能至關重要。 4.安全功能: IronPDF 提供強大的安全選項,例如設定密碼和權限、加密文件以及新增數位簽章。 這些功能可確保 PDF 文件中的敏感資訊免受未經授權的存取。
  3. OCR 和資料擷取:此庫包含光學字元辨識 (OCR) 功能,可將掃描的文件轉換為可編輯和可搜尋的 PDF。 此外,IronPDF 還可以從現有的 PDF 文件中提取文字、圖像和其他數據,從而方便內容的重複使用和分析。 6.影像轉換: IronPDF 支援將各種影像格式(包括 JPG、PNG、GIF、BMP 和 SVG)轉換為 PDF 文件。 它還提供了將 PDF 頁面渲染為圖像的功能,這對於需要 PDF 內容視覺預覽的應用程式非常有用。 7.跨平台相容性: IronPDF 與多個 .NET 平台相容,包括 .NET Core、.NET Framework 和 .NET Standard。 它支援在 Windows、Linux、macOS 和 Azure 上部署,使其成為在各種環境下工作的開發人員的多功能選擇。 8.效能最佳化:此函式庫設計用於實現高效能,支援多執行緒和非同步操作。 這樣可以確保即使在高負載的應用程式中,PDF 處理任務也能有效執行。 9.全面的文件和支援: IronPDF 提供詳細的文件和大量的程式碼範例,使開發人員能夠輕鬆上手並實現其功能。 此外,它還提供技術支持,以協助解決開發過程中可能出現的任何問題。

對於需要可靠註釋功能的企業應用程序,ComPDFKit 提供基本功能。 進階表單建立功能可能需要額外的程式設計工作。 雖然可以滿足 OCR 任務的需求,但對於需要高階文字辨識功能的開發人員來說, IronOCR等替代方案可以獲得更高的準確率。

ComPDFKit有哪些限制?

儘管ComPDFKit功能齊全,但它在企業開發方面仍存在一些限制:

  • HTML渲染:不支援原生HTML轉PDF轉換,需要呼叫外部API。
  • CSS 支援:對現代 CSS 框架的兼容性有限 效能:缺乏內建的非同步/多執行緒優化 -文件:僅提供基本範例,缺乏完整的故障排除指南 -整合複雜性:需要多個軟體包才能實現全部功能

什麼是 IronPDF 庫?

IronPDF 主頁展示了 C# PDF 庫介面,並提供了 HTML 到 PDF 轉換的程式碼範例,重點介紹了超過 1000 萬次的下載量以及財富 500 強企業中的企業級應用。

IronPDF是一個功能強大的 .NET PDF 程式庫,可讓開發人員使用 C# 建立、編輯和管理 PDF 文件。 它透過簡化的 API 提供完整的 PDF 功能。該庫擅長從 HTML、CSS、JavaScript 和各種圖像格式渲染生成 PDF 文件。 這使其成為開發人員將可靠的 PDF 功能整合到 .NET 應用程式的理想工具。

IronPDF 提供哪些主要功能?

進階功能:

為什麼選擇 IronPDF 用來生產系統?

IronPDF 的架構優先考慮生產環境的效能和可靠性:

IronPDF 具備哪些企業級功能?

IronPDF 的獨特之處在於其以生產為中心的功能:

-部署靈活性:原生支援Docker 容器AWS Lambda -合規標準:內建PDF/UA 支持,符合無障礙要求 -進階安全功能:具備清除惡意內容的清理功能 -效能工具線性化以加快網頁瀏覽速度 版本控制:文件追蹤的修訂歷史管理

如何建立一個新的 Visual Studio 專案?

在探索編碼範例之前,開發人員應該建立一個新的 Visual Studio 專案。 本指南概述如何在 Visual Studio 中設定 C# 控制台應用程式。

為什麼需要安裝 Visual Studio?

Visual Studio 為 C# 專案提供了改進的 IDE。 請從Visual Studio 下載頁面下載。 此 IDE 提供整合偵錯、 IntelliSense和套件管理功能,這些功能對於 PDF 開發至關重要。

哪種專案配置效果最佳?

安裝完成後,開啟 Visual Studio。 使用 Visual Studio Community 時,您可以選擇登入或不登入繼續。 請依照以下設定步驟操作:

  1. 點選"建立新項目"或導覽至"檔案">"新建">"項目"。

    Visual Studio IDE 顯示"檔案"功能表已打開,其中包含建立新專案、開啟檔案和管理儲存庫的選項,其中"新專案"選項已被反白顯示。

  2. 搜尋"控制台"應用程序,然後從搜尋結果中選擇"控制台應用程式"。

    Visual Studio 的"建立新專案"對話方塊顯示了控制台應用程式範本選擇,其中突出顯示了 C#、Linux、macOS、Windows 和 Console 標籤,以便進行跨平台開發。

1.開啟 NuGet 套件管理員:在解決方案資源管理器中,以滑鼠右鍵按一下"參考",然後選擇"管理 NuGet 套件"。 2.搜尋與安裝:在 NuGet 套件管理員中搜尋"ComPDFKit"。 選擇合適的軟體包(例如, ComPDFKit.NetFrameworkComPDFKit.Conversion.NetFramework ),然後按一下"安裝"。

哪些是必備的項目設定?

3.驗證安裝:確保該軟體包出現在解決方案資源管理器的"引用"下。

-平台目標:設定為 x64 以進行大型文件處理 輸出類型:用於測試的控制台應用程序,用於生產的類別庫 -框架版本:建議使用 .NET 6+ 以獲得最佳效能

  • NuGet 套件管理:啟用套件還原以進行依賴關係管理

1.下載軟體包:從 ComPDFKit 官方網站取得ComPDFKit.NetFramework.nupkg檔案。 2.設定 NuGet 來源:在專案目錄中建立或編輯nuget.config文件,以包含本機套件的路徑。

將 IronPDF 整合到專案中可以透過多種方法實現。 有關完整的安裝概述,請參閱官方文件。 該庫支援多種安裝方法,以適應不同的開發工作流程。

3.安裝本機套件:在 Visual Studio 中重新開啟您的解決方案,前往"管理 NuGet 套件",然後選擇您的本機套件來源。 從本機來源安裝 ComPDFKit 軟體套件。

  1. Visual Studio NuGet 套件管理員:右鍵單擊解決方案中的"依賴項",然後選擇"管理 NuGet 套件"。在"瀏覽"標籤中,搜尋"IronPDF"並安裝最新版本。 有關NuGet 的進階安裝選項,請參閱詳細指南。

1.取得許可證:聯絡 ComPDFKit 團隊以取得試用許可證或完整許可證。 2.在程式碼中應用許可證:

2.套件管理器控制台:透過"工具">"NuGet 套件管理員">"套件管理員控制台"使用 NuGet 套件管理器控制台。 執行以下命令:

___CODEBLOCK_0___

它可以透過命令列介面快速安裝庫。

![套件管理器控制台視窗顯示在 C# 測試板專案中安裝 IronPdf NuGet 套件版本 2024.5.2,並確認安裝成功。](/static-assets/pdf/blog/compdfkit-pdf-sdk/compdfkit-pdf-sdk-6.webp)

3.直接下載方法:造訪IronPDF NuGet 套件頁面。 下載軟體包文件,雙擊將其新增至專案中,然後重新載入解決方案。

4.手動安裝:直接下載最新版本的 IronPDF 。 請按照提供的說明進行手動 Visual Studio 整合。 有關 Windows 特定安裝,請參閱Windows 安裝程式指南

為什麼要選擇特定的安裝方法?

不同的安裝方法適用於不同的場景:

  • NuGet 套件管理器:最適合有網路連線的 Visual Studio 用戶 -套件管理器控制台:非常適合腳本化部署和 CI/CD 管線 -直接下載:適用於離線開發環境 -手動安裝:自訂部署配置需要手動安裝

這些方法能夠有效地將 IronPDF 整合到 .NET 專案中。 如需快速入門說明,請造訪入門指南。平台特定的指南涵蓋F# 整合VB.NET 使用

如何安裝 ComPDFKit C#?

將 ComPDFKit 新增至專案中主要有兩種方法:NuGet 套件管理器或本機套件安裝。 與 IronPDF 的單包安裝方式相比,此安裝流程需要更多步驟。

何時應該使用 NuGet 套件管理器?

1.開啟 NuGet 套件管理員:在解決方案資源管理器中以滑鼠右鍵按一下"參考",然後選擇"管理 NuGet 套件"。 2.搜尋並安裝:在軟體包管理器中搜尋"ComPDFKit"。 選擇合適的軟體包( NetFrameworkNetFramework ),然後按一下"安裝"。

NuGet 套件管理器介面顯示 ComPDFKit 搜尋結果,其中列出了三個套件:ComPDFKit.NetFramework、ComPDFKit.Conversion.NetFramework 和 compdfkit-api-dotnet,適用於不同的用例。

3.驗證安裝:確保程式包出現在解決方案資源管理器的"參考"下。 要實現全部功能,可能需要多個軟體包。

何時應該使用本地軟體包?

本機軟體套件安裝適用於受限環境:

1.下載軟體包:從 ComPDFKit 官方網站取得NetFramework 。 2.設定 NuGet 來源:在專案目錄中建立或編輯nuget.config ,以包含本機套件路徑。

___CODEBLOCK_1___

3.安裝本機套件:重新開啟解決方案,導覽至"管理 NuGet 套件",選擇本機套件來源,然後安裝 ComPDFKit。

如何應用我的許可證密鑰?

不同庫的許可證實現方式有顯著差異:

1.取得許可證:聯絡 ComPDFKit 以取得試用版或完整許可證。 2.在程式碼中應用許可證

___CODEBLOCK_2___

新增此方法來驗證許可證。 有關 IronPDF 更簡單的許可實現,請參閱[許可密鑰文件](https://ironpdf.com/how-to/license-keys/)。 IronPDF 只需設定`License.LicenseKey`屬性,即可簡化許可流程。

如何將HTML轉換為PDF?

將 HTML 轉換為 PDF是根據 Web 內容產生報告、發票或文件的常見需求。 IronPDF 和 ComPDFKit 都提供了解決方案,但它們的方法卻大不相同。 IronPDF 提供原生轉換功能,而 ComPDFKit 需要呼叫外部 API。

IronPDF如何處理HTML到PDF的轉換?

IronPDF 使用基於 Chrome 的渲染引擎,以實現高品質的輸出。 該過程可將 HTML、CSS 和 JavaScript 準確地渲染成 PDF 格式。 該庫支援HTML 字串HTML 檔案URL

HTML字串轉PDF的基本範例:

using IronPdf;
using System;

class Program
{
    static void Main()
    {
        // Define your HTML string
        string htmlString = @"
            <h1>Hello, IronPDF!</h1>
            <p>This is a simple PDF created from an HTML string.</p>";

        var renderer = new ChromePdfRenderer();
        // Convert the HTML string to a PDF document
        PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlString);
        // Save the PDF document to a file
        string outputPath = "sample.pdf";
        pdf.SaveAs(outputPath);
        Console.WriteLine($"PDF created successfully and saved to {outputPath}");
    }
}
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        // Define your HTML string
        string htmlString = @"
            <h1>Hello, IronPDF!</h1>
            <p>This is a simple PDF created from an HTML string.</p>";

        var renderer = new ChromePdfRenderer();
        // Convert the HTML string to a PDF document
        PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlString);
        // Save the PDF document to a file
        string outputPath = "sample.pdf";
        pdf.SaveAs(outputPath);
        Console.WriteLine($"PDF created successfully and saved to {outputPath}");
    }
}
$vbLabelText   $csharpLabel

IronPDF 輸出顯示一個簡單的 PDF 文件,標題為"Hello, IronPDF!",並附有描述性文本,演示了基本的 HTML 到 PDF 轉換功能。

IronPDF 也支援直接轉換 HTML 文件,並支援 CSS 和 JavaScript 嵌入:

using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        // Convert the HTML file to a PDF document
        PdfDocument pdf = renderer.RenderHtmlFileAsPdf("index.html");
        // Save the PDF document to a file
        string outputPath = "HTML File.pdf";
        pdf.SaveAs(outputPath);
        Console.WriteLine($"PDF created successfully and saved to {outputPath}");
    }
}
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        // Convert the HTML file to a PDF document
        PdfDocument pdf = renderer.RenderHtmlFileAsPdf("index.html");
        // Save the PDF document to a file
        string outputPath = "HTML File.pdf";
        pdf.SaveAs(outputPath);
        Console.WriteLine($"PDF created successfully and saved to {outputPath}");
    }
}
$vbLabelText   $csharpLabel

範例發票 #123 顯示網站設計服務總計 385 美元,以 PDF 文件形式呈現,專業格式和佈局從 HTML 來源保留。

IronPDF 支援哪些進階 HTML 功能?

IronPDF 的 Chromium 引擎能夠處理複雜的 Web 技術:

ComPDFKit如何處理HTML到PDF的轉換?

1.傳送 HTML 內容:向 ComPDFKit API 端點建立 HTTP POST 請求,並附上您的 HTML 內容。 2.接收 PDF 輸出: API 處理 HTML 內容並傳回產生的 PDF 檔案。

若要使用 ComPDFKit 的 HTML 轉 PDF API:

1.傳送 HTML 內容:建立一個包含 HTML 內容的 HTTP POST 請求 2.接收 PDF 輸出:API 處理內容並傳回產生的 PDF 檔案。

C# API 請求範例結構:

using System;
using System.Net.Http;
using System.Threading.Tasks;

public class HtmlToPdfExample
{
    public static async Task ConvertHtmlToPdfAsync()
    {
        using (var client = new HttpClient())
        {
            var content = new StringContent("<h1>Hello World</h1>");
            var response = await client.PostAsync("___PROTECTED_URL_137___", content);
            var pdfBytes = await response.Content.ReadAsByteArrayAsync();
            System.IO.File.WriteAllBytes("output.pdf", pdfBytes);
        }
    }
}
using System;
using System.Net.Http;
using System.Threading.Tasks;

public class HtmlToPdfExample
{
    public static async Task ConvertHtmlToPdfAsync()
    {
        using (var client = new HttpClient())
        {
            var content = new StringContent("<h1>Hello World</h1>");
            var response = await client.PostAsync("___PROTECTED_URL_137___", content);
            var pdfBytes = await response.Content.ReadAsByteArrayAsync();
            System.IO.File.WriteAllBytes("output.pdf", pdfBytes);
        }
    }
}
$vbLabelText   $csharpLabel

基於 API 的轉換有哪些限制?

ComPDFKit 的 API 方法帶來了一些挑戰:

-網路依賴性:基本操作需要網路連線。 -延遲問題:API 往返會增加處理時間 -控制受限:無法自訂渲染引擎行為 安全隱患:敏感資料傳輸到外部伺服器 -速率限制:API配額可能會限制高容量處理 -文檔不足:C# 實作範例有限

Bootstrap CSS 是否適用於 PDF 生成?

現代電子商務和商業應用程式廣泛使用 Bootstrap 來實現一致的使用者介面設計。 以 PDF 格式產生發票、收據和報表時,保持 Bootstrap 樣式可確保品牌一致性。 IronPDF 的 Chromium 引擎提供了完整的 Bootstrap 支持,而 ComPDFKit 基於 API 的方法在處理複雜的 CSS 框架時有其限制。

IronPDF 如何處理 Bootstrap 樣式?

IronPDF 使用 Chromium 的渲染引擎,在所有版本(Bootstrap 5、4 和 3)上提供像素級完美的 Bootstrap 支援。 該庫能夠無縫處理 Flexbox 佈局、CSS Grid、響應式實用程式和自訂元件。 有關進階 CSS 渲染,請參閱渲染選項指南

using IronPdf;

// Set license
IronPdf.License.LicenseKey = "License-Key";

var renderer = new ChromePdfRenderer();

// Bootstrap 5 e-commerce invoice example
string bootstrapInvoice = @"
<!DOCTYPE html>
<html lang='en'>
<head>
    <meta charset='utf-8'>
    <meta name='viewport' content='width=device-width, initial-scale=1'>
    <link href='___PROTECTED_URL_138___ rel='stylesheet'>
    <style>
        @page { margin: 20mm; }
        .invoice-header { border-bottom: 3px solid #0d6efd; }
        .product-row { border-bottom: 1px solid #dee2e6; }
        .total-section { background-color: #f8f9fa; }
    </style>
</head>
<body>
    <div class='container-fluid p-4'>
        <!-- Invoice Header -->
        <div class='row invoice-header pb-4 mb-4'>
            <div class='col-8'>
                <h1 class='display-4 text-primary'>INVOICE</h1>
                <p class='text-muted mb-0'>TechStore Inc.</p>
                <p class='text-muted mb-0'>123 Commerce Street, Tech City, TC 12345</p>
                <p class='text-muted'>Email: sales@techstore.com | Phone: (555) 123-4567</p>
            </div>
            <div class='col-4 text-end'>
                <p class='mb-1'><strong>Invoice #:</strong> INV-2024-1089</p>
                <p class='mb-1'><strong>Date:</strong> October 27, 2024</p>
                <p class='mb-1'><strong>Due Date:</strong> November 27, 2024</p>
                <span class='badge bg-success'>PAID</span>
            </div>
        </div>

        <!-- Bill To Section -->
        <div class='row mb-4'>
            <div class='col-6'>
                <h5 class='text-primary'>Bill To:</h5>
                <p class='mb-1'><strong>Acme Corporation</strong></p>
                <p class='mb-1'>456 Business Ave</p>
                <p class='mb-1'>Enterprise City, EC 67890</p>
                <p class='mb-0'>contact@acmecorp.com</p>
            </div>
            <div class='col-6 text-end'>
                <h5 class='text-primary'>Payment Method:</h5>
                <p class='mb-1'>Credit Card ending in 4242</p>
                <p class='mb-0'>Transaction ID: TXN-9876543210</p>
            </div>
        </div>

        <!-- Products Table -->
        <div class='row mb-4'>
            <div class='col-12'>
                <table class='table'>
                    <thead class='table-primary'>
                        <tr>
                            <th scope='col'>#</th>
                            <th scope='col'>Product</th>
                            <th scope='col'>Description</th>
                            <th scope='col' class='text-center'>Qty</th>
                            <th scope='col' class='text-end'>Unit Price</th>
                            <th scope='col' class='text-end'>Amount</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr class='product-row'>
                            <td>1</td>
                            <td><strong>IronPDF Pro License</strong></td>
                            <td>Professional developer license with 1 year support</td>
                            <td class='text-center'>1</td>
                            <td class='text-end'>$2,999.00</td>
                            <td class='text-end'><strong>$2,999.00</strong></td>
                        </tr>
                        <tr class='product-row'>
                            <td>2</td>
                            <td><strong>Priority Support</strong></td>
                            <td>24/7 priority technical support package</td>
                            <td class='text-center'>1</td>
                            <td class='text-end'>$999.00</td>
                            <td class='text-end'><strong>$999.00</strong></td>
                        </tr>
                        <tr class='product-row'>
                            <td>3</td>
                            <td><strong>Training Package</strong></td>
                            <td>On-site developer training (2 days)</td>
                            <td class='text-center'>1</td>
                            <td class='text-end'>$1,500.00</td>
                            <td class='text-end'><strong>$1,500.00</strong></td>
                        </tr>
                    </tbody>
                </table>
            </div>
        </div>

        <!-- Totals Section -->
        <div class='row justify-content-end mb-4'>
            <div class='col-md-6'>
                <div class='card total-section'>
                    <div class='card-body'>
                        <div class='row mb-2'>
                            <div class='col-6'><strong>Subtotal:</strong></div>
                            <div class='col-6 text-end'>$5,498.00</div>
                        </div>
                        <div class='row mb-2'>
                            <div class='col-6'><strong>Tax (8.5%):</strong></div>
                            <div class='col-6 text-end'>$467.33</div>
                        </div>
                        <div class='row mb-2'>
                            <div class='col-6 text-success'><strong>Discount (10%):</strong></div>
                            <div class='col-6 text-end text-success'>-$549.80</div>
                        </div>
                        <hr>
                        <div class='row'>
                            <div class='col-6'><h4 class='text-primary'>Total:</h4></div>
                            <div class='col-6 text-end'><h4 class='text-primary'>$5,415.53</h4></div>
                        </div>
                    </div>
                </div>
            </div>
        </div>

        <!-- Payment Terms -->
        <div class='row mb-4'>
            <div class='col-12'>
                <div class='alert alert-info' role='alert'>
                    <h6 class='alert-heading'>Payment Terms</h6>
                    <p class='mb-0'>Payment is due within 30 days. Late payments may incur a 1.5% monthly interest charge. Thank you for your business!</p>
                </div>
            </div>
        </div>

        <!-- Footer -->
        <div class='row border-top pt-3'>
            <div class='col-12 text-center text-muted'>
                <small>TechStore Inc. | Tax ID: 12-3456789 | All prices in USD</small>
            </div>
        </div>
    </div>
</body>
</html>";

// Render PDF with optimized settings
var pdf = renderer.RenderHtmlAsPdf(bootstrapInvoice);

// Add metadata for document management
pdf.MetaData.Title = "Invoice INV-2024-1089";
pdf.MetaData.Author = "TechStore Inc.";
pdf.MetaData.Subject = "Sales Invoice";
pdf.MetaData.Keywords = "invoice, payment, e-commerce";

// Save the invoice
pdf.SaveAs("invoice-with-bootstrap.pdf");
using IronPdf;

// Set license
IronPdf.License.LicenseKey = "License-Key";

var renderer = new ChromePdfRenderer();

// Bootstrap 5 e-commerce invoice example
string bootstrapInvoice = @"
<!DOCTYPE html>
<html lang='en'>
<head>
    <meta charset='utf-8'>
    <meta name='viewport' content='width=device-width, initial-scale=1'>
    <link href='___PROTECTED_URL_138___ rel='stylesheet'>
    <style>
        @page { margin: 20mm; }
        .invoice-header { border-bottom: 3px solid #0d6efd; }
        .product-row { border-bottom: 1px solid #dee2e6; }
        .total-section { background-color: #f8f9fa; }
    </style>
</head>
<body>
    <div class='container-fluid p-4'>
        <!-- Invoice Header -->
        <div class='row invoice-header pb-4 mb-4'>
            <div class='col-8'>
                <h1 class='display-4 text-primary'>INVOICE</h1>
                <p class='text-muted mb-0'>TechStore Inc.</p>
                <p class='text-muted mb-0'>123 Commerce Street, Tech City, TC 12345</p>
                <p class='text-muted'>Email: sales@techstore.com | Phone: (555) 123-4567</p>
            </div>
            <div class='col-4 text-end'>
                <p class='mb-1'><strong>Invoice #:</strong> INV-2024-1089</p>
                <p class='mb-1'><strong>Date:</strong> October 27, 2024</p>
                <p class='mb-1'><strong>Due Date:</strong> November 27, 2024</p>
                <span class='badge bg-success'>PAID</span>
            </div>
        </div>

        <!-- Bill To Section -->
        <div class='row mb-4'>
            <div class='col-6'>
                <h5 class='text-primary'>Bill To:</h5>
                <p class='mb-1'><strong>Acme Corporation</strong></p>
                <p class='mb-1'>456 Business Ave</p>
                <p class='mb-1'>Enterprise City, EC 67890</p>
                <p class='mb-0'>contact@acmecorp.com</p>
            </div>
            <div class='col-6 text-end'>
                <h5 class='text-primary'>Payment Method:</h5>
                <p class='mb-1'>Credit Card ending in 4242</p>
                <p class='mb-0'>Transaction ID: TXN-9876543210</p>
            </div>
        </div>

        <!-- Products Table -->
        <div class='row mb-4'>
            <div class='col-12'>
                <table class='table'>
                    <thead class='table-primary'>
                        <tr>
                            <th scope='col'>#</th>
                            <th scope='col'>Product</th>
                            <th scope='col'>Description</th>
                            <th scope='col' class='text-center'>Qty</th>
                            <th scope='col' class='text-end'>Unit Price</th>
                            <th scope='col' class='text-end'>Amount</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr class='product-row'>
                            <td>1</td>
                            <td><strong>IronPDF Pro License</strong></td>
                            <td>Professional developer license with 1 year support</td>
                            <td class='text-center'>1</td>
                            <td class='text-end'>$2,999.00</td>
                            <td class='text-end'><strong>$2,999.00</strong></td>
                        </tr>
                        <tr class='product-row'>
                            <td>2</td>
                            <td><strong>Priority Support</strong></td>
                            <td>24/7 priority technical support package</td>
                            <td class='text-center'>1</td>
                            <td class='text-end'>$999.00</td>
                            <td class='text-end'><strong>$999.00</strong></td>
                        </tr>
                        <tr class='product-row'>
                            <td>3</td>
                            <td><strong>Training Package</strong></td>
                            <td>On-site developer training (2 days)</td>
                            <td class='text-center'>1</td>
                            <td class='text-end'>$1,500.00</td>
                            <td class='text-end'><strong>$1,500.00</strong></td>
                        </tr>
                    </tbody>
                </table>
            </div>
        </div>

        <!-- Totals Section -->
        <div class='row justify-content-end mb-4'>
            <div class='col-md-6'>
                <div class='card total-section'>
                    <div class='card-body'>
                        <div class='row mb-2'>
                            <div class='col-6'><strong>Subtotal:</strong></div>
                            <div class='col-6 text-end'>$5,498.00</div>
                        </div>
                        <div class='row mb-2'>
                            <div class='col-6'><strong>Tax (8.5%):</strong></div>
                            <div class='col-6 text-end'>$467.33</div>
                        </div>
                        <div class='row mb-2'>
                            <div class='col-6 text-success'><strong>Discount (10%):</strong></div>
                            <div class='col-6 text-end text-success'>-$549.80</div>
                        </div>
                        <hr>
                        <div class='row'>
                            <div class='col-6'><h4 class='text-primary'>Total:</h4></div>
                            <div class='col-6 text-end'><h4 class='text-primary'>$5,415.53</h4></div>
                        </div>
                    </div>
                </div>
            </div>
        </div>

        <!-- Payment Terms -->
        <div class='row mb-4'>
            <div class='col-12'>
                <div class='alert alert-info' role='alert'>
                    <h6 class='alert-heading'>Payment Terms</h6>
                    <p class='mb-0'>Payment is due within 30 days. Late payments may incur a 1.5% monthly interest charge. Thank you for your business!</p>
                </div>
            </div>
        </div>

        <!-- Footer -->
        <div class='row border-top pt-3'>
            <div class='col-12 text-center text-muted'>
                <small>TechStore Inc. | Tax ID: 12-3456789 | All prices in USD</small>
            </div>
        </div>
    </div>
</body>
</html>";

// Render PDF with optimized settings
var pdf = renderer.RenderHtmlAsPdf(bootstrapInvoice);

// Add metadata for document management
pdf.MetaData.Title = "Invoice INV-2024-1089";
pdf.MetaData.Author = "TechStore Inc.";
pdf.MetaData.Subject = "Sales Invoice";
pdf.MetaData.Keywords = "invoice, payment, e-commerce";

// Save the invoice
pdf.SaveAs("invoice-with-bootstrap.pdf");
$vbLabelText   $csharpLabel

Bootstrap 的主要功能展示: -網格系統:用於響應式佈局結構的rowcol-*類 -排版: display-4text-mutedh5用於層級文字樣式 -表格:用於結構化資料顯示的tabletable-primarytable-hover -卡片:總計部分的cardcard-body ,帶有背景樣式 -徽章:用於支付狀態指示器的badge bg-success -提醒:付款條款alert alert-info -實用工具: text-endtext-centermb-<em>pb-間距實用程序 -自訂樣式:結合 Bootstrap 類,實作發票專屬設計

IronPDF 的 Chromium 引擎確保 Bootstrap 元件完美渲染:

-網格系統:用於響應式佈局的rowcol-*類 -字體display-4text-mutedh5用於層級樣式
-表格tabletable-primarytable-hover (用於結構化資料) -卡片:用於樣式化部分的cardcard-body -徽章:狀態指示燈的badge bg-success -警報:用於通知的alert alert-info -實用工具text-endtext-center 、間距實用工具 -自訂樣式:結合 Bootstrap 進行發票設計

IronPDF 為網頁字體和圖示提供完整的自訂排版支援。 當遇到 Bootstrap 版面配置問題時,請參考Bootstrap Flex CSS 故障排除。 對於視口和縮放設置,正確的配置可確保響應式佈局正確渲染。

ComPDFKit 與 Bootstrap 整合有哪些限制?

ComPDFKit 的 HTML 轉 PDF 功能依賴外部 API 調用,而不是嵌入式渲染。 雖然這種方法可以處理基本的 Bootstrap 樣式,但它也存在一些限制:

-網路依賴:需要向外部服務發出 HTTP 請求

  • CSS框架支援:可能無法完全支援複雜的Flexbox或CSS Grid佈局 -渲染一致性:結果可能因 API 服務實作而異 -自訂樣式:對 Bootstrap 元件渲染的控制有限 效能:網路延遲會增加文件產生的開銷

對於需要可靠 Bootstrap 渲染並能完全控制樣式和佈局的應用程式來說,原生 Chromium 渲染可提供更優的效果。 IronPDF 的整合方法消除了對外部的依賴,同時保持了與 CSS 框架的完全相容性。

如何在PDF文件中加入浮水印?

在 PDF 文件上新增浮水印有助於保護文件完整性、聲明所有權並增加安全性。 浮水印可以是出現在背景或前景中的文字、標誌或圖像。 它們可以阻止未經授權的使用和分發,同時傳達有關文件狀態或創建者身分的重要資訊。

如何使用 IronPDF 加水印?

IronPDF 提供了一種簡單易用的程式化方式,可以將浮水印加入 PDF 文件中。 此功能已整合到庫中,允許開發人員使用 C# 程式碼應用浮水印。 IronPDF 為背景和前景的放置提供了靈活的定位選項。

using IronPdf;
using IronPdf.Editing;

class Program
{
    static void Main()
    {
        License.LicenseKey = "License-Code";

        string watermarkHtml = @"
            <img style='width: 500px;' src='C:\Users\Tayyab Ali\Desktop\watermark.png'>
            <h1>IronPDF Watermark</h1>";

        ChromePdfRenderer renderer = new ChromePdfRenderer();
        PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>It's a PDF with a watermark</h1>");
        // Apply watermark with 30 degrees rotation and 50% opacity
        pdf.ApplyWatermark(watermarkHtml, rotation: 30, opacity: 50);
        pdf.SaveAs("Confidential.pdf");
    }
}
using IronPdf;
using IronPdf.Editing;

class Program
{
    static void Main()
    {
        License.LicenseKey = "License-Code";

        string watermarkHtml = @"
            <img style='width: 500px;' src='C:\Users\Tayyab Ali\Desktop\watermark.png'>
            <h1>IronPDF Watermark</h1>";

        ChromePdfRenderer renderer = new ChromePdfRenderer();
        PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>It's a PDF with a watermark</h1>");
        // Apply watermark with 30 degrees rotation and 50% opacity
        pdf.ApplyWatermark(watermarkHtml, rotation: 30, opacity: 50);
        pdf.SaveAs("Confidential.pdf");
    }
}
$vbLabelText   $csharpLabel

! PDF 頁面左下角顯示紅色"CONFIDENTIAL"水印戳記和灰色"IronPDF Watermark"文字,示範了浮水印應用功能。

本範例使用ChromePdfRenderer從 HTML 建立 PDF。 ApplyWatermark方法會加入包含圖像和標題的浮水印。 旋轉角度設定為 30 度,不透明度為 50%,確保可見度的同時不會掩蓋內容。 產生的PDF檔案將儲存到指定路徑。

有哪些進階浮水印選項?

IronPDF 提供完整的浮水印功能:

-基於 HTML 的浮水印:使用完整的 HTML/CSS 實現複雜的設計 -定位控制:3x3網格放置系統
-不透明度設定:微調透明度級別 -旋轉選項:可對角線浮水印套用任一角度 -頁面選擇:套用於所有頁面或特定範圍 -多重浮水印:根據需要疊加不同的水印

有關進階技巧,請參閱"新增文字和圖像""有效率地新增多個圖章" 。 這個新內容指南演示了動態水印生成。

如何使用 ComPDFKit 新增浮水印?

ComPDFKit 提供了使用該庫的方法以程式設計方式添加浮水印的功能。 此程式碼範例示範如何新增文字浮水印:

static private bool AddTextWatermark(CPDFDocument document)
{
    CPDFWatermark watermark = document.InitWatermark(C_Watermark_Type.WATERMARK_TYPE_TEXT);
    watermark.SetText("test");
    watermark.SetFontName("Helvetica"); 
    watermark.SetPages("0-3");
    byte[] color = { 255, 0, 0 };
    watermark.SetTextRGBColor(color);
    watermark.SetScale(2);
    watermark.SetRotation(0);
    watermark.SetOpacity(120);
    watermark.SetVertalign(C_Watermark_Vertalign.WATERMARK_VERTALIGN_CENTER);
    watermark.SetHorizalign(C_Watermark_Horizalign.WATERMARK_HORIZALIGN_CENTER);
    watermark.SetVertOffset(0);
    watermark.SetHorizOffset(0);
    watermark.SetFront(true);
    watermark.SetFullScreen(true);
    watermark.SetVerticalSpacing(10);
    watermark.SetHorizontalSpacing(10);
    watermark.CreateWatermark();
    string path = "AddTextWatermarkTest.pdf";
    if (!document.WriteToFilePath(path))
    {
        return false;
    }
    Console.WriteLine("Browse the changed file in " + path);
    return true;
}

CPDFDocument document = CPDFDocument.InitWithFilePath("SamplePDF.pdf");
if (AddTextWatermark(document))
{
    Console.WriteLine("Add text watermark done.");
}
else
{
    Console.WriteLine("Add text watermark failed.");
}
static private bool AddTextWatermark(CPDFDocument document)
{
    CPDFWatermark watermark = document.InitWatermark(C_Watermark_Type.WATERMARK_TYPE_TEXT);
    watermark.SetText("test");
    watermark.SetFontName("Helvetica"); 
    watermark.SetPages("0-3");
    byte[] color = { 255, 0, 0 };
    watermark.SetTextRGBColor(color);
    watermark.SetScale(2);
    watermark.SetRotation(0);
    watermark.SetOpacity(120);
    watermark.SetVertalign(C_Watermark_Vertalign.WATERMARK_VERTALIGN_CENTER);
    watermark.SetHorizalign(C_Watermark_Horizalign.WATERMARK_HORIZALIGN_CENTER);
    watermark.SetVertOffset(0);
    watermark.SetHorizOffset(0);
    watermark.SetFront(true);
    watermark.SetFullScreen(true);
    watermark.SetVerticalSpacing(10);
    watermark.SetHorizontalSpacing(10);
    watermark.CreateWatermark();
    string path = "AddTextWatermarkTest.pdf";
    if (!document.WriteToFilePath(path))
    {
        return false;
    }
    Console.WriteLine("Browse the changed file in " + path);
    return true;
}

CPDFDocument document = CPDFDocument.InitWithFilePath("SamplePDF.pdf");
if (AddTextWatermark(document))
{
    Console.WriteLine("Add text watermark done.");
}
else
{
    Console.WriteLine("Add text watermark failed.");
}
$vbLabelText   $csharpLabel

! PDF 頁面,重複出現紅色"test"水印文本,中心帶有 ComPDFKit 標誌和"Page1"標籤,顯示 ComPDFKit 的水印輸出。

此範例使用 CPDFDocument 開啟現有 PDF 文件。 AddTextWatermark方法初始化文字浮水印,設定文字內容、字型、顏色、縮放、旋轉、不透明度、對齊方式和間距等屬性。 水印套用於指定頁面並儲存到指定路徑。 影像浮水印需要不同的方法,這增加了實現的複雜性。

如何建立符合PDF/A標準的文件?

PDF/A是專為長期數位保存而設計的標準化 PDF 版本。 確保符合 PDF/A 標準可保證將來可靠地查看和複製。 本節探討如何使用這兩個函式庫來建立符合 PDF/A 標準的文件。

IronPDF 如何建立 PDF/A 文件?

IronPDF 簡化了將標準 PDF 轉換為符合 PDF/A 標準的格式的流程。 該庫支援多種 PDF/A 標準,包括 PDF/A-1、PDF/A-2 和 PDF/A-3。有關PDF/A 里程碑更新支援 ZUGFeRD 的 PDF/A-3 的信息,請參閱產品公告。

using IronPdf;
using System;

class Program
{
    static void Main()
    {
        License.LicenseKey = "License-Key";
        PdfDocument pdf = PdfDocument.FromFile("Source.pdf");
        pdf.SaveAsPdfA("pdfa-compliant.pdf", PdfAVersions.PdfA3);
    }
}
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        License.LicenseKey = "License-Key";
        PdfDocument pdf = PdfDocument.FromFile("Source.pdf");
        pdf.SaveAsPdfA("pdfa-compliant.pdf", PdfAVersions.PdfA3);
    }
}
$vbLabelText   $csharpLabel

過程包括:

1.初始化 IronPDF:先匯入 IronPDF 庫並設定您的許可證金鑰。 2.載入 PDF:使用PdfDocument.FromFile載入來源 PDF 檔案。 3.轉換與儲存:透過指定所需的 PDF/A 版本並將產生的文件儲存,將載入的 PDF 轉換為 PDF/A。

為什麼選擇 PDF/A 進行文件歸檔?

PDF/A格式在長期保存方面有以下幾個優點:

-自包含文件:所有字體和資源均已嵌入 -無外在依賴:消除對外在內容的依賴 -標準化格式:通過 ISO 認證,可用於存檔 -元資料保留:維護文件屬性 -視覺可重複性:確保外觀隨時間推移保持一致

IronPDF 也支援PDF/UA 格式以滿足無障礙要求,確保文件符合第 508 條合規標準。

ComPDFKit 如何建立 PDF/A 文件?

ComPDFKit 透過文件初始化、輸出路徑定義和轉換方法呼叫提供可靠的 PDF/A 轉換。

static public bool CovertToPDFA1a(CPDFDocument document)
{
    string convertToPDFA1aPath = "ConvertToPDFA1aTest.pdf";
    if (!document.WritePDFAToFilePath(CPDFType.CPDFTypePDFA1a, convertToPDFA1aPath))
    {
        return false;
    }
    Console.WriteLine("Browse the changed file in " + convertToPDFA1aPath);
    return true;
}

CPDFDocument document = CPDFDocument.InitWithFilePath("CommonFivePage.pdf");
if (CovertToPDFA1a(document))
{
    Console.WriteLine("Convert to PDF/A-1a done.");
}
else
{
    Console.WriteLine("Convert to PDF/A-1a failed.");
}
static public bool CovertToPDFA1a(CPDFDocument document)
{
    string convertToPDFA1aPath = "ConvertToPDFA1aTest.pdf";
    if (!document.WritePDFAToFilePath(CPDFType.CPDFTypePDFA1a, convertToPDFA1aPath))
    {
        return false;
    }
    Console.WriteLine("Browse the changed file in " + convertToPDFA1aPath);
    return true;
}

CPDFDocument document = CPDFDocument.InitWithFilePath("CommonFivePage.pdf");
if (CovertToPDFA1a(document))
{
    Console.WriteLine("Convert to PDF/A-1a done.");
}
else
{
    Console.WriteLine("Convert to PDF/A-1a failed.");
}
$vbLabelText   $csharpLabel

步驟包括:

1.初始化文件:使用CPDFDocument.InitWithFilePath載入 PDF 文件。 2.設定輸出目錄:確保輸出目錄存在,如有必要,請建立輸出目錄。 3.轉換為 PDF/A:使用WritePDFAToFilePath和指定的 PDF/A 類型執行轉換並儲存檔案。

如何為PDF檔案添加數位簽名?

數位簽章用於驗證文件的真實性和完整性。 本節示範如何使用這兩個庫添加數位簽章。 IronPDF 為完整的數位簽章實作提供了詳盡的文件。

如何使用 IronPDF 對 PDF 文件進行簽名?

IronPDF 提供簡單且有效率的數位簽章應用程式。 該庫支援 X.509 證書和HSM 集成,以滿足企業安全需求。

using IronPdf;
using IronPdf.Signing;

class Program
{
    static void Main(string[] args)
    {
        var simpleSignature = new PdfSignature("MyCert.p12", "newpassword");
        simpleSignature.SignPdfFile("sample.pdf");
    }
}
using IronPdf;
using IronPdf.Signing;

class Program
{
    static void Main(string[] args)
    {
        var simpleSignature = new PdfSignature("MyCert.p12", "newpassword");
        simpleSignature.SignPdfFile("sample.pdf");
    }
}
$vbLabelText   $csharpLabel

過程包括:

1.初始化 IronPDF:導入必要的 IronPDF 函式庫。 2.建立簽名:使用憑證檔案和密碼初始化PdfSignature物件。 3.對 PDF 進行簽名:使用SignPdfFile將簽章套用到 PDF 上。

IronPDF提供哪些進階簽名選項?

IronPDF 提供完整的數位簽章功能:

-多種簽名類型:證書簽名、視覺簽名和表單欄位簽名

  • HSM 支援:硬體安全模組集成 -時間戳伺服器:為簽章新增可信任時間戳 -簽名外觀:自訂簽名視覺呈現方式 -驗證支援:以程式方式驗證現有簽名 -版本控制:維護簽章版本歷史記錄

如需排查簽章問題,請參閱數位簽章故障排除指南

如何使用 ComPDFKit 對 PDF 文件進行簽名?

ComPDFKit 提供完整的數位簽章建立功能,並具有豐富的自訂選項。

private static void CreateDigitalSignature(CPDFDocument document, string certificatePath, string password)
{
    Console.WriteLine("--------------------");
    Console.WriteLine("Create digital signature.");
    CPDFSignatureCertificate certificate = CPDFPKCS12CertHelper.GetCertificateWithPKCS12Path("Certificate.pfx", "ComPDFKit");
    CPDFPage page = document.PageAtIndex(0);
    CPDFSignatureWidget signatureField = page.CreateWidget(C_WIDGET_TYPE.WIDGET_SIGNATUREFIELDS) as CPDFSignatureWidget;
    signatureField.SetRect(new CRect(28, 420, 150, 370));
    signatureField.SetWidgetBorderRGBColor(new byte[] { 0, 0, 0 });
    signatureField.SetWidgetBgRGBColor(new byte[] { 150, 180, 210 });
    signatureField.UpdateAp();
    string name = GetGrantorFromDictionary(certificate.SubjectDict) + "\n";
    string date = DateTime.Now.ToString("yyyy.MM.dd HH:mm:ss");
    string reason = "I am the owner of the document.";
    string location = certificate.SubjectDict["C"];
    string DN = certificate.Subject;

    CPDFSignatureConfig signatureConfig = new CPDFSignatureConfig
    {
        Text = GetGrantorFromDictionary(certificate.SubjectDict),
        Content =
            "Name: " + name + "\n" +
            "Date: " + date + "\n" +
            "Reason: " + reason + " \n" +
            "Location: " + location + "\n" +
            "DN: " + DN + "\n",
        IsContentAlignLeft = false,
        IsDrawLogo = true,
        LogoBitmap = new Bitmap("Logo.png"),
        TextColor = new float[] { 0, 0, 0 },
        ContentColor = new float[] { 0, 0, 0 }
    };
    string filePath = document.FileName + "_Signed.pdf";
    signatureField.UpdataApWithSignature(signatureConfig);
    if (document.WriteSignatureToFilePath(signatureField,
        filePath,
        certificatePath, password,
        location,
        reason, CPDFSignaturePermissions.CPDFSignaturePermissionsNone))
    {
        Console.WriteLine("File saved in " + filePath);
        Console.WriteLine("Create digital signature done.");
    }
    else
    {
        Console.WriteLine("Create digital signature failed.");
    }
    Console.WriteLine("--------------------");
}
private static void CreateDigitalSignature(CPDFDocument document, string certificatePath, string password)
{
    Console.WriteLine("--------------------");
    Console.WriteLine("Create digital signature.");
    CPDFSignatureCertificate certificate = CPDFPKCS12CertHelper.GetCertificateWithPKCS12Path("Certificate.pfx", "ComPDFKit");
    CPDFPage page = document.PageAtIndex(0);
    CPDFSignatureWidget signatureField = page.CreateWidget(C_WIDGET_TYPE.WIDGET_SIGNATUREFIELDS) as CPDFSignatureWidget;
    signatureField.SetRect(new CRect(28, 420, 150, 370));
    signatureField.SetWidgetBorderRGBColor(new byte[] { 0, 0, 0 });
    signatureField.SetWidgetBgRGBColor(new byte[] { 150, 180, 210 });
    signatureField.UpdateAp();
    string name = GetGrantorFromDictionary(certificate.SubjectDict) + "\n";
    string date = DateTime.Now.ToString("yyyy.MM.dd HH:mm:ss");
    string reason = "I am the owner of the document.";
    string location = certificate.SubjectDict["C"];
    string DN = certificate.Subject;

    CPDFSignatureConfig signatureConfig = new CPDFSignatureConfig
    {
        Text = GetGrantorFromDictionary(certificate.SubjectDict),
        Content =
            "Name: " + name + "\n" +
            "Date: " + date + "\n" +
            "Reason: " + reason + " \n" +
            "Location: " + location + "\n" +
            "DN: " + DN + "\n",
        IsContentAlignLeft = false,
        IsDrawLogo = true,
        LogoBitmap = new Bitmap("Logo.png"),
        TextColor = new float[] { 0, 0, 0 },
        ContentColor = new float[] { 0, 0, 0 }
    };
    string filePath = document.FileName + "_Signed.pdf";
    signatureField.UpdataApWithSignature(signatureConfig);
    if (document.WriteSignatureToFilePath(signatureField,
        filePath,
        certificatePath, password,
        location,
        reason, CPDFSignaturePermissions.CPDFSignaturePermissionsNone))
    {
        Console.WriteLine("File saved in " + filePath);
        Console.WriteLine("Create digital signature done.");
    }
    else
    {
        Console.WriteLine("Create digital signature failed.");
    }
    Console.WriteLine("--------------------");
}
$vbLabelText   $csharpLabel

步驟包括:

1.初始化文件和憑證:載入 PDF 文件並使用CPDFPKCS12CertHelper檢索憑證。 2.建立和設定簽名域:在 PDF 中新增簽名域,設定其屬性,並配置簽名詳細資料。 3.應用簽章:使用WriteSignatureToFilePath套用簽章並儲存已簽署的 PDF。

如何從PDF文件中提取文字?

從PDF文件中提取文字對於資料處理和分析至關重要。 本節介紹如何使用這兩個函式庫進行文字擷取。

IronPDF是如何擷取文字的?

IronPDF 提供從 PDF 文件中直接提取文字的功能。 該庫提供了提取所有文字或特定頁面內容的方法。 IronPDF 支援結構化擷取,用於解析 PDF 內容。 開發者在存取 PDF DOM 物件時,可以檢索詳細的內容資訊。

using IronPdf;
using System.IO;

PdfDocument pdf = PdfDocument.FromFile("PDF File With Text.pdf");
string text = pdf.ExtractAllText();
File.WriteAllText("PDF Text.txt", text);
using IronPdf;
using System.IO;

PdfDocument pdf = PdfDocument.FromFile("PDF File With Text.pdf");
string text = pdf.ExtractAllText();
File.WriteAllText("PDF Text.txt", text);
$vbLabelText   $csharpLabel

過程包括:

1.初始化 IronPDF:導入 IronPDF 庫。 2.載入 PDF:使用PdfDocument.FromFile載入 PDF 檔案。 3.提取文字:呼叫ExtractAllText從 PDF 中檢索所有文字內容。 4.將文字儲存到文件:使用標準文件 I/O 操作將提取的文字寫入文件。

有哪些高階文字擷取功能?

IronPDF 提供強大的文字擷取功能:

-頁面特定提取:從單一頁面提取文本 -結構化內容:存取帶有格式訊息的文本 -搜尋和替換:在 PDF 文件中尋找和替換文本 -正規表示式支援:基於模式的文字擷取 -基於座標的提取:從特定區域提取文本 -語言支援:支援UTF-8 和國際字符

有關完整的文本閱讀範例,請參閱閱讀 PDF 文本指南

ComPDFKit是如何擷取文字的?

ComPDFKit 提供從 PDF 文件中靈活提取文字的功能。

static private bool PDFToText(CPDFDocument document)
{
    string path = "//PDFToText.txt";
    if (!document.PdfToText("1-" + document.PageCount.ToString(), path))//Page ranges are counted from 1
    {
        return false;
    }
    Console.WriteLine("Browse the generated file in " + path);
    return true;
}

static void Main(string[] args)
{
    Console.WriteLine("Running PDFPage test sample…\r\n");
    SDKLicenseHelper.LicenseVerify();
    CPDFDocument document = CPDFDocument.InitWithFilePath("CommonFivePage.pdf");

    if (PDFToText(document))
    {
        Console.WriteLine("PDF to text done.");
    }
    else
    {
        Console.WriteLine("PDF to text failed.");
    }
    Console.WriteLine("--------------------");
    Console.WriteLine("Done!");
    Console.WriteLine("--------------------");
    Console.ReadLine();
}
static private bool PDFToText(CPDFDocument document)
{
    string path = "//PDFToText.txt";
    if (!document.PdfToText("1-" + document.PageCount.ToString(), path))//Page ranges are counted from 1
    {
        return false;
    }
    Console.WriteLine("Browse the generated file in " + path);
    return true;
}

static void Main(string[] args)
{
    Console.WriteLine("Running PDFPage test sample…\r\n");
    SDKLicenseHelper.LicenseVerify();
    CPDFDocument document = CPDFDocument.InitWithFilePath("CommonFivePage.pdf");

    if (PDFToText(document))
    {
        Console.WriteLine("PDF to text done.");
    }
    else
    {
        Console.WriteLine("PDF to text failed.");
    }
    Console.WriteLine("--------------------");
    Console.WriteLine("Done!");
    Console.WriteLine("--------------------");
    Console.ReadLine();
}
$vbLabelText   $csharpLabel

步驟如下:

1.初始化文件:使用CPDFDocument.InitWithFilePath載入 PDF 文件。 2.提取並儲存文字:使用PdfToText從指定的頁面範圍提取文字並將其儲存到文件中。

真實世界用例場景

了解何時使用哪個函式庫有助於開發人員根據專案需求做出明智的決策。 這些場景說明了每個圖書館在實際應用上的優勢。

何時應該選擇 IronPDF?

企業文件產生系統 一家金融服務公司每月需要產生 50,000 多份報表,這些報表包含複雜的佈局、圖表和監管合規要求。

IronPDF的優勢: -效能非同步/多執行緒支援可高效處理高吞吐量。 -合規性:內建PDF/APDF/UA ,滿足法規要求 -圖表:用於金融視覺化的原生JavaScript 圖表渲染 -安全性:對敏感資料進行進階加密 -支援:提供每週 5 天、每天 24 小時的工程支持,解決生產問題

SaaS發票產生平台 一個多租戶 SaaS 平台,可使用自訂範本為成千上萬的客戶產生品牌發票。

IronPDF的優勢:

  • HTML/CSS 支援:完全相容於 Bootstrap,適用於品牌模板 -效能採用 Docker 部署實作可擴充架構 -客製化服務頁首/頁尾和品牌浮水印
  • API 設計:簡潔的 API 可縮短開發時間 -雲端就緒:原生支援AzureAWS

何時應該考慮使用 ComPDFKit?

基本型 PDF 檢視器應用程式 一款桌面應用程序,需要具備 PDF 檢視和基本註釋功能,無需 HTML 轉換。

ComPDFKit 的優勢: -檢視器組件:內建檢視功能 -註解工具:原生註解支持 -整合簡單:無需 HTML 即可直接操作 PDF 文件 -離線操作:核心功能無需網路依賴

文件存檔系統 一款專注於PDF文件整理和基本編輯的內部文件管理系統。

ComPDFKit 的優勢: -文件處理:強大的 PDF 合併/拆分功能 -基本編輯:文字和圖像修改工具 傳統方法:熟悉的以 PDF 為中心的 API 設計

有哪些授權許可選項?

IronPDF 和 ComPDFKit 的授權模式在方法和使用條款上有所不同。 了解這些差異有助於開發人員根據專案需求和預算選擇合適的工具。

IronPDF提供哪些授權選項?

IronPDF 定價頁面顯示三個許可等級(Lite 749 美元,Plus 1499 美元,Professional 2999 美元),選擇 Professional 後,顯示 10 個開發人員/地點/項目覆蓋範圍,總價為 4998 美元,包含擴展支援和升級保護。

IronPDF採用透明的商業許可模式運作:

許可證類型: -精簡版授權(749 美元) :1 位開發者,1 個地點,1 個項目

  • Plus 許可(1,499 美元) :3 位開發人員,3 個地點,3 個項目
    專業版授權(2,999 美元) :10 位開發人員,10 個地點,10 個項目 -企業/OEM :無限部署的客製化定價

主要優勢: -永久授權:一次性付款,終身使用 -免版稅發放:無運行時費用 -提供原始碼:可選購買,用於安全審計 -靈活的升級方案:提供授權延期升級選項 -試用期免費試用許可證,供評估使用

IronPDF 的商業模式確保企業獲得專門的支援、完整的文件以及用於專業 PDF 生成和處理的高級功能。 透明的定價結構消除了隱性成本,並提供了預算可預測性。

ComPDFKit提供哪些授權選項?

ComPDFKit採用靈活的授權模式,以滿足不同的業務需求:

許可選項: -永久許可:一次性付費即可終身訪問 SDK 訂閱許可:定期付費,持續更新 -基於報價的定價:根據項目需求客製價格

注意事項: -變動成本:定價需直接聯絡報價 -更新費用:版本更新的可選費用 -支援包:單獨的支援協定要求

  • API 使用限制:HTML 轉換 API 會產生額外費用

有哪些文件和支援服務?

IronPDF提供哪些支援?

IronPDF 提供文件和支援基礎設施:

文檔資源: -完整指南500 多個程式碼範例,涵蓋所有功能

支援管道:

  • 24/5 工程支援:可直接聯絡開發團隊 -回應時間:優先支持,保證回應時間 -程式碼審查:工程團隊審查複雜的程式碼實現 -客製化解決方案:協助滿足您的特殊需求 -定期更新產品更新里程碑功能

提出工程支援請求時,詳細的指南可確保有效率解決問題。 支援基礎設施包括為各種平台提供部署協助

ComPDFKit提供哪些支援?

ComPDFKit 提供基本文件和支援資源:

文件: -入門指南:基本設定說明

  • API 參考:標準方法文檔 -範例程式碼:核心功能的有限範例 -平台文件:基礎平台整合指南

支援選項: -電子郵件支援:標準工作時間內回复 -技術支援:基本故障排除協助 -社群論壇:用戶驅動的支援社區

雖然這兩個庫都提供文件和支持,但 IronPDF 提供更完整的資源、更快的回應時間和直接的工程支持,這對生產部署至關重要。

性能和優化考量

性能會影響生產系統的可行性。 了解每個庫的最佳化能力有助於架構師設計高效的解決方案。

IronPDF如何最佳化效能?

IronPDF 提供全面的效能最佳化功能

建築優勢: -原生 Chrome 引擎:優化的 C++ 渲染引擎 -記憶體管理:高效處理大型文檔 -線程安全:專為並發 Web 應用程式而設計 資源池化:可重複使用的渲染實例

性能特點: -非同步操作:非阻塞式 PDF 生成 -多執行緒支援:並行文件處理 -線性化:快速網頁視圖最佳化 -壓縮:檔案大小可減少高達 90% -記憶體流處理:避免磁碟 I/O 開銷

基準測試(50頁文件產生):

  • 單線程:平均耗時 2.3 秒
  • 多執行緒(8 核心):每個文件 0.4 秒
  • 記憶體使用量:峰值 180MB
  • 並發請求:100+ 個同時渲染

ComPDFKit的效能特點是什麼?

ComPDFKit 為基本操作提供標準效能:

性能概況: -同步處理:傳統的阻塞操作 -記憶體使用情況:複雜文件的記憶體消耗較高 -並發性:有限的並發操作支持

  • HTML 轉換:網路延遲會增加 1-3 秒

局限性:

  • 沒有內建異步支援
  • 線程文檔有限 API 呼叫會引入網路開銷 資源管理需要人工實施

企業整合模式

生產系統需要特定的架構模式才能確保可靠性和可擴展性。 了解整合方法有助於團隊實施可靠的解決方案。

如何在微服務架構中實現 IronPDF?

IronPDF 支援現代架構模式:

容器化 PDF 服務:

// Dockerfile for IronPDF microservice
FROM mcr.microsoft.com/dotnet/aspnet:6.0
RUN apt-get update && apt-get install -y \
    libgdiplus \
    libc6-dev \
    libx11-6
COPY . /app
WORKDIR /app
ENTRYPOINT ["dotnet", "PdfService.dll"]
// Dockerfile for IronPDF microservice
FROM mcr.microsoft.com/dotnet/aspnet:6.0
RUN apt-get update && apt-get install -y \
    libgdiplus \
    libc6-dev \
    libx11-6
COPY . /app
WORKDIR /app
ENTRYPOINT ["dotnet", "PdfService.dll"]
$vbLabelText   $csharpLabel

可擴充的API實作:

[ApiController]
[Route("api/[controller]")]
public class PdfController : ControllerBase
{
    private readonly ChromePdfRenderer _renderer;

    public PdfController()
    {
        _renderer = new ChromePdfRenderer();
        // Configure for production
        _renderer.RenderingOptions.EnableJavaScript = true;
        _renderer.RenderingOptions.RenderDelay = 500;
    }

    [HttpPost("generate")]
    public async Task<IActionResult> GeneratePdf([FromBody] PdfRequest request)
    {
        try
        {
            var pdf = await _renderer.RenderHtmlAsPdfAsync(request.Html);

            // Apply security if needed
            if (request.RequirePassword)
            {
                pdf.SecuritySettings.SetPassword(request.Password);
            }

            var stream = pdf.Stream;
            return File(stream, "application/pdf", request.FileName);
        }
        catch (Exception ex)
        {
            // 完全的 error handling
            return StatusCode(500, new { error = ex.Message });
        }
    }
}
[ApiController]
[Route("api/[controller]")]
public class PdfController : ControllerBase
{
    private readonly ChromePdfRenderer _renderer;

    public PdfController()
    {
        _renderer = new ChromePdfRenderer();
        // Configure for production
        _renderer.RenderingOptions.EnableJavaScript = true;
        _renderer.RenderingOptions.RenderDelay = 500;
    }

    [HttpPost("generate")]
    public async Task<IActionResult> GeneratePdf([FromBody] PdfRequest request)
    {
        try
        {
            var pdf = await _renderer.RenderHtmlAsPdfAsync(request.Html);

            // Apply security if needed
            if (request.RequirePassword)
            {
                pdf.SecuritySettings.SetPassword(request.Password);
            }

            var stream = pdf.Stream;
            return File(stream, "application/pdf", request.FileName);
        }
        catch (Exception ex)
        {
            // 完全的 error handling
            return StatusCode(500, new { error = ex.Message });
        }
    }
}
$vbLabelText   $csharpLabel

好處: -水平擴展:根據需要添加實例 -故障隔離:服務故障不會影響系統 資源控制:容器限制防止資源耗盡 -部署靈活性:相容於 Kubernetes 和 Docker Swarm

ComPDFKit企業版整合方案如何?

ComPDFKit 需要採用傳統整合的方式:

-單體式設計:函式庫與應用程式緊密耦合 -有限縮放:僅限垂直縮放 資源共享:多租戶場景中可能出現的衝突

  • API依賴:外部服務需求使架構複雜化

安全與合規功能

企業應用需要可靠的安全功能,以滿足監管合規性和資料保護要求。

IronPDF如何處理安全問題?

IronPDF 提供完整的安全功能

加密選項:

  • AES 256 位元加密:軍用級安全 -使用者/所有者密碼:不同的訪問級別 權限控制:精細化的操作限制 -數位簽章:基於憑證的身份驗證
  • HSM 支援:硬體安全模組集成

合規性特徵:

實施範例:

// Secure document generation
var pdf = renderer.RenderHtmlAsPdf(htmlContent);

// Apply complete security
pdf.SecuritySettings.SetPassword("user123");
pdf.SecuritySettings.SetOwnerPassword("owner456");
pdf.SecuritySettings.MakePdfDocumentReadOnly();
pdf.SecuritySettings.SetPdfSecuritySettings(
    canPrint: true,
    canCopy: false,
    canModify: false
);

// Add digital signature
var signature = new PdfSignature("cert.pfx", "password");
pdf.SignWithSignature(signature);

// Ensure compliance
pdf.SaveAsPdfA("secure-compliant.pdf", PdfAVersions.PdfA3);
// Secure document generation
var pdf = renderer.RenderHtmlAsPdf(htmlContent);

// Apply complete security
pdf.SecuritySettings.SetPassword("user123");
pdf.SecuritySettings.SetOwnerPassword("owner456");
pdf.SecuritySettings.MakePdfDocumentReadOnly();
pdf.SecuritySettings.SetPdfSecuritySettings(
    canPrint: true,
    canCopy: false,
    canModify: false
);

// Add digital signature
var signature = new PdfSignature("cert.pfx", "password");
pdf.SignWithSignature(signature);

// Ensure compliance
pdf.SaveAsPdfA("secure-compliant.pdf", PdfAVersions.PdfA3);
$vbLabelText   $csharpLabel

ComPDFKit提供哪些安全保障?

ComPDFKit 提供基本安全功能:

-密碼保護:基本使用者/擁有者密碼 -加密:標準 PDF 加密 -權限:有限的權限設定 -數位簽名:基於憑證的簽名

然而,HSM 支援、資料清理和完整的合規性工具等進階功能需要額外的實施。

我應該選擇哪個PDF庫?

IronPDF 和 ComPDFKit 的比較揭示了它們在不同的用例和需求方面存在明顯的差異。

IronPDF為何在企業應用領域表現卓越

IronPDF 在滿足以下需求的生產系統中脫穎而出,成為最佳選擇:

技術卓越: -原生 HTML 渲染:Chromium 引擎確保完美轉換 -效能:非同步/多執行緒處理高吞吐量 -可靠性:Web 應用程式的執行緒安全架構 -整合:簡單的 API 可縮短開發時間

商業價值: -總擁有成本:價格透明,無隱藏費用 -支援基礎設施:每週 5 天、每天 24 小時的工程支援最大限度地減少了停機時間 -文件:500 多個範例加速開發 -面向未來:定期更新與新增功能

開發者真實回饋: IronPDF徹底改變了發票產生系統。 開發人員每月處理超過 10 萬份文檔,沒有出現任何渲染問題。 Bootstrap 的支援節省了數週的開發時間。 "* - 財富 500 強零售商資深 .NET 架構師

"在評估了多個庫之後,IronPDF 的性能和支援使其成為不二之選。其非同步功能將處理時間縮短了 75%。" — 金融服務技術主管

ComPDFKit何時可能足夠用

ComPDFKit 可能適用於:

-簡易 PDF 查看:基本桌面應用程式 -範圍有限:無需進行 HTML 轉換的項目 -預算限制:當外部 API 成本可以接受時 -基本操作:簡單的合併/分割要求

最終建議

對於建立以效能、可靠性和架構模式為優先考慮的生產系統的高級 .NET 開發人員來說, IronPDF 提供了完整的解決方案。 其技術能力、企業功能和卓越的支援基礎設施相結合,確保專案成功交付。

關鍵決策因素:

要求IronPDFComPDFKit優勝者
HTML 轉 PDF天然鉻外部 APIIronPDF
表現異步/多線程同步IronPDF
CSS 支援完全 Bootstrap/Flexbox有限的IronPDF
文件500 多個範例基本的IronPDF
支援24/5 工程僅限電子郵件IronPDF
企業功能完全的有限的IronPDF
總成本透明的多變的IronPDF

IronPDF 提供免費試用許可證,用於測試該程式庫及其功能。 IronPDF 許可證起價為 749 美元。此外,Iron Software 還提供九個庫的捆綁銷售,價格僅為兩個庫,其中包括IronXLIronOCR以及 IronPDF。

對於需要專業 PDF 產生和企業級支援的團隊,IronPDF 提供完整的解決方案。 憑藉其在財富 500 強企業中積累的良好口碑、完整的功能集以及對開發者成功的執著追求,它成為嚴肅的 .NET 應用程式的更佳選擇。

請注意ComPDFKit 是其各自所有者的註冊商標。 本網站與 ComPDFKit 無任何關聯,亦未獲得其認可或贊助。 所有產品名稱、標誌和品牌均為其各自所有者的財產。 文中比較僅供參考,反映的是撰寫本文時可公開取得的資訊。

常見問題解答

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

您可以使用 IronPDF 的RenderHtmlAsPdf方法將 HTML 字串轉換為 PDF。此方法適用於將 HTML、CSS 和 JavaScript 轉換為高品質的 PDF 文件。

使用 C# PDF 函式庫有哪些好處?

IronPDF 和 ComPDFKit 等 C# PDF 庫支援 PDF 的建立、修改以及文字/影像擷取。它們支援表單處理、數位簽章和安全性等功能,並可在不同的平台上靈活使用。

我可以用 C# 為我的 PDF 檔案添加安全保護嗎?

是的,使用 IronPDF,您可以透過設定密碼、加密文件和添加數位簽章來增強 PDF 安全性,從而保護敏感資訊。

ComPDFKit 如何處理 PDF 編輯和轉換?

ComPDFKit 提供強大的 PDF 編輯功能和多種格式轉換功能,包括用於長期數位保存的 PDF/A 格式,使其適用於跨平台專案。

C# PDF 函式庫有哪些授權選項?

IronPDF 提供永久許可的商業許可模式,而 ComPDFKit 提供永久許可和訂閱許可,可根據業務需求靈活選擇。

使用這些庫的開發者可以獲得哪些支援和資源?

IronPDF 提供全面的文件和快速回應的客戶支持,使其適用於企業級應用。 ComPDFKit 也提供詳盡的文件和技術支援。

IronPDF 和 ComPDFKit 在 HTML 轉 PDF 方面有何不同?

IronPDF 在 HTML 轉 PDF 方面表現出色,支援 HTML 字串、URL、ASPX Web 表單和 MVC 視圖,而 ComPDFKit 則提供了更廣泛的 PDF 編輯和轉換功能。

柯蒂斯·週
技術撰稿人

Curtis Chau擁有卡爾頓大學電腦科學學士學位,專長於前端開發,精通Node.js、TypeScript、JavaScript和React。他熱衷於打造直覺美觀的使用者介面,喜歡使用現代框架,並擅長撰寫結構清晰、視覺效果出色的使用者手冊。

除了開發工作之外,柯蒂斯對物聯網 (IoT) 也抱有濃厚的興趣,致力於探索硬體和軟體整合的創新方法。閒暇時,他喜歡玩遊戲和製作 Discord 機器人,將他對科技的熱愛與創造力結合。