Como migrar do VectSharp para o IronPDF em C#
O VectSharp se consolidou como uma biblioteca de gráficos vetoriais poderosa no ecossistema .NET , sendo particularmente valorizado para visualização científica e ilustrações técnicas. Não entanto, quando as equipes de desenvolvimento precisam gerar documentos comerciais, relatórios, faturas ou qualquer conteúdo baseado em HTML, o paradigma do VectSharp, que prioriza os gráficos, cria atritos significativos. A biblioteca foi projetada para cientistas que criam figuras e gráficos, não para desenvolvedores que geram documentos.
Este guia fornece um caminho completo de migração do VectSharp para o IronPDF, com instruções passo a passo, comparações de código e exemplos práticos para desenvolvedores .NET profissionais que estejam avaliando essa transição.
Por que migrar do VectSharp?
VectSharp é uma biblioteca de visualização científica e gráficos vetoriais projetada para criar diagramas, gráficos e ilustrações técnicas. Não foi projetado para geração de documentos — é uma biblioteca de desenho que por acaso gera PDFs. Os principais motivos pelos quais as equipes de desenvolvimento consideram a migração incluem:
Foco exclusivamente científico: O VectSharp foi projetado para visualização e plotagem de dados, não para documentos comerciais como faturas, relatórios ou certificados.
Sem suporte para HTML: o VectSharp não consegue converter HTML ou CSS em PDF. Cada elemento deve ser desenhado manualmente usando comandos de gráficos vetoriais.
API baseada em coordenadas: Cada elemento deve ser posicionado com coordenadas X,Y exatas. Não há layout, fluxo ou quebra de texto automáticos.
Sem estilização CSS: Toda a estilização é feita programaticamente por meio de chamadas de método. Os desenvolvedores web não podem aproveitar seus conhecimentos prévios de CSS.
Sem JavaScript: O VectSharp não consegue renderizar conteúdo web dinâmico, gráficos interativos ou visualizações baseadas em JavaScript.
Sem formatação de texto: a quebra automática de texto, a paginação e o layout de fluxo não estão disponíveis. Os desenvolvedores precisam calcular manualmente as posições do texto e as quebras de página.
Paradigma "Gráficos em Primeiro Lugar": A biblioteca foi projetada para diagramas, não para relatórios ou faturas. A geração de documentos exige um extenso trabalho manual.
O Problema Central: Biblioteca Gráfica vs. Gerador de Documentos
O VectSharp exige desenho vetorial manual para cada elemento:
// VectSharp: Manual vector drawing for every element
Page page = new Page(595, 842);
Graphics graphics = page.Graphics;
graphics.FillRectangle(50, 50, 200, 100, Colour.FromRgb(0, 0, 255));
graphics.FillText(60, 70, "Invoice", new Font(new FontFamily("Arial"), 20), Colours.White);
// ... continue drawing every single element manually
// VectSharp: Manual vector drawing for every element
Page page = new Page(595, 842);
Graphics graphics = page.Graphics;
graphics.FillRectangle(50, 50, 200, 100, Colour.FromRgb(0, 0, 255));
graphics.FillText(60, 70, "Invoice", new Font(new FontFamily("Arial"), 20), Colours.White);
// ... continue drawing every single element manually
' VectSharp: Manual vector drawing for every element
Dim page As New Page(595, 842)
Dim graphics As Graphics = page.Graphics
graphics.FillRectangle(50, 50, 200, 100, Colour.FromRgb(0, 0, 255))
graphics.FillText(60, 70, "Invoice", New Font(New FontFamily("Arial"), 20), Colours.White)
' ... continue drawing every single element manually
O IronPDF utiliza HTML — o formato universal de documentos:
// IronPDF: Declarative HTML for document creation
var html = "<h1>Invoice</h1><p>Customer: Acme Corp</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
// IronPDF: Declarative HTML for document creation
var html = "<h1>Invoice</h1><p>Customer: Acme Corp</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
' IronPDF: Declarative HTML for document creation
Dim html As String = "<h1>Invoice</h1><p>Customer: Acme Corp</p>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
IronPDF vs VectSharp: Comparação de Recursos
Compreender as diferenças arquitetônicas ajuda os responsáveis pelas decisões técnicas a avaliar o investimento em migração:
| Recurso | VectSharp | IronPDF |
|---|---|---|
| Uso principal | Gráficos vetoriais | Criação de Documentos |
| Saída em PDF | Sim | Sim |
| Suporte a HTML | Não | Sim |
| Licenciamento | LGPL | Comercial |
| Código aberto | Sim | Parcialmente (recursos comerciais) |
| Ideal para | Visualizações científicas | Documentos PDF em geral |
| Personalização | Limitado a gráficos | Extenso, relacionado a documentos |
| HTML para PDF | Não | Cromo completo |
| URL para PDF | Não | Sim |
| Suporte a CSS | Não | CSS3 completo |
| JavaScript | Não | ES2024 completo |
| Layout automático | Não | Sim |
| Quebras de página automáticas | Não | Sim |
| Quebra de texto | Manual | Automático |
| Mesclar PDFs | Não | Sim |
| Dividir PDFs | Não | Sim |
| Proteção por senha | Não | Sim |
| Assinaturas digitais | Não | Sim |
| Curva de Aprendizagem | Alto (coordenadas) | Baixo (HTML/CSS) |
| Verbosidade do código | Muito alto | Baixo |
Guia rápido: Migração do VectSharp para o IronPDF
A migração pode começar imediatamente com esses passos fundamentais.
Passo 1: Substituir pacotes NuGet
Remova todos os pacotes VectSharp:
# Remove VectSharp packages
dotnet remove package VectSharp
dotnet remove package VectSharp.PDF
# Remove VectSharp packages
dotnet remove package VectSharp
dotnet remove package VectSharp.PDF
Instale o IronPDF:
# Install IronPDF
dotnet add package IronPdf
# Install IronPDF
dotnet add package IronPdf
Etapa 2: Atualizar Namespaces
Substitua os namespaces do VectSharp pelo namespace do IronPDF :
// Before (VectSharp)
using VectSharp;
using VectSharp.PDF;
// After (IronPDF)
using IronPdf;
// Before (VectSharp)
using VectSharp;
using VectSharp.PDF;
// After (IronPDF)
using IronPdf;
Imports IronPdf
Etapa 3: Inicializar a licença
Adicionar inicialização de licença na inicialização do aplicativo:
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Exemplos de migração de código
Converter HTML para PDF
O VectSharp não suporta a conversão de HTML para PDF. Essa diferença fundamental de capacidades influencia muitas decisões de migração.
Abordagem VectSharp:
// 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");
}
}
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
Abordagem IronPDF :
// 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
O VectSharp exige a criação de um objeto Document, Page e Graphics, e então o posicionamento manual do texto com coordenadas exatas e objetos de fonte. O IronPDF renderiza HTML diretamente com suporte completo a estilos CSS.
Para cenários avançados de conversão de HTML para PDF, consulte o guia de conversão de HTML para PDF .
Criando documentos com várias páginas
Documentos com várias páginas revelam as diferenças arquitetônicas entre essas bibliotecas PDF do .NET .
Abordagem 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
Abordagem IronPDF :
// 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
O VectSharp exige a criação de objetos Page separados, contextos Graphics separados e o posicionamento manual de cada elemento de texto com coordenadas e objetos de fonte para cada página. O IronPDF usa uma única string HTML com CSS page-break-after: always para criar documentos com várias páginas automaticamente.
Desenho de formas e texto
Os recursos gráficos mostram onde o VectSharp se destaca, mas também onde os padrões da web oferecem funcionalidade equivalente com menos código.
Abordagem VectSharp:
// 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
Abordagem IronPDF :
// 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
O VectSharp requer a criação de objetos GraphicsPath, a chamada de Arc() com parâmetros matemáticos precisos e o gerenciamento de cores por meio de Colour.FromRgb(). O IronPDF utiliza propriedades CSS familiares: background-color, border-radius: 50% para círculos e margens padrão.
Referência de mapeamento da API VectSharp para IronPDF
Este mapeamento acelera a migração ao mostrar equivalentes diretos da API:
| VectSharp | IronPDF |
|---|---|
Document |
ChromePdfRenderer |
Page |
Automático |
Graphics |
HTML/CSS |
graphics.FillRectangle() |
CSS background-color em <div> |
graphics.StrokeRectangle() |
CSS border em <div> |
graphics.FillText() |
Elementos de texto HTML |
graphics.StrokePath() |
Bordas SVG ou CSS |
GraphicsPath |
SVG <path> elemento |
Colour.FromRgb() |
Valores de cor CSS |
Font / FontFamily |
CSS font-family |
doc.SaveAsPDF() |
pdf.SaveAs() |
| Dimensionamento manual de páginas | RenderingOptions.PaperSize |
Estratégias de Migração
Estratégia 1: Converter o código de desenho em HTML/CSS
Substitua o desenho baseado em coordenadas por elementos HTML:
// VectSharp
graphics.FillRectangle(100, 50, 300, 80, Colour.FromRgb(0, 102, 204));
graphics.FillText(110, 80, "Header", font, Colours.White);
// IronPDF HTML equivalent
<div style="
position: absolute;
left: 100px;
top: 50px;
width: 300px;
height: 80px;
background: rgb(0, 102, 204);
color: white;
padding: 10px;
">Header</div>
// VectSharp
graphics.FillRectangle(100, 50, 300, 80, Colour.FromRgb(0, 102, 204));
graphics.FillText(110, 80, "Header", font, Colours.White);
// IronPDF HTML equivalent
<div style="
position: absolute;
left: 100px;
top: 50px;
width: 300px;
height: 80px;
background: rgb(0, 102, 204);
color: white;
padding: 10px;
">Header</div>
' VectSharp
graphics.FillRectangle(100, 50, 300, 80, Colour.FromRgb(0, 102, 204))
graphics.FillText(110, 80, "Header", font, Colours.White)
' IronPDF HTML equivalent
<div style="
position: absolute;
left: 100px;
top: 50px;
width: 300px;
height: 80px;
background: rgb(0, 102, 204);
color: white;
padding: 10px;
">Header</div>
Estratégia 2: Usar SVG para gráficos vetoriais
Para formas complexas, use SVG embutido no seu HTML:
// VectSharp path
GraphicsPath path = new GraphicsPath();
path.MoveTo(100, 100);
path.LineTo(200, 50);
path.LineTo(300, 100);
path.Close();
graphics.FillPath(path, Colours.Blue);
// IronPDF SVG equivalent
<svg><polygon points="100,100 200,50 300,100" fill="blue"/></svg>
// VectSharp path
GraphicsPath path = new GraphicsPath();
path.MoveTo(100, 100);
path.LineTo(200, 50);
path.LineTo(300, 100);
path.Close();
graphics.FillPath(path, Colours.Blue);
// IronPDF SVG equivalent
<svg><polygon points="100,100 200,50 300,100" fill="blue"/></svg>
' VectSharp path
Dim path As New GraphicsPath()
path.MoveTo(100, 100)
path.LineTo(200, 50)
path.LineTo(300, 100)
path.Close()
graphics.FillPath(path, Colours.Blue)
' IronPDF SVG equivalent
<svg><polygon points="100,100 200,50 300,100" fill="blue"/></svg>
Estratégia 3: Use bibliotecas de gráficos JavaScript
Para visualizações científicas — especialidade do VectSharp — o IronPDF pode aproveitar bibliotecas JavaScript poderosas como Chart.js, D3.js ou Plotly:
var html = @"
<script src='https://cdn.plot.ly/plotly-latest.min.js'></script>
<div id='chart'></div>
<script>
Plotly.newPlot('chart', [{
x: [1, 2, 3, 4],
y: [10, 15, 13, 17],
type: 'scatter'
}]);
</script>";
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = true;
var pdf = renderer.RenderHtmlAsPdf(html);
var html = @"
<script src='https://cdn.plot.ly/plotly-latest.min.js'></script>
<div id='chart'></div>
<script>
Plotly.newPlot('chart', [{
x: [1, 2, 3, 4],
y: [10, 15, 13, 17],
type: 'scatter'
}]);
</script>";
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = true;
var pdf = renderer.RenderHtmlAsPdf(html);
Dim html As String = "
<script src='https://cdn.plot.ly/plotly-latest.min.js'></script>
<div id='chart'></div>
<script>
Plotly.newPlot('chart', [{
x: [1, 2, 3, 4],
y: [10, 15, 13, 17],
type: 'scatter'
}]);
</script>"
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.EnableJavaScript = True
Dim pdf = renderer.RenderHtmlAsPdf(html)
Problemas e soluções comuns em migrações
Questão 1: Diferenças entre sistemas de coordenadas
O VectSharp utiliza pontos a partir da origem no canto superior esquerdo com posicionamento manual.
Solução: Utilize o posicionamento CSS:
.element {
position: absolute;
top: 50px;
left: 100px;
}
Edição 2: Objetos de fonte
O VectSharp cria objetos Font e FontFamily programaticamente.
Solução: Use CSS font-family:
<style>
body { font-family: Arial, sans-serif; font-size: 12pt; }
</style>
<style>
body { font-family: Arial, sans-serif; font-size: 12pt; }
</style>
Edição 3: Manipulação de Cores
O VectSharp usa chamadas de método Colour.FromRgb().
Solução: Use cores CSS:
.header { color: rgb(0, 102, 204); background-color: #f0f0f0; }
Edição 4: Caminhos Gráficos
VectSharp usa API complexa GraphicsPath com métodos MoveTo, LineTo, Arc.
Solução: Utilize SVG para gráficos vetoriais:
<svg>
<path d="M 100 100 L 200 50 L 300 100 Z" fill="blue"/>
</svg>
<svg>
<path d="M 100 100 L 200 50 L 300 100 Z" fill="blue"/>
</svg>
Lista de verificação de migração do VectSharp
Tarefas pré-migração
Faça uma auditoria em sua base de código para identificar todos os usos do VectSharp:
grep -r "using VectSharp" --include="*.cs" .
grep -r "Graphics\|FillRectangle\|FillText" --include="*.cs" .
grep -r "using VectSharp" --include="*.cs" .
grep -r "Graphics\|FillRectangle\|FillText" --include="*.cs" .
Tamanhos de página do documento (os padrões new Page(595, 842)). Observe os esquemas de cores usando Colour.FromRgb(). Identificar configurações de fonte. Mapeie gráficos vetoriais complexos usando GraphicsPath para conversão em SVG.
Tarefas de atualização de código
- Remova os pacotes NuGet do VectSharp
- Instale o pacote NuGet IronPDF
- Atualize as instruções de uso de
VectSharpparaIronPdf - Converter chamadas
FillRectangleem caixas CSS combackground-color - Converter chamadas
FillTextem elementos de texto HTML com estilização CSS. - Converter operações
GraphicsPathem elementos SVG<path> - Substituir o gerenciamento manual de páginas por
RenderingOptions.PaperSize - Adicionar inicialização de licença na inicialização
Testes pós-migração
Após a migração, verifique os seguintes aspectos:
- Comparar a saída visual entre as versões VectSharp e IronPDF
- Verifique se as cores correspondem usando os equivalentes CSS dos valores
Colour.FromRgb() - Verificar a precisão do posicionamento dos elementos convertidos a partir do posicionamento baseado em coordenadas.
- Testar quebras de página em documentos com várias páginas
- Verificar se os gráficos vetoriais são renderizados corretamente em SVG.
Principais benefícios da migração para o IronPDF
A migração do VectSharp para o IronPDF oferece diversas vantagens para a geração de documentos:
Conteúdo baseado em HTML: os desenvolvedores web podem aproveitar suas habilidades existentes em HTML e CSS. Não é necessário aprender APIs de desenho baseadas em coordenadas.
Layout automático: a quebra de texto, a paginação e o layout de fluxo acontecem automaticamente. Não é necessário calcular manualmente as posições dos elementos.
Suporte a CSS moderno: CSS3 completo, incluindo layouts Flexbox e Grid. Os designs responsivos são convertidos diretamente para PDF.
Execução de JavaScript : Gráficos interativos com Chart.js, D3.js ou Plotly são renderizados corretamente. O conteúdo dinâmico funciona conforme o esperado.
URL para PDF: Capture qualquer página da web como um PDF — funcionalidade impossível com o VectSharp.
Operações com PDF: Mesclar, dividir, adicionar marcas d'água, proteção por senha e assinaturas digitais são recursos integrados.
Menor verbosidade do código: HTML/CSS é declarativo e legível. O mesmo documento requer significativamente menos código do que a abordagem de desenho imperativo do VectSharp.
Desenvolvimento ativo: À medida que a adoção do .NET 10 e do C# 14 aumenta até 2026, as atualizações regulares do IronPDF garantem a compatibilidade com as versões atuais e futuras do .NET .

