Jak przeprowadzić migrację z VectSharp do IronPDF w języku C#
VectSharp ugruntował swoją pozycję jako wydajna biblioteka grafiki wektorowej w ekosystemie .NET, szczególnie ceniona w wizualizacji naukowej i ilustracjach technicznych. Jednak gdy zespoły programistów muszą generować dokumenty biznesowe, raporty, faktury lub dowolne treści oparte na HTML, paradygmat "graphics-first" firmyVectSharpstwarza poważne utrudnienia. Biblioteka jest przeznaczona dla naukowców tworzących wykresy i diagramy, a nie dla programistów generujących dokumenty.
Niniejszy przewodnik zawiera kompletną ścieżkę migracji zVectSharpdoIronPDFwraz z instrukcjami krok po kroku, porównaniami kodu i praktycznymi przykładami dla profesjonalnych programistów .NET rozważających tę zmianę.
Dlaczego warto przejść z VectSharp
VectSharp to biblioteka do wizualizacji naukowej i grafiki wektorowej, zaprojektowana do tworzenia diagramów, wykresów i ilustracji technicznych. Nie jest przeznaczona do generowania dokumentów — to biblioteka rysunkowa, która po prostu generuje pliki PDF. Główne powody, dla których zespoły programistów rozważają migrację, to:
Tylko w kontekście naukowym:VectSharpjest przeznaczony do wizualizacji danych i tworzenia wykresów, a nie do dokumentów biznesowych, takich jak faktury, raporty czy certyfikaty.
Brak obsługi HTML:VectSharpnie może konwertować HTML ani CSS do formatu PDF. Każdy element musi być rysowany ręcznie przy użyciu poleceń grafiki wektorowej.
API oparte na współrzędnych: Każdy element musi być umieszczony przy użyciu dokładnych współrzędnych X,Y. Nie ma automatycznego układu, przepływu ani zawijania tekstu.
Brak stylów CSS: cała stylizacja odbywa się programowo poprzez wywołania metod. Programiści stron internetowych nie mogą wykorzystać swojej dotychczasowej wiedzy na temat CSS.
Brak obsługi JavaScript:VectSharpnie może renderować dynamicznych treści internetowych, interaktywnych wykresów ani wizualizacji opartych na JavaScript.
Brak układu tekstu: Automatyczne zawijanie tekstu, paginacja i układ przepływu nie są dostępne. Programiści muszą ręcznie obliczyć pozycje tekstu i podziały stron.
Paradygmat "Graphics-First": Biblioteka jest przeznaczona do tworzenia diagramów, a nie raportów czy faktur. Tworzenie dokumentów wymaga znacznej ilości pracy ręcznej.
Główny problem: biblioteka graficzna a generator dokumentów
VectSharp wymaga ręcznego rysowania wektorowego każdego elementu:
// VectSharp: Podręcznik 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: Podręcznik 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
Imports VectSharp
' VectSharp: Podręcznik 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
IronPDF wykorzystuje HTML — uniwersalny format dokumentów:
// 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)
IronPDFvs VectSharp: Porównanie funkcji
Zrozumienie różnic architektonicznych pomaga decydentom technicznym w ocenie inwestycji w migrację:
| Funkcja | VectSharp | IronPDF |
|---|---|---|
| Główne zastosowanie | Grafika wektorowa | Tworzenie dokumentów |
| Wynik w formacie PDF | Tak | Tak |
| Obsługa HTML | Nie | Tak |
| Licencjonowanie | LGPL | Komercjalne |
| Open Source | Tak | Częściowo (funkcje komercyjne) |
| Najlepsze dla | Wizualizacje naukowe | Ogólne dokumenty PDF |
| Dostosowanie | Ograniczone do grafiki | Obszerne, związane z dokumentacją |
| HTML do PDF | Nie | Pełny Chromium |
| URL do pliku PDF | Nie | Tak |
| Obsługa CSS | Nie | Pełny CSS3 |
| JavaScript | Nie | Pełna wersja ES2024 |
| Automatyczny układ | Nie | Tak |
| Automatyczne podziały stron | Nie | Tak |
| Zawijanie tekstu | Podręcznik | Automatyczne |
| Łączenie plików PDF | Nie | Tak |
| Podział plików PDF | Nie | Tak |
| Ochrona hasłem | Nie | Tak |
| Podpisy cyfrowe | Nie | Tak |
| Krzywa uczenia się | Wysokie (współrzędne) | Niski (HTML/CSS) |
| Rozbudowanie kodu | Bardzo wysoka | Low |
Szybki start: Migracja zVectSharpdo IronPDF
Migrację można rozpocząć natychmiast, wykonując te podstawowe kroki.
Krok 1: Zastąp pakiety NuGet
Usuń wszystkie pakiety VectSharp:
# RemoveVectSharppackages
dotnet remove package VectSharp
dotnet remove package VectSharp.PDF
# RemoveVectSharppackages
dotnet remove package VectSharp
dotnet remove package VectSharp.PDF
Zainstaluj IronPDF:
# Install IronPDF
dotnet add package IronPdf
# Install IronPDF
dotnet add package IronPdf
Krok 2: Aktualizacja przestrzeni nazw
Zastąp przestrzenie nazwVectSharpprzestrzenią nazw 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
Krok 3: Inicjalizacja licencji
Dodaj inicjalizację licencji podczas uruchamiania aplikacji:
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Przykłady migracji kodu
Konwersja HTML do PDF
VectSharp nie obsługuje konwersji HTML do PDF. Ta fundamentalna różnica w możliwościach determinuje wiele decyzji dotyczących migracji.
Podejście 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");
}
}
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
Podejście 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
VectSharp wymaga utworzenia obiektów Document, Page i Graphics, a następnie ręcznego pozycjonowania tekstu przy użyciu dokładnych współrzędnych i obiektów czcionek.IronPDFrenderuje HTML bezpośrednio z pełną obsługą stylów CSS.
W przypadku zaawansowanych scenariuszy konwersji HTML do PDF zapoznaj się z przewodnikiem po konwersji HTML do PDF.
Tworzenie dokumentów wielostronicowych
Dokumenty wielostronicowe ujawniają różnice architektoniczne między tymi bibliotekami .NET do obsługi plików PDF.
Podejście 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
Podejście 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
VectSharp wymaga tworzenia oddzielnych obiektów Page, oddzielnych kontekstów Graphics oraz ręcznego pozycjonowania każdego elementu tekstowego za pomocą współrzędnych i obiektów czcionek dla każdej strony.IronPDFwykorzystuje pojedynczy ciąg HTML z CSS page-break-after: always do automatycznego tworzenia dokumentów wielostronicowych.
Rysowanie kształtów i tekstu
Możliwości graficzne pokazują, w czymVectSharpprzoduje — ale także gdzie standardy internetowe zapewniają równoważną funkcjonalność przy mniejszym nakładzie kodu.
Podejście 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
Podejście 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
VectSharp wymaga tworzenia obiektów GraphicsPath, wywoływania Arc() z precyzyjnymi parametrami matematycznymi oraz zarządzania kolorami za pomocą Colour.FromRgb().IronPDFwykorzystuje znane właściwości CSS: background-color, border-radius: 50% dla okręgów oraz standardowe marginesy.
Dokumentacja APIVectSharpdo IronPDF
To mapowanie przyspiesza migrację, pokazując bezpośrednie odpowiedniki API:
| VectSharp | IronPDF |
|---|---|
Document |
ChromePdfRenderer |
Page |
Automatyczne |
Graphics |
HTML/CSS |
graphics.FillRectangle() |
CSS background-color na <div> |
graphics.StrokeRectangle() |
CSS border na <div> |
graphics.FillText() |
Elementy tekstowe HTML |
graphics.StrokePath() |
Obramowania SVG lub CSS |
GraphicsPath |
Element SVG <path> |
Colour.FromRgb() |
Wartości kolorów CSS |
Font / FontFamily |
CSS font-family |
doc.SaveAsPDF() |
pdf.SaveAs() |
| Ręczne dostosowywanie rozmiaru strony | RenderingOptions.PaperSize |
Strategie migracji
Strategia 1: Konwersja kodu rysunkowego na HTML/CSS
Zastąp rysowanie oparte na współrzędnych elementami HTML:
// VectSharp
graphics.FillRectangle(100, 50, 300, 80, Colour.FromRgb(0, 102, 204));
graphics.FillText(110, 80, "Header", font, Colours.White);
//IronPDFHTML 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);
//IronPDFHTML 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)
' IronPDFHTML equivalent
'<div style="
' position: absolute;
' left: 100px;
' top: 50px;
' width: 300px;
' height: 80px;
' background: rgb(0, 102, 204);
' color: white;
' padding: 10px;
'">Header</div>
Strategia 2: Użyj formatu SVG do grafiki wektorowej
W przypadku złożonych kształtów należy używać wbudowanego kodu SVG w HTML:
//VectSharppath
GraphicsPath path = new GraphicsPath();
path.MoveTo(100, 100);
path.LineTo(200, 50);
path.LineTo(300, 100);
path.Close();
graphics.FillPath(path, Colours.Blue);
//IronPDFSVG equivalent
<svg><polygon points="100,100 200,50 300,100" fill="blue"/></svg>
//VectSharppath
GraphicsPath path = new GraphicsPath();
path.MoveTo(100, 100);
path.LineTo(200, 50);
path.LineTo(300, 100);
path.Close();
graphics.FillPath(path, Colours.Blue);
//IronPDFSVG equivalent
<svg><polygon points="100,100 200,50 300,100" fill="blue"/></svg>
Imports System.Drawing.Drawing2D
'VectSharppath
Dim path As New GraphicsPath()
path.StartFigure()
path.AddLine(100, 100, 200, 50)
path.AddLine(200, 50, 300, 100)
path.CloseFigure()
graphics.FillPath(Brushes.Blue, path)
'IronPDFSVG equivalent
'<svg><polygon points="100,100 200,50 300,100" fill="blue"/></svg>
Strategia 3: Korzystaj z bibliotek wykresów JavaScript
W przypadku wizualizacji naukowych — specjalnościVectSharp—IronPDFmoże wykorzystywać potężne biblioteki JavaScript, takie jak Chart.js, D3.js lub 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)
Typowe problemy związane z migracją i ich rozwiązania
Problem 1: Różnice w układach współrzędnych
VectSharp wykorzystuje punkty od początku lewego górnego rogu z ręcznym pozycjonowaniem.
Rozwiązanie: Użyj pozycjonowania CSS:
.element {
position: absolute;
top: 50px;
left: 100px;
}
Problem 2: Obiekty czcionek
VectSharp tworzy programowo obiekty Font i FontFamily.
Rozwiązanie: Użyj 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>
Problem 3: Obsługa kolorów
VectSharp wykorzystuje wywołania metod Colour.FromRgb().
Rozwiązanie: Użyj kolorów CSS:
.header { color: rgb(0, 102, 204); background-color: #f0f0f0; }
Problem 4: Ścieżki graficzne
VectSharp wykorzystuje złożony interfejs API GraphicsPath z metodami MoveTo, LineTo, Arc.
Rozwiązanie: Użyj formatu SVG dla grafiki wektorowej:
<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 kontrolna migracji VectSharp
Zadania przed migracją
Przeprowadź audyt kodu źródłowego, aby zidentyfikować wszystkie przypadki użycia 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" .
Rozmiary stron dokumentu (wzory new Page(595, 842)). Kolory należy oznaczyć za pomocą Colour.FromRgb(). Określ konfiguracje czcionek. Mapuj złożoną grafikę wektorową przy użyciu GraphicsPath do konwersji SVG.
Zadania związane z aktualizacją kodu
- Usuń pakietyVectSharpNuGet
- Zainstaluj pakiet IronPdf NuGet
- Zaktualizuj instrukcje using od
VectSharpdoIronPdf - Zamień wywołania
FillRectanglena elementy CSS za pomocąbackground-color - Zamień wywołania
FillTextna elementy tekstowe HTML ze stylami CSS - Konwersja operacji
GraphicsPathna elementy SVG<path> - Zastąp ręczne zarządzanie stronami przez
RenderingOptions.PaperSize - Dodaj inicjalizację licencji podczas uruchamiania
Testy po migracji
Po migracji należy zweryfikować następujące aspekty:
- Porównaj wygląd wyjściowy wersjiVectSharpi IronPDF
- Sprawdź, czy kolory są zgodne, używając odpowiedników CSS wartości
Colour.FromRgb() - Sprawdź dokładność pozycjonowania elementów przekształconych z rozmieszczenia opartego na współrzędnych
- Sprawdź podziały stron w dokumentach wielostronicowych
- Sprawdź, czy grafika wektorowa wyświetla się poprawnie w formacie SVG
Kluczowe korzyści z migracji do IronPDF
Przejście zVectSharpnaIronPDFzapewnia kilka korzyści w zakresie generowania dokumentów:
Treści oparte na HTML: Programiści stron internetowych mogą wykorzystać swoje dotychczasowe umiejętności w zakresie HTML i CSS. Nie ma potrzeby uczenia się interfejsów API rysowania opartych na współrzędnych.
Automatyczny układ: zawijanie tekstu, paginacja i układ przepływu odbywają się automatycznie. Nie należy ręcznie obliczać pozycji elementów.
Obsługa nowoczesnego CSS: Pełna obsługa CSS3, w tym układy Flexbox i Grid. Responsywne projekty są bezpośrednio konwertowane do formatu PDF.
Wykonanie JavaScript: Interaktywne wykresy z Chart.js, D3.js lub Plotly wyświetlają się poprawnie. Treści dynamiczne działają zgodnie z oczekiwaniami.
URL-to-PDF: Przechwytuj dowolną stronę internetową jako plik PDF — funkcja niedostępna w VectSharp.
Operacje na plikach PDF: scalanie, dzielenie, dodawanie znaków wodnych, ochrona hasłem i podpisy cyfrowe to wbudowane funkcje.
Mniejsza rozbudowa kodu:HTML/CSSjest deklaratywny i czytelny. Ten sam dokument wymaga znacznie mniej kodu niż imperatywne podejście do rysowania stosowane w VectSharp.
Aktywny rozwój: W miarę jak do 2026 r. wzrośnie popularność .NET 10 i C# 14, regularne aktualizacjeIronPDFzapewnią zgodność z obecnymi i przyszłymi wersjami .NET.

