比較

VectSharp與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之間的基本區別:

功能VectSharpIronPDF
主要用途向量圖形文檔創建
PDF输出
HTML支持沒有
授權LGPL (開源)商業
最佳用途科學可視化一般PDF文件
自訂性限於圖形擴展、文件相關
CSS支持沒有完整的CSS3
JavaScript沒有完整的ES6+
自動佈局沒有
自動分頁沒有
文本換行手動自動
表格手動繪製HTML <table>
合併PDF沒有
分割PDF沒有
水印手動內建
標頭/頁腳每頁手動自動
密碼保護沒有
數位簽名沒有
學習曲線高(坐標)低(HTML/CSS)
代碼冗長度非常高Low

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");
    }
}
Imports VectSharp
Imports VectSharp.PDF
Imports VectSharp.SVG
Imports System.IO

Module Program
    Sub Main()
        ' VectSharp doesn't directly support HTML to PDF
        ' It requires manual creation of graphics objects
        Dim doc As New Document()
        Dim page As New Page(595, 842) ' A4 size
        Dim graphics As 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")
    End Sub
End Module
$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");
    }
}
Imports IronPdf

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()
        Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello from IronPDF</h1><p>This is HTML content.</p>")
        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

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");
    }
}
Imports VectSharp
Imports VectSharp.PDF
Imports System

Module Program
    Sub Main()
        Dim doc As New Document()
        Dim page As New Page(595, 842)
        Dim graphics As Graphics = page.Graphics

        ' Draw rectangle
        graphics.FillRectangle(50, 50, 200, 100, Colour.FromRgb(0, 0, 255))

        ' Draw circle
        Dim circle As 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")
    End Sub
End Module
$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");
    }
}
Imports IronPdf
Imports IronPdf.Rendering

Class Program
    Shared Sub Main()
        Dim renderer As New ChromePdfRenderer()

        Dim html As String = "
            <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>
        "

        Dim pdf = renderer.RenderHtmlAsPdf(html)
        pdf.SaveAs("shapes.pdf")
    End Sub
End Class
$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");
    }
}
Imports VectSharp
Imports VectSharp.PDF
Imports System

Class Program
    Shared Sub Main()
        Dim doc As New Document()

        ' Page 1
        Dim page1 As New Page(595, 842)
        Dim g1 As Graphics = 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
        Dim page2 As New Page(595, 842)
        Dim g2 As Graphics = 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")
    End Sub
End Class
$vbLabelText   $csharpLabel

每頁均需其自身的Page對象、Graphics上下文,以及為每個文本元素單獨FillText調用。 代碼冗長度隨著頁數和內容複雜性的增加而線性增加。

IronPDF自動分頁

IronPDF通過CSS page-break規則自動處理分頁:

// 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");
    }
}
Imports IronPdf

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()

        Dim html As String = "
            <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>
        "

        Dim pdf = renderer.RenderHtmlAsPdf(html)
        pdf.SaveAs("multipage.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

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

API對映參考

評估從VectSharp過渡到IronPDF的團隊會發現此映射對理解概念對應關係很有幫助:

VectSharpIronPDF
DocumentChromePdfRenderer
Page自動
GraphicsHTML/CSS
graphics.FillRectangle()CSS background-color<div>
graphics.StrokeRectangle()CSS border<div>
graphics.FillText()HTML文本元素
graphics.StrokePath()SVG或CSS邊框
GraphicsPathSVG <path> 元素
Colour.FromRgb()CSS顏色值
Font / FontFamilyCSS font-family
doc.SaveAsPDF()pdf.SaveAs()
手动頁面調整RenderingOptions.PaperSize

當團隊考慮從VectSharp遷移到IronPDF

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

文件生成要求

VectSharp在科學可視化方面表現出色,但不宜用於一般文件創建。 構建發票系統、報告生成器或內容管理平台的團隊發現,手動放置每個文本元素和形狀所創造的維護負擔是HTML方法完全避免的。

HTML內容整合

需要將現有HTML模板、電子郵件內容或網頁轉換為PDF的應用程式無法使用VectSharp。 因為該程式庫不具備HTML解析或渲染能力,因此不適合內容來源於HTML的工作流。

開發速度

VectSharp中的基於座標的API比等效於IronPDF的實現需要明顯更多的代碼。 一份簡單的文件在HTML中只需5行代碼,而在VectSharp中可能需要50多行的繪圖代碼,每行均需指定精確的座標、顏色和字體。

現代網頁技術支持

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實現。 IronPDF持續活躍開發並定期更新,確保與.NET 8,.NET 9的兼容性,以及未來包括預計2026年推出的.NET 10版本的兼容性。 程式庫在其API中全面支持async/await,符合包括預期於C# 14中推出的現代C#開發實踐。

結論

雖然VectSharp和IronPDF都生成PDF輸出,但它們的本質目的截然不同。 VectSharp擅長作為科學可視化、技術圖紙及需像素級精確座標繪圖的應用程式的向量圖形程式庫。 其LGPL授權和輕量級足迹使其對於特定使用案例很有吸引力,這些使用案例中,精確的圖形控制比文件的複雜性更為重要。

IronPDF專注於從HTML內容生成文檔,為需要將網頁內容、模板或動態生成HTML轉換為PDF的開發人員提供一個流暢的解決方案。 其基於Chromium的渲染確保準確再現現代網頁設計,API的設計優先考慮簡單性和與標準網頁開發工作流的整合。

在它們之間的選擇取決於項目需求:科學可視化和精確圖形偏好VectSharp,而從網頁內容生成文檔則與IronPDF的優勢一致。 對於當前使用VectSharp但在文件生成複雜性上掙扎的團隊,評估IronPDF可以揭示顯著減少代碼量和提高可維護性的潛力。

欲瞭解更多實施指導,請探索IronPDF文檔教程,涵蓋具體使用案例和高級功能。

請注意VectSharp是其各自擁有者的註冊商標。 本網站未與VectSharp有關聯、未獲得其認可或其贊助。 所有產品名稱、徽標和品牌均屬其各自擁有者的財產。 比較僅供信息參考,反映在寫作時公開的相關信息。)}]