Przejdź do treści stopki
PRZEWODNIKI MIGRACJI

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
$vbLabelText   $csharpLabel

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)
$vbLabelText   $csharpLabel

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
SHELL

Zainstaluj IronPDF:

# Install IronPDF
dotnet add package IronPdf
# Install IronPDF
dotnet add package IronPdf
SHELL

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
$vbLabelText   $csharpLabel

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"
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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>
$vbLabelText   $csharpLabel

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>
$vbLabelText   $csharpLabel

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)
$vbLabelText   $csharpLabel

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

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

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" .
SHELL

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

  1. Usuń pakietyVectSharpNuGet
  2. Zainstaluj pakiet IronPdf NuGet
  3. Zaktualizuj instrukcje using od VectSharp do IronPdf
  4. Zamień wywołania FillRectangle na elementy CSS za pomocą background-color
  5. Zamień wywołania FillText na elementy tekstowe HTML ze stylami CSS
  6. Konwersja operacji GraphicsPath na elementy SVG <path>
  7. Zastąp ręczne zarządzanie stronami przez RenderingOptions.PaperSize
  8. 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.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie