IronPDF與PDFNet的比較
1.簡介
正在尋找適用於 .NET Framework 的完美 PDF 工具嗎?
在這篇文章中,我們將介紹如何在 C#(最流行的程式語言之一)中處理 PDF 檔案。 我們將討論兩種業界領先的 PDF 工具,適用於 .NET Framework 上的 C#,並使用程式碼範例,根據其效能和功能進行比較。 最後,我們會檢視它們的授權細節,並學習如何取得授權金鑰。
這兩個 PDF 程式庫是
- PDFNet
- IronPDF
2.IronPDF。
IronPDF 是 Iron Software 開發的 C# .NET 函式庫,可使用單一函式庫為 C# .NET 開發人員解決所有 PDF 問題。 IronPDF 採用 Chromium 引擎,具有多種有用且強大的功能,例如將 HTML5、JavaScript、CSS 和圖片檔案轉換為 PDF、建立自訂的頁首和頁尾,以及精確顯示 PDF 檔案在瀏覽器中的樣式。 IronPDF 可讓您讀取 PDF 檔案中的資料,並自動將其插入到您的 .NET 應用程式和資料儲存系統中。 您可以將舊有 PDF 文件儲存的內容匯入、移動並編製索引至您的文件管理和商業應用程式。
2.1.IronPDF 功能。
2.1.1.PDF 轉換
此功能可讓您從 HTML、MVC 視圖、Web 表單、HTML 字串和 URL 等各種格式產生 PDF 檔案。
2.1.2.擷取 PDF 內容
在許多情況下,您可以輕鬆地從 PDF 中提取內嵌文字。 但是,如果這一點失敗了,您的文字很可能是嵌入在圖片中。 若要掃描文件的視覺文字,而非純文字,請使用 IronOCR 函式庫。
2.1.3頁首和頁尾
可以在建立 PDF 或現有 PDF 時加入頁首與頁尾。 使用列印選項屬性,您可以為每個文件頁面建立頁首和頁尾。 這些參數在 ChromePdfRenderer 物件上是可用的。 本範例在 .NET Core 控制台應用程式中執行。
2.1.4.PDF 圖像處理
這可讓使用者從 PDF 生成影像,以及從照片生成 PDF。它支援影像擷取、各種影像擴充以及 PDF 列印。
2.1.5.PDF 文件 IO
IronPDF 還包括 128 位元 PDF 加密、密碼保護 PDF 鎖定以及 PDF 的數位簽章。
2.1.6.PDF 編輯
IronPDF 工具允許您為 PDF 添加水印、新增頁面、移除頁面、背景、前景等。
2.1.7.相容性
IronPDF 支援幾乎所有與 C# 相容的作業系統和框架,例如:
- 視窗
- .NET Core 2.1、3.0、3.1、.NET 6 & 5
- 符合 .NET Standard 2.0 的通用相容性
- Azure
- AWS Docker Linux
3.PDFNet。
PDFTron 的 PDFNet .NET SDK 為網頁、行動裝置、桌上型電腦或伺服器上的任何 Framework 或應用程式帶來精確的 PDF 處理、註解、編輯和建立功能。 它可與您的基礎架構一起管理整個文件和資訊管理流程,並免除對第三方伺服器的依賴。 PDFTron 的網路平台附有支援平台的 JS 版本,以及所有 PDF SDK 的試用授權金鑰。
PDFNet 最顯著的優點之一就是它是真正的跨平台,讓我們的使用者可以在許多不同的行動和桌上型電腦情境中,簡單地將 PDF 相容性和相關的商業功能加入他們的工作流程和應用程式中,同時使用幾乎相同的介面。
3.1.PDFNet SDK 功能
3.1.1.相容性
PDFNet SDK 與許多平台和框架相容。 為了確保平台的一致性,JavaScript API 的使用方式與 PDFNet API 相同。 SDK 的 Node.js 和 Electron 版本也可提供。 此套件需要未經管理的附加二進位檔案。
3.1.2.編輯與檢視
為線上、行動和桌面平台的使用者帶來安全、可擴充且高逼真度的 PDF 閱讀和編輯能力。
3.1.3.簽名
建立自訂的簽署程序。 數位簽名的文件可以經過認證、驗證和密封。
3.1.4.True Redaction
移除文件中的敏感資料,例如個人資訊或個人健康資訊,同時讓文件可被搜尋。
3.1.5.頁面的操作
可增加、移除或重新排列頁面。 文件可以匯集、合併或分割成不同部分。 在同一閱讀器中或旁邊同時檢視數個文件。
4.在 Visual Studio 中建立新專案
在本文中,我們要使用控制台應用程式來產生 PDF 文件。
開啟 Visual Studio 軟體,並移至"檔案"功能表。 選擇"新專案",然後選擇主控台應用程式。
在適當的文字方塊中輸入專案名稱並選擇路徑。 然後按一下建立按鈕。 選擇所需的 .NET Framework,如下截圖所示:
Visual Studio 專案現在會產生主控台應用程式的結構。 完成後,它將打開 Program.cs 文件,您可以在其中編寫和執行原始程式碼。
現在我們可以加入函式庫並測試程式。
5.安裝 IronPDF 函式庫。
IronPDF 函式庫可以四種不同的方式下載與安裝。 這些工具包括
- 使用 Visual Studio NuGet 套件管理員
- 使用 Visual Studio 命令列。
- 直接從 NuGet Gallery IronPDF 套件下載。
- 直接從 IronPDF 下載頁面下載。
5.1 使用 Visual Studio NuGet 套件管理員。
Visual Studio 軟體提供 NuGet Package Manager 選項,可直接將套件安裝至解決方案。 下面的截圖顯示了如何打開 NuGet Package Manager。
打開套件管理員 GUI,按一下瀏覽索引標籤並搜尋 "IronPDF:"。
在上圖中,我們可以看到搜尋所得的相關套件清單。 選擇 IronPDF 選項,並將套件安裝至我們的解決方案。
5.2 使用 Visual Studio 命令列。
- 在 Visual Studio 功能表中,前往 工具 > NuGet 套件管理員 > 套件管理員控制台
- 在套件管理員控制台索引標籤中輸入以下一行:
Install-Package IronPdf
現在 IronPDF 套件將安裝在專案中。
5.3 直接從 NuGet 網頁下載。
第三種方式是直接從 NuGet Gallery IronPDF Package 下載 NuGet 套件。
- 請從右側功能表中選擇下載套件選項。
- 雙擊下載的套件; 會自動安裝。
- 接下來,重新載入解決方案並開始在專案中使用。
5.4 直接從 IronPDF 網頁下載。
直接從 IronPDF 下載頁面下載最新套件。 下載完成後,請依照下列步驟將套件新增至專案中。
- 在解決方案視窗中右擊專案。
- 然後,選擇選項參考並瀏覽下載參考的位置。
- 接下來,按一下確定以新增參考。
6.安裝 PDFNet SDK
PDFNet SDK 可以四種不同的方式下載和安裝。
- 使用 Visual Studio NuGet Package Manager。
- 使用 Visual Studio 命令列。
- 直接從 NuGet Gallery PDFNet Package 下載。
- 使用 PDFNetLoader.dll
6.1.使用 Visual Studio NuGet 套件管理員。
如上所述,進入 Visual Studio 中的工具並開啟 NuGet 套件管理員。 將會出現清單 - 請按一下管理 NuGet 套件以取得解決方案。
將會出現一個帶有搜尋列的視窗。 搜尋 PDFNet 並將其安裝在專案中。
6.2.使用 Visual Studio 命令列。
- 在 Visual Studio 功能表中,前往 工具 > NuGet 套件管理員 > 套件管理員控制台
- 在套件管理員控制台索引標籤中輸入以下一行:
Install-Package PDFNet -Version 9.2.0
6.3.直接從 NuGet 網頁下載。
第三種方式是直接從 NuGet Gallery PDFNet Package 下載 NuGet 套件。
- 請從右側功能表中選擇下載套件選項。
- 雙擊下載的套件開始安裝程序。
6.4.使用 PDFNetLoader.dll
您也可以使用 PDFNetLoader.dll 檔案安裝 PDFNet API。請從 GitHub Releases for PDFNetLoader.dll 下載。
下載套件,將其放置在專案的 bin 檔案中,並執行它。 在您的 Visual Studio 專案中,新增 PDFNetLoader.dll 作為參考。
Bootstrap 和 CSS 框架渲染
現代的 Web 應用程式非常依賴 Bootstrap 和 CSS 架構,以達到一致的回應式設計。 當從網頁內容產生 PDF 時,能夠準確呈現這些框架而不需修改,對於維持設計一致性及減少開發量是非常重要的。
IronPDF:完整的 Bootstrap 框架支援。
Bootstrap 5:完整的 Flexbox 佈局系統、CSS Grid、實用類別和所有元件庫 Bootstrap 4:完整的卡片元件、導航、彈性實用程式和響應式設計 Tailwind CSS:所有實用優先的類別都能以瀏覽器精確度渲染。 -基礎:完整的網格系統和組件支持 現代CSS3: Flexbox、CSS Grid、自訂屬性、動畫、轉換與變換
真實世界驗證:IronPDF 以像素級的完美逼真度渲染Bootstrap首頁和所有官方範例。
程式碼範例:學習管理系統控制面板
using IronPdf;
// Set your IronPDF license key
IronPdf.License.LicenseKey = "License-Key goes here";
var renderer = new ChromePdfRenderer();
string bootstrapLMS = @"
<!DOCTYPE html>
<html>
<head>
<link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
</head>
<body>
<div class='container-fluid py-4'>
<div class='d-flex justify-content-between align-items-center mb-4'>
<div>
<h1 class='display-6 mb-1'>Student Learning Dashboard</h1>
<p class='text-muted mb-0'>Spring Semester 2025</p>
</div>
<span class='badge bg-success fs-5'>92% Overall Progress</span>
</div>
<div class='row g-4 mb-4'>
<div class='col-md-3'>
<div class='card text-center shadow-sm border-primary'>
<div class='card-body'>
<div class='text-primary mb-2' style='font-size: 2rem;'>📚</div>
<h3 class='mb-1'>6/8</h3>
<p class='text-muted mb-0'>Courses Completed</p>
</div>
</div>
</div>
<div class='col-md-3'>
<div class='card text-center shadow-sm border-success'>
<div class='card-body'>
<div class='text-success mb-2' style='font-size: 2rem;'>🎯</div>
<h3 class='mb-1'>24/28</h3>
<p class='text-muted mb-0'>Assignments Submitted</p>
</div>
</div>
</div>
<div class='col-md-3'>
<div class='card text-center shadow-sm border-warning'>
<div class='card-body'>
<div class='text-warning mb-2' style='font-size: 2rem;'>⏱️</div>
<h3 class='mb-1'>48hrs</h3>
<p class='text-muted mb-0'>Study Time This Week</p>
</div>
</div>
</div>
<div class='col-md-3'>
<div class='card text-center shadow-sm border-info'>
<div class='card-body'>
<div class='text-info mb-2' style='font-size: 2rem;'>⭐</div>
<h3 class='mb-1'>A- Average</h3>
<p class='text-muted mb-0'>Current GPA: 3.7</p>
</div>
</div>
</div>
</div>
<div class='row g-4'>
<div class='col-md-8'>
<div class='card shadow-sm'>
<div class='card-header bg-primary text-white'>
<h5 class='mb-0'>Current Courses</h5>
</div>
<div class='card-body p-0'>
<div class='list-group list-group-flush'>
<div class='list-group-item'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<div>
<h6 class='mb-1'>Advanced Web Development</h6>
<small class='text-muted'>Prof. Johnson | Mondays & Wednesdays, 2:00 PM</small>
</div>
<span class='badge bg-success'>Grade: A</span>
</div>
<div class='progress' style='height: 6px;'>
<div class='progress-bar bg-success' style='width: 95%'></div>
</div>
<small class='text-muted'>95% Complete | Final Project Due: May 15</small>
</div>
<div class='list-group-item'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<div>
<h6 class='mb-1'>Database Systems</h6>
<small class='text-muted'>Prof. Chen | Tuesdays & Thursdays, 10:00 AM</small>
</div>
<span class='badge bg-primary'>Grade: A-</span>
</div>
<div class='progress' style='height: 6px;'>
<div class='progress-bar bg-primary' style='width: 88%'></div>
</div>
<small class='text-muted'>88% Complete | Midterm: April 28</small>
</div>
<div class='list-group-item'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<div>
<h6 class='mb-1'>Artificial Intelligence Fundamentals</h6>
<small class='text-muted'>Prof. Martinez | Fridays, 1:00 PM</small>
</div>
<span class='badge bg-warning text-dark'>Grade: B+</span>
</div>
<div class='progress' style='height: 6px;'>
<div class='progress-bar bg-warning' style='width: 75%'></div>
</div>
<small class='text-muted'>75% Complete | Research Paper Due: May 5</small>
</div>
<div class='list-group-item'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<div>
<h6 class='mb-1'>Computer Networks</h6>
<small class='text-muted'>Prof. Davis | Mondays & Wednesdays, 4:00 PM</small>
</div>
<span class='badge bg-success'>Grade: A</span>
</div>
<div class='progress' style='height: 6px;'>
<div class='progress-bar bg-success' style='width: 92%'></div>
</div>
<small class='text-muted'>92% Complete | Lab Exam: April 30</small>
</div>
</div>
</div>
</div>
</div>
<div class='col-md-4'>
<div class='card shadow-sm mb-3'>
<div class='card-header bg-warning text-dark'>
<h5 class='mb-0'>Upcoming Deadlines</h5>
</div>
<div class='card-body p-0'>
<ul class='list-group list-group-flush'>
<li class='list-group-item'>
<div class='d-flex align-items-start'>
<span class='badge bg-danger me-2'>Today</span>
<div class='flex-grow-1'>
<small><strong>AI Assignment 4</strong></small>
<br><small class='text-muted'>Neural Networks Lab</small>
</div>
</div>
</li>
<li class='list-group-item'>
<div class='d-flex align-items-start'>
<span class='badge bg-warning text-dark me-2'>Apr 28</span>
<div class='flex-grow-1'>
<small><strong>Database Midterm</strong></small>
<br><small class='text-muted'>Chapters 1-8</small>
</div>
</div>
</li>
<li class='list-group-item'>
<div class='d-flex align-items-start'>
<span class='badge bg-info me-2'>Apr 30</span>
<div class='flex-grow-1'>
<small><strong>Networks Lab Exam</strong></small>
<br><small class='text-muted'>Practical Assessment</small>
</div>
</div>
</li>
<li class='list-group-item'>
<div class='d-flex align-items-start'>
<span class='badge bg-primary me-2'>May 5</span>
<div class='flex-grow-1'>
<small><strong>AI Research Paper</strong></small>
<br><small class='text-muted'>15-20 pages</small>
</div>
</div>
</li>
</ul>
</div>
</div>
<div class='card shadow-sm'>
<div class='card-header bg-info text-white'>
<h5 class='mb-0'>Study Resources</h5>
</div>
<div class='card-body'>
<div class='d-grid gap-2'>
<button class='btn btn-outline-primary btn-sm'>📖 Course Materials</button>
<button class='btn btn-outline-primary btn-sm'>💬 Discussion Forums</button>
<button class='btn btn-outline-primary btn-sm'>🎥 Recorded Lectures</button>
<button class='btn btn-outline-primary btn-sm'>📝 Practice Quizzes</button>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(bootstrapLMS);
pdf.SaveAs("lms-dashboard.pdf");
using IronPdf;
// Set your IronPDF license key
IronPdf.License.LicenseKey = "License-Key goes here";
var renderer = new ChromePdfRenderer();
string bootstrapLMS = @"
<!DOCTYPE html>
<html>
<head>
<link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
</head>
<body>
<div class='container-fluid py-4'>
<div class='d-flex justify-content-between align-items-center mb-4'>
<div>
<h1 class='display-6 mb-1'>Student Learning Dashboard</h1>
<p class='text-muted mb-0'>Spring Semester 2025</p>
</div>
<span class='badge bg-success fs-5'>92% Overall Progress</span>
</div>
<div class='row g-4 mb-4'>
<div class='col-md-3'>
<div class='card text-center shadow-sm border-primary'>
<div class='card-body'>
<div class='text-primary mb-2' style='font-size: 2rem;'>📚</div>
<h3 class='mb-1'>6/8</h3>
<p class='text-muted mb-0'>Courses Completed</p>
</div>
</div>
</div>
<div class='col-md-3'>
<div class='card text-center shadow-sm border-success'>
<div class='card-body'>
<div class='text-success mb-2' style='font-size: 2rem;'>🎯</div>
<h3 class='mb-1'>24/28</h3>
<p class='text-muted mb-0'>Assignments Submitted</p>
</div>
</div>
</div>
<div class='col-md-3'>
<div class='card text-center shadow-sm border-warning'>
<div class='card-body'>
<div class='text-warning mb-2' style='font-size: 2rem;'>⏱️</div>
<h3 class='mb-1'>48hrs</h3>
<p class='text-muted mb-0'>Study Time This Week</p>
</div>
</div>
</div>
<div class='col-md-3'>
<div class='card text-center shadow-sm border-info'>
<div class='card-body'>
<div class='text-info mb-2' style='font-size: 2rem;'>⭐</div>
<h3 class='mb-1'>A- Average</h3>
<p class='text-muted mb-0'>Current GPA: 3.7</p>
</div>
</div>
</div>
</div>
<div class='row g-4'>
<div class='col-md-8'>
<div class='card shadow-sm'>
<div class='card-header bg-primary text-white'>
<h5 class='mb-0'>Current Courses</h5>
</div>
<div class='card-body p-0'>
<div class='list-group list-group-flush'>
<div class='list-group-item'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<div>
<h6 class='mb-1'>Advanced Web Development</h6>
<small class='text-muted'>Prof. Johnson | Mondays & Wednesdays, 2:00 PM</small>
</div>
<span class='badge bg-success'>Grade: A</span>
</div>
<div class='progress' style='height: 6px;'>
<div class='progress-bar bg-success' style='width: 95%'></div>
</div>
<small class='text-muted'>95% Complete | Final Project Due: May 15</small>
</div>
<div class='list-group-item'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<div>
<h6 class='mb-1'>Database Systems</h6>
<small class='text-muted'>Prof. Chen | Tuesdays & Thursdays, 10:00 AM</small>
</div>
<span class='badge bg-primary'>Grade: A-</span>
</div>
<div class='progress' style='height: 6px;'>
<div class='progress-bar bg-primary' style='width: 88%'></div>
</div>
<small class='text-muted'>88% Complete | Midterm: April 28</small>
</div>
<div class='list-group-item'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<div>
<h6 class='mb-1'>Artificial Intelligence Fundamentals</h6>
<small class='text-muted'>Prof. Martinez | Fridays, 1:00 PM</small>
</div>
<span class='badge bg-warning text-dark'>Grade: B+</span>
</div>
<div class='progress' style='height: 6px;'>
<div class='progress-bar bg-warning' style='width: 75%'></div>
</div>
<small class='text-muted'>75% Complete | Research Paper Due: May 5</small>
</div>
<div class='list-group-item'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<div>
<h6 class='mb-1'>Computer Networks</h6>
<small class='text-muted'>Prof. Davis | Mondays & Wednesdays, 4:00 PM</small>
</div>
<span class='badge bg-success'>Grade: A</span>
</div>
<div class='progress' style='height: 6px;'>
<div class='progress-bar bg-success' style='width: 92%'></div>
</div>
<small class='text-muted'>92% Complete | Lab Exam: April 30</small>
</div>
</div>
</div>
</div>
</div>
<div class='col-md-4'>
<div class='card shadow-sm mb-3'>
<div class='card-header bg-warning text-dark'>
<h5 class='mb-0'>Upcoming Deadlines</h5>
</div>
<div class='card-body p-0'>
<ul class='list-group list-group-flush'>
<li class='list-group-item'>
<div class='d-flex align-items-start'>
<span class='badge bg-danger me-2'>Today</span>
<div class='flex-grow-1'>
<small><strong>AI Assignment 4</strong></small>
<br><small class='text-muted'>Neural Networks Lab</small>
</div>
</div>
</li>
<li class='list-group-item'>
<div class='d-flex align-items-start'>
<span class='badge bg-warning text-dark me-2'>Apr 28</span>
<div class='flex-grow-1'>
<small><strong>Database Midterm</strong></small>
<br><small class='text-muted'>Chapters 1-8</small>
</div>
</div>
</li>
<li class='list-group-item'>
<div class='d-flex align-items-start'>
<span class='badge bg-info me-2'>Apr 30</span>
<div class='flex-grow-1'>
<small><strong>Networks Lab Exam</strong></small>
<br><small class='text-muted'>Practical Assessment</small>
</div>
</div>
</li>
<li class='list-group-item'>
<div class='d-flex align-items-start'>
<span class='badge bg-primary me-2'>May 5</span>
<div class='flex-grow-1'>
<small><strong>AI Research Paper</strong></small>
<br><small class='text-muted'>15-20 pages</small>
</div>
</div>
</li>
</ul>
</div>
</div>
<div class='card shadow-sm'>
<div class='card-header bg-info text-white'>
<h5 class='mb-0'>Study Resources</h5>
</div>
<div class='card-body'>
<div class='d-grid gap-2'>
<button class='btn btn-outline-primary btn-sm'>📖 Course Materials</button>
<button class='btn btn-outline-primary btn-sm'>💬 Discussion Forums</button>
<button class='btn btn-outline-primary btn-sm'>🎥 Recorded Lectures</button>
<button class='btn btn-outline-primary btn-sm'>📝 Practice Quizzes</button>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(bootstrapLMS);
pdf.SaveAs("lms-dashboard.pdf");
Imports IronPdf
' Set your IronPDF license key
IronPdf.License.LicenseKey = "License-Key goes here"
Dim renderer As New ChromePdfRenderer()
Dim bootstrapLMS As String = "
<!DOCTYPE html>
<html>
<head>
<link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
</head>
<body>
<div class='container-fluid py-4'>
<div class='d-flex justify-content-between align-items-center mb-4'>
<div>
<h1 class='display-6 mb-1'>Student Learning Dashboard</h1>
<p class='text-muted mb-0'>Spring Semester 2025</p>
</div>
<span class='badge bg-success fs-5'>92% Overall Progress</span>
</div>
<div class='row g-4 mb-4'>
<div class='col-md-3'>
<div class='card text-center shadow-sm border-primary'>
<div class='card-body'>
<div class='text-primary mb-2' style='font-size: 2rem;'>📚</div>
<h3 class='mb-1'>6/8</h3>
<p class='text-muted mb-0'>Courses Completed</p>
</div>
</div>
</div>
<div class='col-md-3'>
<div class='card text-center shadow-sm border-success'>
<div class='card-body'>
<div class='text-success mb-2' style='font-size: 2rem;'>🎯</div>
<h3 class='mb-1'>24/28</h3>
<p class='text-muted mb-0'>Assignments Submitted</p>
</div>
</div>
</div>
<div class='col-md-3'>
<div class='card text-center shadow-sm border-warning'>
<div class='card-body'>
<div class='text-warning mb-2' style='font-size: 2rem;'>⏱️</div>
<h3 class='mb-1'>48hrs</h3>
<p class='text-muted mb-0'>Study Time This Week</p>
</div>
</div>
</div>
<div class='col-md-3'>
<div class='card text-center shadow-sm border-info'>
<div class='card-body'>
<div class='text-info mb-2' style='font-size: 2rem;'>⭐</div>
<h3 class='mb-1'>A- Average</h3>
<p class='text-muted mb-0'>Current GPA: 3.7</p>
</div>
</div>
</div>
</div>
<div class='row g-4'>
<div class='col-md-8'>
<div class='card shadow-sm'>
<div class='card-header bg-primary text-white'>
<h5 class='mb-0'>Current Courses</h5>
</div>
<div class='card-body p-0'>
<div class='list-group list-group-flush'>
<div class='list-group-item'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<div>
<h6 class='mb-1'>Advanced Web Development</h6>
<small class='text-muted'>Prof. Johnson | Mondays & Wednesdays, 2:00 PM</small>
</div>
<span class='badge bg-success'>Grade: A</span>
</div>
<div class='progress' style='height: 6px;'>
<div class='progress-bar bg-success' style='width: 95%'></div>
</div>
<small class='text-muted'>95% Complete | Final Project Due: May 15</small>
</div>
<div class='list-group-item'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<div>
<h6 class='mb-1'>Database Systems</h6>
<small class='text-muted'>Prof. Chen | Tuesdays & Thursdays, 10:00 AM</small>
</div>
<span class='badge bg-primary'>Grade: A-</span>
</div>
<div class='progress' style='height: 6px;'>
<div class='progress-bar bg-primary' style='width: 88%'></div>
</div>
<small class='text-muted'>88% Complete | Midterm: April 28</small>
</div>
<div class='list-group-item'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<div>
<h6 class='mb-1'>Artificial Intelligence Fundamentals</h6>
<small class='text-muted'>Prof. Martinez | Fridays, 1:00 PM</small>
</div>
<span class='badge bg-warning text-dark'>Grade: B+</span>
</div>
<div class='progress' style='height: 6px;'>
<div class='progress-bar bg-warning' style='width: 75%'></div>
</div>
<small class='text-muted'>75% Complete | Research Paper Due: May 5</small>
</div>
<div class='list-group-item'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<div>
<h6 class='mb-1'>Computer Networks</h6>
<small class='text-muted'>Prof. Davis | Mondays & Wednesdays, 4:00 PM</small>
</div>
<span class='badge bg-success'>Grade: A</span>
</div>
<div class='progress' style='height: 6px;'>
<div class='progress-bar bg-success' style='width: 92%'></div>
</div>
<small class='text-muted'>92% Complete | Lab Exam: April 30</small>
</div>
</div>
</div>
</div>
</div>
<div class='col-md-4'>
<div class='card shadow-sm mb-3'>
<div class='card-header bg-warning text-dark'>
<h5 class='mb-0'>Upcoming Deadlines</h5>
</div>
<div class='card-body p-0'>
<ul class='list-group list-group-flush'>
<li class='list-group-item'>
<div class='d-flex align-items-start'>
<span class='badge bg-danger me-2'>Today</span>
<div class='flex-grow-1'>
<small><strong>AI Assignment 4</strong></small>
<br><small class='text-muted'>Neural Networks Lab</small>
</div>
</div>
</li>
<li class='list-group-item'>
<div class='d-flex align-items-start'>
<span class='badge bg-warning text-dark me-2'>Apr 28</span>
<div class='flex-grow-1'>
<small><strong>Database Midterm</strong></small>
<br><small class='text-muted'>Chapters 1-8</small>
</div>
</div>
</li>
<li class='list-group-item'>
<div class='d-flex align-items-start'>
<span class='badge bg-info me-2'>Apr 30</span>
<div class='flex-grow-1'>
<small><strong>Networks Lab Exam</strong></small>
<br><small class='text-muted'>Practical Assessment</small>
</div>
</div>
</li>
<li class='list-group-item'>
<div class='d-flex align-items-start'>
<span class='badge bg-primary me-2'>May 5</span>
<div class='flex-grow-1'>
<small><strong>AI Research Paper</strong></small>
<br><small class='text-muted'>15-20 pages</small>
</div>
</div>
</li>
</ul>
</div>
</div>
<div class='card shadow-sm'>
<div class='card-header bg-info text-white'>
<h5 class='mb-0'>Study Resources</h5>
</div>
<div class='card-body'>
<div class='d-grid gap-2'>
<button class='btn btn-outline-primary btn-sm'>📖 Course Materials</button>
<button class='btn btn-outline-primary btn-sm'>💬 Discussion Forums</button>
<button class='btn btn-outline-primary btn-sm'>🎥 Recorded Lectures</button>
<button class='btn btn-outline-primary btn-sm'>📝 Practice Quizzes</button>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>"
Dim pdf = renderer.RenderHtmlAsPdf(bootstrapLMS)
pdf.SaveAs("lms-dashboard.pdf")
輸出:採用 Bootstrap 5 網格系統、卡片組件、進度條、徽章、flexbox 佈局和列表組的專業學習管理系統 PDF——所有元素均以完美的間距、排版和色彩準確性呈現。
PDFNet (Apryse):部分現代 CSS 支援
PDFNet 使用自訂的 HTML 呈現引擎,並選擇性地支援 CSS3:
- Flexbox 實作有限: Bootstrap 4/5 基於 Flexbox 的佈局可能渲染不一致 -部分 CSS Grid 支援:基於網格的設計通常需要備用方案
- JavaScript 限制:與完整的瀏覽器環境相比,執行量最小 -框架測試是必需的: Bootstrap 元件在投入生產環境之前需要進行驗證。
開發影響:團隊必須單獨測試每個 Bootstrap 元件,並且經常為 PDFNet 創建簡化的佈局或替代 CSS,這增加了複雜性並降低了設計一致性。
如需全面的 Bootstrap 框架指南和現代 CSS 渲染功能,請參閱 Bootstrap & Flexbox CSS 指南。
7.列印 PDF 檔案(程式碼範例)
列印 PDF 檔案是處理 PDF 的現代應用程式必須具備的功能。 在此,我們將討論如何使用這兩種工具列印 PDF 檔案。
7.1.使用 IronPDF 列印 PDF 檔案。
IronPDF 透過傳送至電腦的預設印表機來列印 PDF。 這將會開啟 Windows 列印介面 - 只要按一下列印即可實現。
using IronPdf;
class PrintPDF
{
static void Main(string[] args)
{
// Create a new PDF and print it
var Renderer = new IronPdf.ChromePdfRenderer();
PdfDocument Pdf = Renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf");
// Send the PDF to the default printer to print
Pdf.Print(300, false);
}
}
using IronPdf;
class PrintPDF
{
static void Main(string[] args)
{
// Create a new PDF and print it
var Renderer = new IronPdf.ChromePdfRenderer();
PdfDocument Pdf = Renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf");
// Send the PDF to the default printer to print
Pdf.Print(300, false);
}
}
Imports IronPdf
Friend Class PrintPDF
Shared Sub Main(ByVal args() As String)
' Create a new PDF and print it
Dim Renderer = New IronPdf.ChromePdfRenderer()
Dim Pdf As PdfDocument = Renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf")
' Send the PDF to the default printer to print
Pdf.Print(300, False)
End Sub
End Class
7.2.使用 PDFNet 列印 PDF 檔案。
PDFTron 的 PDFNet SDK 也提供列印功能。 以下是在 PDFNet 中列印 PDF 檔案的原始碼片段。
using System;
using pdftron;
using pdftron.PDF;
using pdftron.Common;
using pdftron.Filters;
namespace PDFPrintTestCS
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Opening the input file...");
using (PDFDoc pdfdoc = new PDFDoc("tiger.pdf"))
{
pdfdoc.InitSecurityHandler();
Console.WriteLine("Printing the input file using PDF.Print.StartPrintJob...");
PrinterMode printerMode = new PrinterMode();
printerMode.SetAutoCenter(true);
printerMode.SetAutoRotate(true);
printerMode.SetCollation(true);
printerMode.SetCopyCount(1);
printerMode.SetDPI(300); // Set print quality to 300 DPI
printerMode.SetDuplexing(PrinterMode.DuplexMode.e_Duplex_Auto);
printerMode.SetNUp(PrinterMode.NUp.e_NUp_1_1, PrinterMode.NUpPageOrder.e_PageOrder_LeftToRightThenTopToBottom);
printerMode.SetOrientation(PrinterMode.Orientation.e_Orientation_Portrait);
printerMode.SetOutputAnnot(PrinterMode.PrintContentTypes.e_PrintContent_DocumentAndAnnotations);
printerMode.SetOutputColor(PrinterMode.OutputColor.e_OutputColor_Grayscale);
printerMode.SetOutputPageBorder(false);
printerMode.SetOutputQuality(PrinterMode.OutputQuality.e_OutputQuality_Medium);
printerMode.SetPaperSize(new Rect(0, 0, 612, 792));
PageSet pagesToPrint = new PageSet(1, pdfdoc.GetPageCount(), PageSet.Filter.e_all);
Print.StartPrintJob(pdfdoc, "", pdfdoc.GetFileName(), "", pagesToPrint, printerMode, null);
}
}
}
}
using System;
using pdftron;
using pdftron.PDF;
using pdftron.Common;
using pdftron.Filters;
namespace PDFPrintTestCS
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Opening the input file...");
using (PDFDoc pdfdoc = new PDFDoc("tiger.pdf"))
{
pdfdoc.InitSecurityHandler();
Console.WriteLine("Printing the input file using PDF.Print.StartPrintJob...");
PrinterMode printerMode = new PrinterMode();
printerMode.SetAutoCenter(true);
printerMode.SetAutoRotate(true);
printerMode.SetCollation(true);
printerMode.SetCopyCount(1);
printerMode.SetDPI(300); // Set print quality to 300 DPI
printerMode.SetDuplexing(PrinterMode.DuplexMode.e_Duplex_Auto);
printerMode.SetNUp(PrinterMode.NUp.e_NUp_1_1, PrinterMode.NUpPageOrder.e_PageOrder_LeftToRightThenTopToBottom);
printerMode.SetOrientation(PrinterMode.Orientation.e_Orientation_Portrait);
printerMode.SetOutputAnnot(PrinterMode.PrintContentTypes.e_PrintContent_DocumentAndAnnotations);
printerMode.SetOutputColor(PrinterMode.OutputColor.e_OutputColor_Grayscale);
printerMode.SetOutputPageBorder(false);
printerMode.SetOutputQuality(PrinterMode.OutputQuality.e_OutputQuality_Medium);
printerMode.SetPaperSize(new Rect(0, 0, 612, 792));
PageSet pagesToPrint = new PageSet(1, pdfdoc.GetPageCount(), PageSet.Filter.e_all);
Print.StartPrintJob(pdfdoc, "", pdfdoc.GetFileName(), "", pagesToPrint, printerMode, null);
}
}
}
}
Imports System
Imports pdftron
Imports pdftron.PDF
Imports pdftron.Common
Imports pdftron.Filters
Namespace PDFPrintTestCS
Friend Class Program
Shared Sub Main(ByVal args() As String)
Console.WriteLine("Opening the input file...")
Using pdfdoc As New PDFDoc("tiger.pdf")
pdfdoc.InitSecurityHandler()
Console.WriteLine("Printing the input file using PDF.Print.StartPrintJob...")
Dim printerMode As New PrinterMode()
printerMode.SetAutoCenter(True)
printerMode.SetAutoRotate(True)
printerMode.SetCollation(True)
printerMode.SetCopyCount(1)
printerMode.SetDPI(300) ' Set print quality to 300 DPI
printerMode.SetDuplexing(PrinterMode.DuplexMode.e_Duplex_Auto)
printerMode.SetNUp(PrinterMode.NUp.e_NUp_1_1, PrinterMode.NUpPageOrder.e_PageOrder_LeftToRightThenTopToBottom)
printerMode.SetOrientation(PrinterMode.Orientation.e_Orientation_Portrait)
printerMode.SetOutputAnnot(PrinterMode.PrintContentTypes.e_PrintContent_DocumentAndAnnotations)
printerMode.SetOutputColor(PrinterMode.OutputColor.e_OutputColor_Grayscale)
printerMode.SetOutputPageBorder(False)
printerMode.SetOutputQuality(PrinterMode.OutputQuality.e_OutputQuality_Medium)
printerMode.SetPaperSize(New Rect(0, 0, 612, 792))
Dim pagesToPrint As New PageSet(1, pdfdoc.GetPageCount(), PageSet.Filter.e_all)
Print.StartPrintJob(pdfdoc, "", pdfdoc.GetFileName(), "", pagesToPrint, printerMode, Nothing)
End Using
End Sub
End Class
End Namespace
8.從 HTML 製作 PDF。
兩個函式庫都具備 HTML 至 PDF 的轉換功能,但方法略有不同。
8.1.使用 IronPDF 從 HTML 製作 PDF。
IronPDF 不需要使用 JSON 或加密機制。 IronPDF 支援多種方法。 舉例來說
HTML 檔案轉換為 PDF
using IronPdf;
class HtmlToPdf
{
static void Main(string[] args)
{
var Renderer = new IronPdf.ChromePdfRenderer();
Renderer.RenderHtmlAsPdf("<h1>Html with CSS and Images</h1>").SaveAs("pixel-perfect.pdf");
}
}
using IronPdf;
class HtmlToPdf
{
static void Main(string[] args)
{
var Renderer = new IronPdf.ChromePdfRenderer();
Renderer.RenderHtmlAsPdf("<h1>Html with CSS and Images</h1>").SaveAs("pixel-perfect.pdf");
}
}
Imports IronPdf
Friend Class HtmlToPdf
Shared Sub Main(ByVal args() As String)
Dim Renderer = New IronPdf.ChromePdfRenderer()
Renderer.RenderHtmlAsPdf("<h1>Html with CSS and Images</h1>").SaveAs("pixel-perfect.pdf")
End Sub
End Class
URL 至 PDF
using IronPdf;
class UrlToPdf
{
static void Main(string[] args)
{
IronPdf.ChromePdfRenderer Renderer = new IronPdf.ChromePdfRenderer();
var Pdf = Renderer.RenderUrlAsPdf("https://ironpdf.com/");
Pdf.SaveAs("url.pdf");
}
}
using IronPdf;
class UrlToPdf
{
static void Main(string[] args)
{
IronPdf.ChromePdfRenderer Renderer = new IronPdf.ChromePdfRenderer();
var Pdf = Renderer.RenderUrlAsPdf("https://ironpdf.com/");
Pdf.SaveAs("url.pdf");
}
}
Imports IronPdf
Friend Class UrlToPdf
Shared Sub Main(ByVal args() As String)
Dim Renderer As New IronPdf.ChromePdfRenderer()
Dim Pdf = Renderer.RenderUrlAsPdf("https://ironpdf.com/")
Pdf.SaveAs("url.pdf")
End Sub
End Class
8.2.使用 PDFNet 從 HTML 製作 PDF。
PDFNet 還提供 HTML 到 PDF 的轉換功能,使用頁面轉換和 URL 轉換兩種方式。 由於程式碼冗長,我們在此只提供一個範例。
class HTML2PDFSample
{
private static pdftron.PDFNetLoader pdfNetLoader = pdftron.PDFNetLoader.Instance();
static HTML2PDFSample() {}
static void Main(string[] args)
{
string output_path = "../../../../TestFiles/Output/html2pdf_example";
string host = "https://www.pdftron.com";
HTML2PDF.SetModulePath("../../../../../Lib");
if (!HTML2PDF.IsModuleAvailable())
{
Console.WriteLine();
Console.WriteLine("Unable to run HTML2PDFTest: PDFTron SDK HTML2PDF module not available.");
return;
}
try
{
using (PDFDoc doc = new PDFDoc())
{
if (HTML2PDF.Convert(doc, host + "/"))
doc.Save(output_path + "_01.pdf", SDFDoc.SaveOptions.e_linearized);
else
Console.WriteLine("Conversion failed.");
}
}
catch (PDFNetException e)
{
Console.WriteLine(e.Message);
}
}
}
class HTML2PDFSample
{
private static pdftron.PDFNetLoader pdfNetLoader = pdftron.PDFNetLoader.Instance();
static HTML2PDFSample() {}
static void Main(string[] args)
{
string output_path = "../../../../TestFiles/Output/html2pdf_example";
string host = "https://www.pdftron.com";
HTML2PDF.SetModulePath("../../../../../Lib");
if (!HTML2PDF.IsModuleAvailable())
{
Console.WriteLine();
Console.WriteLine("Unable to run HTML2PDFTest: PDFTron SDK HTML2PDF module not available.");
return;
}
try
{
using (PDFDoc doc = new PDFDoc())
{
if (HTML2PDF.Convert(doc, host + "/"))
doc.Save(output_path + "_01.pdf", SDFDoc.SaveOptions.e_linearized);
else
Console.WriteLine("Conversion failed.");
}
}
catch (PDFNetException e)
{
Console.WriteLine(e.Message);
}
}
}
Friend Class HTML2PDFSample
Private Shared pdfNetLoader As pdftron.PDFNetLoader = pdftron.PDFNetLoader.Instance()
Shared Sub New()
End Sub
Shared Sub Main(ByVal args() As String)
Dim output_path As String = "../../../../TestFiles/Output/html2pdf_example"
Dim host As String = "https://www.pdftron.com"
HTML2PDF.SetModulePath("../../../../../Lib")
If Not HTML2PDF.IsModuleAvailable() Then
Console.WriteLine()
Console.WriteLine("Unable to run HTML2PDFTest: PDFTron SDK HTML2PDF module not available.")
Return
End If
Try
Using doc As New PDFDoc()
If HTML2PDF.Convert(doc, host & "/") Then
doc.Save(output_path & "_01.pdf", SDFDoc.SaveOptions.e_linearized)
Else
Console.WriteLine("Conversion failed.")
End If
End Using
Catch e As PDFNetException
Console.WriteLine(e.Message)
End Try
End Sub
End Class
9.授權
IronPDF 是一個提供免費開發者授權的函式庫。 IronPDF 也提供特殊的定價結構:輕量級套餐起價為 $999,沒有隱藏費用。 也可以重新分配 SaaS 和 OEM 產品。 所有授權包括 30 天退款保證、一年的軟體支援與升級、開發/測試/暫存/生產有效性,以及永久授權(一次性購買)。 IronPDF 授權可針對使用者的需求提供最大效能。 前往此IronPDF 授權頁面,查看 IronPDF 的整個價格結構和授權。
PDFTron PDFNet SDK 提供多種授權選擇,可依您的業務需求量身打造。 企業和 OEM 再發行附有三種類型的授權。 企業授權僅供組織使用,不得用於應用程式散佈。 其他需要檔案系統存取的 API 也包含在授權中。 所有授權都附有授權金鑰。 這三種授權類型是
- 檢視器
- 檢視器與注解
- 核心 SDK
有關其授權結構的進一步資訊,請造訪此 PDFTron 授權資訊頁面。
10.結論
IronPDF 提供了許多處理 PDF 檔案以及將檔案轉換為不同格式的特色與功能。 從 HTML 到 PDF 的轉換,會以適合高品質商業印刷的向量格式製作。 因此,您將收到一份清晰、高品質的 PDF。 授權與定價資訊可在網站上找到。
與 IronPDF 相似,PDFNet 可協助 PDF 檔案的轉換、註釋、簽名、填充、轉換和編輯。 它支援多種平台,包括 Windows、iOS、Android、WEB 和 Linux。 若要投入生產使用,PDFNet SDK 需要產品金鑰。
IronPDF 的許可證是以開發人員為中心的,這意味著您必須根據有多少開發人員要使用該產品來取得許可證。 另一方面,PDFNet 授權並非以相同的方式運作,而是以基於功能的授權方式運作。 這表示您必須取得支援所需功能的授權。 IronPDF 授權包含開箱即用的所有功能。 使用 PDFNet 時,某些功能 (例如文件轉換) 需要購買附加元件。
IronPDF 函式庫以有條理的方式提供功能,讓您可以輕鬆寫出使用幾行程式碼就能執行大型任務的程式碼。 Iron Software 目前提供五種工具的套件,價格僅為兩種。 Iron Suite 所包含的工具有:
請造訪此Iron Suite 資訊頁面以探索 Iron Suite。
常見問題解答
文章中比較的主要 PDF 庫是哪些?
文章比較了由 Iron Software 開發的 IronPDF 和 PDFTron 的 PDFNet,重點介紹了這些庫在 .NET Framework中對 C# 開發人員的功能。
怎樣在 C# 中將 HTML 轉換為 PDF?
您可以使用 IronPDF 的 RenderHtmlAsPdf 方法將 HTML 字符串轉換為 PDF。此外,您還可以使用 IronPDF 強大的 Chromium 引擎將 HTML 文件和 URL 轉換為 PDF。
IronPDF 支持哪些操作系統?
IronPDF 支持多個操作系統,包括 Windows、Azure 和 Docker,允許無縫整合到不同的開發環境中。
IronPDF 如何處理 PDF 資料提取?
IronPDF 允許高效的 PDF 資料提取,使開發人員可以輕鬆地從 PDF 文檔中檢索文本和圖像進行進一步處理。
IronPDF 的安裝選項有哪些?
IronPDF 可以通過 Visual Studio NuGet 套件管理器、Visual Studio 命令行或直接從 NuGet 畫廊安裝,確保開發人員易於設置。
IronPDF 和 PDFNet 之間的許可差異是什麼?
IronPDF 提供以開發者為中心的許可,其中包含所有功能,而 PDFNet 許可是基於功能的,可能需要為特定功能進行額外購買。
IronPDF 適合大型 PDF 任務嗎?
是的,IronPDF 以其易於使用和最少的代碼要求而受到讚譽,非常適合高效地處理大型 PDF 任務。
Iron Software 套件中包含哪些其他工具?
Iron Software 套件包括 IronBarcode、IronXL、IronOCR、IronPDF 和 IronWebscraper,以一個套裝包形式提供,增加了其對開發人員的吸引力。

