比較

VectSharp vs IronPDF:技術比較指南

VectSharpvs IronPDF:.NET PDF 生成的技術比較

當 .NET 開發人員需要建立 PDF 文件時,他們會遇到設計理念完全不同的函式庫。VectSharp和IronPDF代表了兩種截然不同的 PDF 生成方法:一種專注於向量圖形和科學可視化,另一種專注於從 HTML 內容創建文檔。 本技術比較將研究這兩個函式庫,以協助架構師和開發人員針對其特定需求選擇合適的工具。

瞭解 VectSharp

VectSharp 是一個向量圖形函式庫,旨在讓開發人員能夠建立複雜的向量式繪圖,並將其匯出為 PDF 檔案。VectSharp與專注於文件建立的傳統 PDF 函式庫不同,它專精於處理向量圖形,因此特別適合需要高精度繪圖的應用程式,例如科學視覺化、圖表和技術插圖。

該函式庫透過基於座標的 API 來產生 PDF,開發人員可使用精確的 X、Y 座標定位每個元素:

  • 科學重點:主要設計用於資料可視化、繪圖和圖表建立
  • 基於座標的繪圖:所有元素都需要使用從左上方原點開始的點明確定位
  • Graphics-First Paradigm(圖形優先範例):專為製作圖形和圖表而非業務文件的科學家所建立
  • 開放原始碼:以 LGPL 授權釋出,允許自訂而無需商業授權

VectSharp的限制

VectSharp 的專業重點引入了一般文件生成的限制:

  • 不支援 HTML:無法將 HTML 或 CSS 轉換為 PDF - 所有內容都需要手動向量繪圖
  • No CSS Styling:所有造型必須以程式化方式實作
  • 無法執行 JavaScript:無法呈現動態網頁內容
  • 無自動文字排版:無文字包裝、分頁或流程排版 - 開發人員必須手動管理一切。
  • 手動頁面管理:每個頁面都必須明確地建立與管理

了解 IronPDF

IronPDF 採用以文件為中心的方式,將 HTML 作為 PDF 生成的通用文件格式。 IronPDF不需要基於座標的定位,而是透過完全支援 CSS3 和 JavaScript 的現代 Chromium 引擎來渲染 HTML 內容。

主要特點包括

  • 以文件為重點的架構:專為強大的文件生成而設計,包括發票、報告和內容繁重的文件
  • HTML-First方法:使用開發人員已經熟悉的網頁技術 - HTML、CSS 和 JavaScript
  • Chromium 渲染引擎:完全支援現代 CSS3、Flexbox、Grid 與 ES6+ JavaScript
  • 自動佈局:自動處理文字包圍、分頁和流程佈局
  • 商業支援:一致的更新、支援和企業級功能

功能比較

下表強調了VectSharp和IronPDF的基本差異:

特點VectSharpIronPDF
主要用途向量圖形文件製作
PDF輸出
HTML 支援
授權LGPL (開放原始碼)商業的
最適合科學視覺化一般 PDF 文件
客製化限於圖形廣泛的文件相關
CSS 支援完整的 CSS3
JavaScript完整的 ES6+
自動排版
自動分頁
文字包裝手動的自動化
表格手繪HTML <table>
合併 PDF 文件
分割 PDFs
水印手動的內建
頁首/頁腳每頁手冊自動化
密碼保護
數位簽名
學習曲線高(坐標)低 (HTML/CSS)
程式語言非常高

API 架構差異

當檢視每個函式庫如何建立 PDF 內容時,VectSharp 和IronPDF在架構上的差異立即顯現出來。

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()
    {
        //VectSharpdoesn'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()
    {
        //VectSharpdoesn'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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

此方法需要瞭解坐標系統、點測量,以及每個文字元素、形狀和圖形的明確定位。

IronPDF基於 HTML 的方法

IronPDF 使用熟悉的 HTML 和 CSS,讓開發人員可以使用他們已經熟悉的網頁技術來建立文件:

// 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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

ChromePdfRenderer 類會自動處理所有的排版、定位和分頁。 如需全面的 HTML 轉換指南,請參閱 HTML to 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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

這段程式碼展示了VectSharp在精確向量圖形方面的優勢 - 每個元素都使用精確的像素座標定位,顏色是以程式化的方式建立,圓形等形狀則需要建構具有弧形定義的 GraphicsPath 物件。

IronPdfHTML/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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

每個頁面都需要自己的 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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

CSS page-break-after: always 指令指示 Chromium 渲染器建立新的頁面。IronPDF還支援在內容超出頁面邊界時自動分頁 - 這是VectSharp完全缺乏的功能。

API 對應參考。

正在評估從VectSharp轉換到IronPDF的團隊會發現此對應表有助於理解等同的概念:

VectSharpIronPDF筆記
文件<代碼>ChromePdfRenderer</代碼建立渲染器實例
<編碼>頁面</編碼自動化從 HTML 建立的頁面
<編碼>圖形</編碼HTML/CSS宣告式標記
<代碼>graphics.FillRectangle()</代碼CSS <div> 上的 background-colorHTML 方塊
<代碼>graphics.StrokeRectangle()</代碼CSS <div> 上的 邊框邊界
<代碼>graphics.FillText()</代碼HTML 文字元素<p>, <h1>, <span>
<代碼>graphics.StrokePath()</代碼SVG 或 CSS 邊框向量路徑
圖形路徑SVG <path> 元件複雜的形狀
<編碼>Colour.FromRgb()</編碼CSS 顏色值rgb()#hex、命名顏色
Font / FontFamilyCSS font-family支援的網頁字型
<編碼>doc.SaveAsPDF()</編碼<代碼>pdf.SaveAs()</代碼儲存至檔案
手動調整頁面大小RenderingOptions.PaperSize或 CSS @page 規則

當團隊考慮從VectSharp轉移到IronPDF時。

有幾種情況通常會促使開發團隊評估 IronPDF,將其作為VectSharp的替代方案:

文件生成要求

VectSharp 在科學視覺化方面表現優異,但在一般文件製作方面卻不實用。 建立發票系統、報表產生器或內容管理平台的團隊發現,手動定位每個文字元素和形狀會造成維護上的負擔,而基於 HTML 的方法則可完全避免。

HTML 內容整合

需要將現有的 HTML 模板、電子郵件內容或網頁轉換成 PDF 的應用程式不能使用 VectSharp。該函式庫沒有 HTML 解析或渲染功能,因此不適合內容源自 HTML 的工作流程。

開發速度

VectSharp 中基於坐標的 API 所需的程式碼遠多於同等的IronPDF實作。 一份只需 5 行 HTML 的簡單文件可能需要 50 多行VectSharp繪圖程式碼,每一行都要指定精確的座標、顏色和字型。

現代網路技術支援

VectSharp 無法呈現 CSS3 佈局 (Flexbox、Grid)、執行 JavaScript 或支援現代網路字型。 使用當代網頁設計的團隊發現,透過手繪來重新製作這些版面是不切實際的。

PDF 功能需求

VectSharp 只專注於透過向量圖形建立 PDF。 需要 PDF 操作(合併、分割)、數位簽署、密碼保護或自動標頭/標腳的團隊,必須新增額外的函式庫,或考慮IronPDF等原生提供這些功能的替代方案。

VectSharp的獨特優勢

VectSharp 在特定情境中維持優勢:

科學可視化精準度

對於產生科學數字、技術圖表或數學圖表的應用程式,VectSharp 基於座標的方法可提供HTML/CSS定位無法達到的像素完美控制。

開放原始碼授權條款

VectSharp 依據 LGPL 發佈,允許整合而無需商業授權費用 - 這對於開放原始碼專案或有嚴格授權政策的組織而言,是一項重要的考量。

輕量級的依賴性

與IronPDF基於 Chromium 的渲染引擎相比,VectSharp 的依賴性極低,可能使其更適合資源有限的部署環境。

IronPDF的其他功能

除了基本的 PDF 生成功能外,IronPDF 還提供VectSharp無法提供的文件處理功能:

.NET相容性與未來準備

這兩個函式庫都支援目前的 .NET 實作。IronPDFfor .NET 維持積極的開發與定期的更新,確保與 .NET 8、.NET 9 以及未來的版本相容,包括預計在 2026 年推出的 .NET 10。該函式庫整個 API 的 async/await 支援符合現代 C# 開發實務,包括 C# 14 中預期的功能。

結論

VectSharp 和IronPDF儘管都能產生 PDF 輸出,但兩者的用途根本不同。VectSharp可作為向量圖形函式庫,適用於科學視覺化、技術圖表,以及需要完美像素坐標繪圖的應用程式。 它的 LGPL 授權和輕量級足跡使其對於精確的圖形控制比文件複雜性更重要的特定用例具有吸引力。

IronPDF 專注於從 HTML 內容產生文件,為需要將網頁內容、範本或動態產生的 HTML 轉換為 PDF 的開發人員提供簡化的解決方案。 其基於 Chromium 的渲染可確保準確地再現現代網頁設計,而其 API 設計則以簡單性及與標準網頁開發工作流程的整合為優先考量。

兩者之間的選擇取決於專案需求:科學可視化和精密圖形偏好 VectSharp,而從網頁內容產生文件則符合IronPDF的優勢。 對於目前正在使用VectSharp但苦惱於文件產生複雜性的團隊而言,評估IronPDF可能會發現大幅減少程式碼和改善可維護性的機會。

如需其他實施指導,請參閱 IronPDF 文件和涵蓋特定用例和進階功能的 教學