比较

VectSharp 与 IronPDF:技术比较指南

VectSharpvs IronPDF:.NET PDF 生成技术比较

当 .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)
代码准确性极高

API 架构差异

在研究每个库如何创建 PDF 内容时,VectSharp 和IronPDF在架构上的差异会立即显现出来。

基于坐标的VectSharp方法

VectSharp 要求开发人员创建文档和页面对象,然后使用具有明确坐标的图形方法绘制每个元素:

// 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

这种方法要求理解坐标系、点测量以及每个文本元素、形状和图形的明确定位。

基于 HTML 的IronPDF方法

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 转 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

border-radius: 50% 这样的 CSS 属性可以创建圆圈,而标准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

每个页面都需要有自己的页面对象、图形上下文以及针对每个文本元素的单独 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()</代码<div> 上的 CSS background-colorHTML 框
<代码>graphics.StrokeRectangle()</代码<div> 上的 CSS 边框边界
<代码>graphics.FillText()</代码HTML 文本元素<代码>

</代码>, <代码>

</代码>, <代码></代码

<代码>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 中基于坐标的应用程序接口需要的代码明显多于同等的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 文档和涵盖特定用例和高级功能的 教程