Jak przeprowadzić migrację z VectSharp do IronPDF w języku C#
VectSharp (autorstwa Giorgio Bianchini, arklumpus/VectSharp) to lekka wieloplatformowa biblioteka grafiki wektorowej dla .NET Standard 2.0, często używana do wizualizacji naukowej i ilustracji technicznych. Kiedy zespoły deweloperskie potrzebują generować dokumenty biznesowe, raporty, faktury lub treści oparte na HTML, paradygmat bazujący na graficeVectSharptworzy tarcia. Jest zaprojektowany do tworzenia figur i wykresów, a nie do generowania dokumentów.
Niniejszy przewodnik zawiera kompletną ścieżkę migracji zVectSharpdo IronPDF wraz 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 grafiki wektorowej zaprojektowana do tworzenia diagramów, wykresów i ilustracji technicznych z modułowymi warstwami wyjściowymi, w tym VectSharp.PDF, VectSharp.SVG i VectSharp.Raster. Nie jest przeznaczony do generowania dokumentów—jest to biblioteka rysowania, której pakiet VectSharp.PDF dodaje metodę rozszerzeń SaveAsPDF na Document. 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(FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica), 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(FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica), 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(FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica), 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)
IronPDF vs 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 | Tylko LGPL-3.0 | Komercjalne |
| Otwarte Źródło | 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 | Niski |
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 (PDF first, then core)
dotnet remove package VectSharp.PDF
dotnet remove package VectSharp
# RemoveVectSharppackages (PDF first, then core)
dotnet remove package VectSharp.PDF
dotnet remove package VectSharp
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),
Colours.Black);
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),
Colours.Black);
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), _
Colours.Black)
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 stworzenia obiektu Document, Page i Graphics, następnie ręcznego rozmieszczenia tekstu z dokładnymi współrzędnymi i obiektami czcionek.IronPDF renderuje 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();
FontFamily helvetica =
FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica);
Font titleFont = new Font(helvetica, 24);
Font bodyFont = new Font(helvetica, 14);
// Page 1
Page page1 = new Page(595, 842);
Graphics g1 = page1.Graphics;
g1.FillText(50, 50, "Page 1", titleFont, Colours.Black);
g1.FillText(50, 100, "First page content", bodyFont, Colours.Black);
doc.Pages.Add(page1);
// Page 2
Page page2 = new Page(595, 842);
Graphics g2 = page2.Graphics;
g2.FillText(50, 50, "Page 2", titleFont, Colours.Black);
g2.FillText(50, 100, "Second page content", bodyFont, Colours.Black);
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();
FontFamily helvetica =
FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica);
Font titleFont = new Font(helvetica, 24);
Font bodyFont = new Font(helvetica, 14);
// Page 1
Page page1 = new Page(595, 842);
Graphics g1 = page1.Graphics;
g1.FillText(50, 50, "Page 1", titleFont, Colours.Black);
g1.FillText(50, 100, "First page content", bodyFont, Colours.Black);
doc.Pages.Add(page1);
// Page 2
Page page2 = new Page(595, 842);
Graphics g2 = page2.Graphics;
g2.FillText(50, 50, "Page 2", titleFont, Colours.Black);
g2.FillText(50, 100, "Second page content", bodyFont, Colours.Black);
doc.Pages.Add(page2);
doc.SaveAsPDF("multipage.pdf");
}
}
Imports VectSharp
Imports VectSharp.PDF
Imports System
Module Program
Sub Main()
Dim doc As New Document()
Dim helvetica As FontFamily = FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica)
Dim titleFont As New Font(helvetica, 24)
Dim bodyFont As New Font(helvetica, 14)
' Page 1
Dim page1 As New Page(595, 842)
Dim g1 As Graphics = page1.Graphics
g1.FillText(50, 50, "Page 1", titleFont, Colours.Black)
g1.FillText(50, 100, "First page content", bodyFont, Colours.Black)
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", titleFont, Colours.Black)
g2.FillText(50, 100, "Second page content", bodyFont, Colours.Black)
doc.Pages.Add(page2)
doc.SaveAsPDF("multipage.pdf")
End Sub
End Module
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 stworzenia oddzielnych obiektów Page, oddzielnych kontekstów Graphics i ręcznego rozmieszczenia każdego elementu tekstowego za pomocą współrzędnych i obiektów czcionek dla każdej strony.IronPDF używa pojedynczego ciągu 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 - FillText requires a colour parameter
graphics.FillText(50, 200, "VectSharp Graphics",
new Font(FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica), 20),
Colours.Black);
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 - FillText requires a colour parameter
graphics.FillText(50, 200, "VectSharp Graphics",
new Font(FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica), 20),
Colours.Black);
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 - FillText requires a colour parameter
graphics.FillText(50, 200, "VectSharp Graphics",
New Font(FontFamily.ResolveFontFamily(FontFamily.StandardFontFamilies.Helvetica), 20),
Colours.Black)
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 stworzenia obiektów GraphicsPath, wywołania Arc() z dokładnymi parametrami matematycznymi oraz zarządzania kolorami przez Colour.FromRgb().IronPDF korzysta ze znanych właściwości CSS: background-color, border-radius: 50% dla kół oraz standardowych marginesów.
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 |
graphics.StrokeRectangle() |
CSS border na |
graphics.FillText() |
Elementy tekstowe HTML |
graphics.StrokePath() |
Obramowania SVG lub CSS |
GraphicsPath |
SVG element |
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);
//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>
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);
//IronPDF SVG 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);
//IronPDF SVG equivalent
<svg><polygon points="100,100 200,50 300,100" fill="blue"/></svg>
'VectSharppath
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>
Strategia 3: Korzystaj z bibliotek wykresów JavaScript
W przypadku wizualizacji naukowych — specjalnościVectSharp—IronPDF moż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 programowo tworzy 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 używa wywołań 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 korzysta z złożonego 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 (wzorce new Page(595, 842)). Zwróć uwagę na schematy kolorów używając Colour.FromRgb(). Określ konfiguracje czcionek. Mapuj złożoną grafikę wektorową używając GraphicsPath do konwersji SVG.
Zadania związane z aktualizacją kodu
- Usuń pakietyVectSharpNuGet
- Zainstaluj pakiet NuGet IronPDF
- Zaktualizuj instrukcje using z
VectSharpnaIronPdf - Konwertuj wywołania
FillRectanglena boksy CSS za pomocąbackground-color - Konwertuj wywołania
FillTextna elementy tekstowe HTML z stylizacją CSS - Konwertuj operacje
GraphicsPathna elementySVG - Zastąp ręczne zarządzanie stronami za pomocą
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
- Zweryfikuj zgodność kolorów używając CSS odpowiedników 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 zVectSharpna IronPDF zapewnia 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: scałanie, 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.
Aktywna Praca Rozwojowa: Regularne aktualizacje IronPDF zapewniają zgodność z bieżącymi i przyszłymi wersjami .NET.

