VectSharp vs IronPDF:技術比較指南
當.NET開發人員需要建立 PDF 文件時,他們會遇到設計理念截然不同的程式庫。 VectSharp 和IronPDF代表了兩種截然不同的 PDF 生成方法:一種專注於向量圖形和科學視覺化,另一種則專注於從 HTML 內容建立文件。 本次技術比較將對這兩個函式庫進行分析,以協助架構師和開發人員根據自身俱體需求選擇合適的工具。
了解 VectSharp
VectSharp 是一個向量圖形庫,旨在幫助開發人員創建複雜的基於向量的圖形並將其匯出為 PDF 檔案。 與專注於文件創建的傳統 PDF 庫不同,VectSharp 專門處理向量圖形,因此特別適合需要高精度繪圖的應用,例如科學視覺化、圖表和技術插圖。
函式庫採用基於座標的 API 來產生 PDF,開發人員可以透過精確的 X、Y 座標來定位每個元素:
-科學應用:主要用於資料視覺化、繪圖和圖表創建 -基於座標的繪圖:所有元素都需要使用從左上角原點出發的點進行明確定位。 -圖形優先範式:專為創建圖表而非商業文件的科學家而設計 -開源:根據 LGPL 授權發布,允許在無需商業許可的情況下進行自訂。
VectSharp 的局限性
VectSharp 的專業化特性對通用文件產生提出了限制:
-不支援 HTML:無法將 HTML 或 CSS 轉換為 PDF——所有內容都需要手動繪製向量圖。 -禁止使用 CSS 樣式:所有樣式都必須透過程式設計方式實現。
- JavaScript無法執行:無法渲染動態網頁內容 -無自動文字佈局:不支援文字換行、分頁或串流佈局-開發者必須手動管理所有內容。 -手動頁面管理:每個頁面都必須明確建立和管理。
了解IronPDF
IronPDF採用以文件為中心的方法,使用 HTML 作為產生 PDF 的通用文件格式。 IronPDF不需要基於座標的定位,而是透過現代的以 Chromium 為基礎的引擎渲染 HTML 內容,並完全支援 CSS3 和JavaScript。
主要特點包括:
-以文件為中心的架構:專為產生強大的文件而設計,包括發票、報告和內容豐富的文檔
- HTML優先方法:使用開發人員已經熟悉的網路技術-HTML、CSS和JavaScript
- Chromium 渲染引擎:支援現代 CSS3、Flexbox、Grid 和 ES6+ JavaScript -自動版面:自動處理文字換行、分頁和串流版面配置。 -商業支援:持續更新、支援和企業級功能
功能對比
下表列出了 VectSharp 和IronPDF之間的根本差異:
| 特徵 | VectSharp | IronPDF |
|---|---|---|
| 主要用途 | 向量圖形 | 文件創建 |
| PDF 輸出 | 是的 | 是的 |
| HTML 支援 | 不 | 是的 |
| 授權 | LGPL(開源) | 商業的 |
| 最適合 | 科學視覺化 | 一般PDF文檔 |
| 客製化 | 限圖形 | 內容廣泛,與文件相關 |
| CSS 支援 | 不 | 完整的 CSS3 |
| JavaScript | 不 | 完整的 ES6+ |
| 自動佈局 | 不 | 是的 |
| 自動分頁符 | 不 | 是的 |
| 文字換行 | 手動的 | 自動的 |
| 表格 | 手繪 | HTML <table> |
| 合併PDF | 不 | 是的 |
| 拆分PDF | 不 | 是的 |
| 水印 | 手動的 | 內建 |
| 頁首/頁尾 | 每頁手冊 | 自動的 |
| 密碼保護 | 不 | 是的 |
| 數位簽名 | 不 | 是的 |
| 學習曲線 | 高(座標) | 低(HTML/CSS) |
| 程式碼冗長性 | 非常高 | 低的 |
API架構差異
透過觀察 VectSharp 和IronPDF各自創建 PDF 內容的方式,可以立即看出它們之間的架構差異。
基於 VectSharp 座標的方法
VectSharp 要求開發人員建立 Document 和 Page 對象,然後使用具有明確座標的 Graphics 方法繪製每個元素:
// NuGet: Install-Package VectSharp.PDF
using VectSharp;
using VectSharp.PDF;
using VectSharp.SVG;
using System.IO;
class Program
{
static void Main()
{
// VectSharp doesn't directly support HTML to PDF
// It requires manual creation of graphics objects
Document doc = new Document();
Page page = new Page(595, 842); // A4 size
Graphics graphics = page.Graphics;
graphics.FillText(100, 100, "Hello from VectSharp",
new Font(FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica), 24));
doc.Pages.Add(page);
doc.SaveAsPDF("output.pdf");
}
}// NuGet: Install-Package VectSharp.PDF
using VectSharp;
using VectSharp.PDF;
using VectSharp.SVG;
using System.IO;
class Program
{
static void Main()
{
// VectSharp doesn't directly support HTML to PDF
// It requires manual creation of graphics objects
Document doc = new Document();
Page page = new Page(595, 842); // A4 size
Graphics graphics = page.Graphics;
graphics.FillText(100, 100, "Hello from VectSharp",
new Font(FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica), 24));
doc.Pages.Add(page);
doc.SaveAsPDF("output.pdf");
}
}這種方法要求了解座標系、點測量以及每個文字元素、形狀和圖形的明確定位。
IronPDF以 HTML 為基礎的方法
IronPDF使用熟悉的 HTML 和 CSS,使開發人員能夠使用他們已經熟悉的 Web 技術建立文件:
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello from IronPDF</h1><p>This is HTML content.</p>");
pdf.SaveAs("output.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello from IronPDF</h1><p>This is HTML content.</p>");
pdf.SaveAs("output.pdf");
}
}ChromePdfRenderer類別會自動處理所有版面配置、定位和分頁。 有關 HTML 轉換的全面指南,請參閱HTML 轉 PDF 教學。
繪製形狀和文字
創建視覺內容揭示了向量圖形程式設計和文件生成之間的範式差異。
VectSharp 形狀繪製
VectSharp 提供用於使用明確座標和 GraphicsPath 物件繪製形狀的底層圖形原語:
// NuGet: Install-Package VectSharp.PDF
using VectSharp;
using VectSharp.PDF;
using System;
class Program
{
static void Main()
{
Document doc = new Document();
Page page = new Page(595, 842);
Graphics graphics = page.Graphics;
// Draw rectangle
graphics.FillRectangle(50, 50, 200, 100, Colour.FromRgb(0, 0, 255));
// Draw circle
GraphicsPath circle = new GraphicsPath();
circle.Arc(400, 100, 50, 0, 2 * Math.PI);
graphics.FillPath(circle, Colour.FromRgb(255, 0, 0));
// Add text
graphics.FillText(50, 200, "VectSharp Graphics",
new Font(FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica), 20));
doc.Pages.Add(page);
doc.SaveAsPDF("shapes.pdf");
}
}// NuGet: Install-Package VectSharp.PDF
using VectSharp;
using VectSharp.PDF;
using System;
class Program
{
static void Main()
{
Document doc = new Document();
Page page = new Page(595, 842);
Graphics graphics = page.Graphics;
// Draw rectangle
graphics.FillRectangle(50, 50, 200, 100, Colour.FromRgb(0, 0, 255));
// Draw circle
GraphicsPath circle = new GraphicsPath();
circle.Arc(400, 100, 50, 0, 2 * Math.PI);
graphics.FillPath(circle, Colour.FromRgb(255, 0, 0));
// Add text
graphics.FillText(50, 200, "VectSharp Graphics",
new Font(FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica), 20));
doc.Pages.Add(page);
doc.SaveAsPDF("shapes.pdf");
}
}這段程式碼展示了 VectSharp 在精確向量圖形方面的強大功能——每個元素都使用精確的像素座標進行定位,顏色是透過程式創建的,而像圓形這樣的形狀需要建立帶有弧線定義的 GraphicsPath 物件。
IronPDF HTML/CSS 形狀
IronPDF使用標準的 HTML 和 CSS 來達到類似的視覺效果:
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string html = @"
<div style='width: 200px; height: 100px; background-color: blue; margin: 50px;'></div>
<div style='width: 100px; height: 100px; background-color: red;
border-radius: 50%; margin-left: 350px; margin-top: -50px;'></div>
<h2 style='margin-left: 50px;'>IronPDF Graphics</h2>
";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("shapes.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string html = @"
<div style='width: 200px; height: 100px; background-color: blue; margin: 50px;'></div>
<div style='width: 100px; height: 100px; background-color: red;
border-radius: 50%; margin-left: 350px; margin-top: -50px;'></div>
<h2 style='margin-left: 50px;'>IronPDF Graphics</h2>
";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("shapes.pdf");
}
}CSS 屬性(例如 border-radius: 50%)用於建立圓形,而標準的 HTML/CSS 定位用於處理佈局。 對於複雜的向量圖形, IronPDF支援直接在 HTML 中使用內聯 SVG 元素。
建立多頁文檔
建立多頁文件可以示範各個庫如何處理分頁。
VectSharp 手動頁面管理
VectSharp 要求明確地建立和管理每個頁面:
// NuGet: Install-Package VectSharp.PDF
using VectSharp;
using VectSharp.PDF;
using System;
class Program
{
static void Main()
{
Document doc = new Document();
// Page 1
Page page1 = new Page(595, 842);
Graphics g1 = page1.Graphics;
g1.FillText(50, 50, "Page 1",
new Font(FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica), 24));
g1.FillText(50, 100, "First page content",
new Font(FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica), 14));
doc.Pages.Add(page1);
// Page 2
Page page2 = new Page(595, 842);
Graphics g2 = page2.Graphics;
g2.FillText(50, 50, "Page 2",
new Font(FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica), 24));
g2.FillText(50, 100, "Second page content",
new Font(FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica), 14));
doc.Pages.Add(page2);
doc.SaveAsPDF("multipage.pdf");
}
}// NuGet: Install-Package VectSharp.PDF
using VectSharp;
using VectSharp.PDF;
using System;
class Program
{
static void Main()
{
Document doc = new Document();
// Page 1
Page page1 = new Page(595, 842);
Graphics g1 = page1.Graphics;
g1.FillText(50, 50, "Page 1",
new Font(FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica), 24));
g1.FillText(50, 100, "First page content",
new Font(FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica), 14));
doc.Pages.Add(page1);
// Page 2
Page page2 = new Page(595, 842);
Graphics g2 = page2.Graphics;
g2.FillText(50, 50, "Page 2",
new Font(FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica), 24));
g2.FillText(50, 100, "Second page content",
new Font(FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica), 14));
doc.Pages.Add(page2);
doc.SaveAsPDF("multipage.pdf");
}
}每個頁面都需要自己的 Page 物件、Graphics 上下文,每個文字元素都需要單獨的 FillText 呼叫。 程式碼冗長程度隨頁面數量和內容複雜度的增加而線性增加。
IronPDF自動分頁
IronPDF使用 CSS 分頁規則自動處理分頁:
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string html = @"
<h1>Page 1</h1>
<p>First page content</p>
<div style='page-break-after: always;'></div>
<h1>Page 2</h1>
<p>Second page content</p>
";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("multipage.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string html = @"
<h1>Page 1</h1>
<p>First page content</p>
<div style='page-break-after: always;'></div>
<h1>Page 2</h1>
<p>Second page content</p>
";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("multipage.pdf");
}
}CSS page-break-after: always 指令指示 Chromium 渲染器建立新頁面。 IronPDF也支援內容超出頁面邊界時自動分頁-VectSharp 完全不具備此功能。
API對應參考
正在評估從 VectSharp 過渡到IronPDF 的團隊會發現此映射有助於理解概念等效性:
| VectSharp | IronPDF |
|---|---|
Document | ChromePdfRenderer |
Page | 自動的 |
Graphics | HTML/CSS |
graphics.FillRectangle() | CSS background-color on <div> |
graphics.StrokeRectangle() | CSS border on <div> |
graphics.FillText() | HTML 文字元素 |
graphics.StrokePath() | SVG 或 CSS 邊框 |
GraphicsPath | SVG <path> 元素 |
Colour.FromRgb() | CSS顏色值 |
Font / FontFamily | CSS font-family |
doc.SaveAsPDF() | pdf.SaveAs() |
| 手動調整頁面尺寸 | RenderingOptions.PaperSize |
當團隊考慮從 VectSharp 遷移到IronPDF時
在以下幾種情況下,開發團隊通常會評估IronPDF作為 VectSharp 的替代方案:
文件產生要求
VectSharp 在科學視覺化方面表現出色,但對於一般文件創建而言卻不太實用。 建立發票系統、報表產生器或內容管理平台的團隊發現,手動定位每個文字元素和形狀會造成維護負擔,而基於 HTML 的方法則完全避免了這些負擔。
HTML 內容集成
需要將現有 HTML 範本、電子郵件內容或網頁轉換為 PDF 的應用程式無法使用 VectSharp。該程式庫不具備 HTML 解析或渲染功能,因此不適用於內容源自 HTML 的工作流程。
發展速度
VectSharp 中基於座標的 API 所需的程式碼量比同等的IronPDF實作多得多。 一個簡單的文檔,只需要 5 行 HTML 程式碼,可能需要 50 多行 VectSharp 繪圖程式碼,每一行都要指定精確的座標、顏色和字體。
現代網路技術支援
VectSharp 無法渲染 CSS3 佈局(Flexbox、Grid),無法執行JavaScript,也無法支援現代 Web 字體。 使用現代網頁設計的團隊發現,透過手繪來重新創建這些佈局是不切實際的。
PDF 功能要求
VectSharp專注於透過向量圖形建立PDF檔案。 需要進行 PDF 操作(合併、分割)、數位簽章、密碼保護或自動頁首/頁尾的團隊必須新增額外的函式庫,或考慮使用IronPDF等原生提供這些功能的替代方案。
VectSharp 的獨特優勢
VectSharp 在特定情況下具有優勢:
科學視覺化精度
對於產生科學圖形、技術圖表或數學圖表的應用程式而言,VectSharp 基於座標的方法提供了 HTML/CSS 定位有時無法比擬的像素級精確控制。
開源許可
VectSharp 根據 LGPL 協議發布,無需商業許可費用即可進行整合——這對具有嚴格許可政策的開源專案或組織來說是一個重要的考慮因素。
輕量級依賴
與 IronPDF 基於 Chromium 的渲染引擎相比,VectSharp 的依賴項最少,因此可能更適合資源受限的部署環境。
IronPDF 的其他功能
除了基本的 PDF 生成功能外, IronPDF還提供了 VectSharp 無法提供的文件操作功能:
-合併 PDF :將多個文件合併成單一文件 -拆分文檔:將頁面範圍提取到單獨的 PDF 文件中 -數位簽章:套用加密簽章來驗證文件的真實性 -添加浮水印:添加文字或圖片浮水印
.NET相容性和未來適應性
這兩個函式庫都支援目前的.NET實作。 IronPDF持續進行積極開發和定期更新,確保與.NET 8、 .NET 9 以及包括預計 2026 年發布的.NET 10 在內的未來版本相容。該程式庫在其 API 中全面支援 async/await,符合現代 C# 開發實踐,包括 C# 14 中預期推出的功能。
結論
VectSharp 和IronPDF雖然都能產生 PDF 輸出,但它們的用途卻截然不同。 VectSharp 是一款出色的向量圖形庫,適用於科學視覺化、技術圖表以及需要像素級精確座標繪圖的應用。 其 LGPL 授權和輕量級特性使其在特定使用情境中具有吸引力,在這些場景中,精確的圖形控制比文件複雜性更重要。
IronPDF專注於從 HTML 內容生成文檔,為需要將 Web 內容、模板或動態生成的 HTML 轉換為 PDF 的開發人員提供簡化的解決方案。 它基於 Chromium 的渲染技術確保了現代網頁設計的精確再現,而其 API 設計則優先考慮了簡潔性和與標準網頁開發工作流程的整合。
選擇哪種軟體取決於專案需求:科學視覺化和精確圖形更適合 VectSharp,而從 Web 內容產生文件則更符合 IronPDF 的優勢。 對於目前使用 VectSharp 但苦於文件產生複雜性的團隊來說,評估IronPDF可能會發現大幅減少程式碼和提高可維護性的機會。
