Przejdź do treści stopki
PRZEWODNIKI MIGRACJI

Jak przeprowadzić migrację z Gnostice PDFOne do IronPDF w języku C#

Przejście zGnostice PDFOnena IronPDF zmienia proces pracy z plikami PDF w środowisku .NET z podejścia opartego na współrzędnych i rozdrobnionego na różne platformy na ujednolicone rozwiązanie oparte na HTML/CSS z pełną obsługą nowoczesnych standardów internetowych. Niniejszy przewodnik zawiera kompleksową, szczegółową ścieżkę migracji, która eliminuje udokumentowane ograniczenia dotyczące CSS, JavaScript i stabilności pamięci dla profesjonalnych programistów .NET.

Dlaczego warto przejść zGnostice PDFOnena IronPDF

Wyzwania związane z Gnostice PDFOne

Gnostice PDFOne i Document Studio .NET mają dobrze udokumentowane ograniczenia, które wpływają na aplikacje produkcyjne. Dziedziczony pakiet NuGet PDFOne.NET jest teraz również przestarzały (ostatnie wydanie 24.1.60, 1 lipca 2024) z zaleceniem dostawcy, aby nowe prace kierować do pakietów Gnostice.DocumentStudio.*:

  1. Brak obsługi zewnętrznych arkuszy CSS: DokumentacjaGnostice PDFOnewyraźnie stwierdza, że nie obsługuje ona zewnętrznych arkuszy stylów CSS — co jest podstawowym wymogiem nowoczesnej konwersji stron internetowych do formatu PDF.

  2. Brak możliwości wykonywania kodu JavaScript: Treści dynamiczne wymagające JavaScriptu nie mogą być renderowane, co uniemożliwia dokładną konwersję nowoczesnych aplikacji internetowych.

  3. Brak bezpośredniej konwersji HTML do PDF:Gnostice PDFOnenie oferuje bezpośredniej konwersji HTML do PDF. Konieczne jest użycie Document Studio do konwersji HTML lub ręczne parsowanie i renderowanie elementów HTML — co stanowi znaczny nakład pracy programistycznej.

  4. Fragmentacja platformy: oddzielne produkty dla WinForms, WPF, ASP.NET, Xamarin — każdy z innym zestawem funkcji i interfejsów API. Może być konieczne posiadanie wielu licencji i baz kodu.

  5. Wycieki pamięci i stabilność: Na forach użytkowników i serwisie Stack Overflow zgłaszane są uporczywe wycieki pamięci, błąd JPEG #53 oraz wyjątki StackOverflow podczas przetwarzania obrazów.

  6. Brak obsługi Unicode z kierunkiem pisania od prawej do lewej: Język arabski, hebrajski i inne języki RTL nie są wyraźnie obsługiwane — co stanowi poważną przeszkodę dla aplikacji międzynarodowych.

  7. Ograniczona obsługa podpisów cyfrowych: W programieGnostice PDFOnepodpisy cyfrowe były dotychczas niedostępne lub zawodne.

  8. API oparte na współrzędnych: Wiele operacji wymaga ręcznego pozycjonowania X/Y zamiast nowoczesnych metod układania, co wymaga precyzyjnych obliczeń dla każdego elementu.

PorównanieGnostice PDFOnei IronPDF

Aspekt Gnostice PDFOne IronPDF
Zewnętrzny CSS Nieobsługiwane Obsługiwane
Wykonanie kodu JavaScript Nieobsługiwane Pełny silnik Chromium
Języki RTL Nieobsługiwane Pełna obsługa Unicode
Podpisy cyfrowe Ograniczone/brakujące Pełna obsługa X509
Platforma Produkty fragmentaryczne Pojedyncza, ujednolicona biblioteka
Stabilność pamięci Zgłoszone problemy Stabilny, dobrze zarządzany
HTML do PDF Podstawowe, wymaga obejść Renderowanie na poziomie przeglądarki Chrome
Krzywa uczenia się Złożony interfejs API Proste, intuicyjne API
Nowoczesny CSS (Flexbox, Grid) Nieobsługiwane Pełna obsługa CSS3
Obsługa obrazów Znane problemy Niezawodny

Dla zespołów planujących przyjęcie .NET 10 i C# 14,IronPDF zapewnia zintegrowaną bibliotekę, która działa spójnie na wszystkich platformach .NET.


Ocena złożoności migracji

Szacowany nakład pracy według funkcji

Funkcja Złożoność migracji
Wczytywanie/zapisywanie plików PDF Bardzo niski
Łączenie plików PDF Bardzo niski
Podział plików PDF Niski
Ekstrakcja tekstu Niski
Znaki wodne Niski
Nagłówki/stopki Niski
HTML do PDF Niski
Szyfrowanie Medium
Pola formularza Medium
Podpisy cyfrowe Niski

Korzyści, jakie zyskujesz

Po migracji zGnostice PDFOnedo IronPDF dostępne stają się następujące funkcje, które wcześniej były niemożliwe:

  • Zewnętrzne arkusze stylów CSS
  • Wykonanie kodu JavaScript
  • Obsługa języków RTL (arabski, hebrajski)
  • CSS Grid i Flexbox
  • Niezawodne podpisy cyfrowe
  • Lepsze zarządzanie pamięcią
  • Obsługa wielu platform przy użyciu jednej bazy kodu

Zanim zaczniesz

Wymagania wstępne

  1. Wersja .NET:IronPDF obsługuje .NET Framework 4.6.2+ oraz .NET Core 2.0+ / .NET 5/6/7/8/9+
  2. Klucz licencyjny: Uzyskaj klucz licencyjny IronPDF na stronie ironpdf.com
  3. Kopia zapasowa: Utwórz gałąź do prac migracyjnych

Zidentyfikuj wszystkie zastosowania Gnostice PDFOne

# Find all Gnostice references
grep -r "Gnostice\|PDFOne\|PDFDocument\|PDFPage\|DocExporter" --include="*.cs" .

# Find package references
grep -r "Gnostice\|PDFOne" --include="*.csproj" .
# Find all Gnostice references
grep -r "Gnostice\|PDFOne\|PDFDocument\|PDFPage\|DocExporter" --include="*.cs" .

# Find package references
grep -r "Gnostice\|PDFOne" --include="*.csproj" .
SHELL

Zmiany w pakiecie NuGet

# Remove Gnostice packages (PDFOne.NET is the legacy, deprecated package)
dotnet remove package PDFOne.NET
dotnet remove package Gnostice.DocumentStudio.WinForms
dotnet remove package Gnostice.DocumentStudio.WPF
dotnet remove package Gnostice.DocumentStudio.ASP
dotnet remove package Gnostice.DocumentStudio.ASP.Core
dotnet remove package Gnostice.DocumentStudio.Xamarin

# Install IronPDF
dotnet add package IronPdf
# Remove Gnostice packages (PDFOne.NET is the legacy, deprecated package)
dotnet remove package PDFOne.NET
dotnet remove package Gnostice.DocumentStudio.WinForms
dotnet remove package Gnostice.DocumentStudio.WPF
dotnet remove package Gnostice.DocumentStudio.ASP
dotnet remove package Gnostice.DocumentStudio.ASP.Core
dotnet remove package Gnostice.DocumentStudio.Xamarin

# Install IronPDF
dotnet add package IronPdf
SHELL

Szybki start – migracja

Krok 1: Zaktualizuj konfigurację licencji

Przed (Gnostice PDFOne):

//Gnostice PDFOnelicense is set via the static PDFOne class
Gnostice.PDFOne.PDFOne.LicenseKey = "YOUR-GNOSTICE-LICENSE";
//Gnostice PDFOnelicense is set via the static PDFOne class
Gnostice.PDFOne.PDFOne.LicenseKey = "YOUR-GNOSTICE-LICENSE";
Imports Gnostice.PDFOne

' Gnostice PDFOnelicense is set via the static PDFOne class
PDFOne.LicenseKey = "YOUR-GNOSTICE-LICENSE"
$vbLabelText   $csharpLabel

Po (IronPDF):

// Set once at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";

// Or in appsettings.json:
// { "IronPdf.License.LicenseKey": "YOUR-LICENSE-KEY" }
// Set once at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";

// Or in appsettings.json:
// { "IronPdf.License.LicenseKey": "YOUR-LICENSE-KEY" }
' Set once at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY"

' Or in appsettings.json:
' { "IronPdf.License.LicenseKey": "YOUR-LICENSE-KEY" }
$vbLabelText   $csharpLabel

Krok 2: Zaktualizuj importy przestrzeni nazw

// Before (Gnostice PDFOne)
using Gnostice.PDFOne;
using Gnostice.PDFOne.Document;
using Gnostice.PDFOne.Graphics;

// After (IronPDF)
using IronPdf;
using IronPdf.Editing;
// Before (Gnostice PDFOne)
using Gnostice.PDFOne;
using Gnostice.PDFOne.Document;
using Gnostice.PDFOne.Graphics;

// After (IronPDF)
using IronPdf;
using IronPdf.Editing;
Imports IronPdf
Imports IronPdf.Editing
$vbLabelText   $csharpLabel

Kompletna dokumentacija API

Mapowanie klas podstawowych

Gnostice PDFOne IronPDF Opis
PDFDocument PdfDocument Główna klasa dokumentu PDF
PDFPage PdfDocument.Pages[i] Przedstawienie strony
PDFFont Stylizacja CSS Specyfikacja czcionki
PDFTextElement Treść HTML Treść tekstowa
PDFImageElement Tagi HTML <img> Treść obrazu
DocExporter ChromePdfRenderer Konwersja HTML/URL do formatu PDF

Operacje na dokumentach

Gnostice PDFOne IronPDF
new PDFDocument() new PdfDocument()
doc.Load(path) PdfDocument.FromFile(path)
doc.Open() N/A (automatyczne)
doc.Save(path) pdf.SaveAs(path)
doc.Close() pdf.Dispose()
doc.Pages.Count pdf.PageCount
doc.Pages.Add() Renderuj HTML lub scal

Operacje scałania

Gnostice PDFOne IronPDF
doc.Append(otherDoc) PdfDocument.Merge(pdf1, pdf2)
Wiele wywołań Append() PdfDocument.Merge(list)

Przykłady migracji kodu

Przykład 1: Konwersja HTML do PDF

Przed (Gnostice PDFOne):

// NuGet: Install-Package PDFOne.NET (deprecated; vendor recommends Gnostice.DocumentStudio.WinForms)
using Gnostice.PDFOne;
using Gnostice.PDFOne.Graphics;
using System;

class Program
{
    static void Main()
    {
        PDFDocument doc = new PDFDocument();
        doc.Open();

        PDFPage page = doc.Pages.Add();

        // PDFOne doesn't have direct HTML do PDF conversion
        // You need to use Document Studio for HTML conversion
        // Or manually parse and render HTML elements

        PDFTextElement textElement = new PDFTextElement();
        textElement.Text = "Simple text conversion instead of HTML";
        textElement.Draw(page, 10, 10);

        doc.Save("output.pdf");
        doc.Close();
    }
}
// NuGet: Install-Package PDFOne.NET (deprecated; vendor recommends Gnostice.DocumentStudio.WinForms)
using Gnostice.PDFOne;
using Gnostice.PDFOne.Graphics;
using System;

class Program
{
    static void Main()
    {
        PDFDocument doc = new PDFDocument();
        doc.Open();

        PDFPage page = doc.Pages.Add();

        // PDFOne doesn't have direct HTML do PDF conversion
        // You need to use Document Studio for HTML conversion
        // Or manually parse and render HTML elements

        PDFTextElement textElement = new PDFTextElement();
        textElement.Text = "Simple text conversion instead of HTML";
        textElement.Draw(page, 10, 10);

        doc.Save("output.pdf");
        doc.Close();
    }
}
Imports Gnostice.PDFOne
Imports Gnostice.PDFOne.Graphics
Imports System

Module Program
    Sub Main()
        Dim doc As New PDFDocument()
        doc.Open()

        Dim page As PDFPage = doc.Pages.Add()

        ' PDFOne doesn't have direct HTML to PDF conversion
        ' You need to use Document Studio for HTML conversion
        ' Or manually parse and render HTML elements

        Dim textElement As New PDFTextElement()
        textElement.Text = "Simple text conversion instead of HTML"
        textElement.Draw(page, 10, 10)

        doc.Save("output.pdf")
        doc.Close()
    End Sub
End Module
$vbLabelText   $csharpLabel

Po (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        string html = "<h1>Hello World</h1><p>This is HTML content.</p>";

        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        string html = "<h1>Hello World</h1><p>This is HTML content.</p>";

        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
Imports IronPdf
Imports System

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()

        Dim html As String = "<h1>Hello World</h1><p>This is HTML content.</p>"

        Dim pdf = renderer.RenderHtmlAsPdf(html)
        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

Różnica jest znaczna:Gnostice PDFOnenie pozwala na bezpośrednią konwersję HTML do PDF — należy ręcznie tworzyć elementy tekstowe i pozycjonować je za pomocą współrzędnych. Funkcja ChromePdfRendererIronPDF zapewnia bezpośrednie renderowanie HTML z pełnym wsparciem dla CSS3 i JavaScript. Więcej opcji renderowania można znaleźć w dokumentacji dotyczącej konwersji HTML do PDF.

Przykład 2: Łączenie plików PDF

Przed (Gnostice PDFOne):

// NuGet: Install-Package PDFOne.NET (deprecated; vendor recommends Gnostice.DocumentStudio.WinForms)
using Gnostice.PDFOne;
using Gnostice.PDFOne.Document;
using System;

class Program
{
    static void Main()
    {
        PDFDocument doc1 = new PDFDocument();
        doc1.Load("document1.pdf");

        PDFDocument doc2 = new PDFDocument();
        doc2.Load("document2.pdf");

        PDFDocument mergedDoc = new PDFDocument();
        mergedDoc.Open();

        mergedDoc.Append(doc1);
        mergedDoc.Append(doc2);

        mergedDoc.Save("merged.pdf");

        doc1.Close();
        doc2.Close();
        mergedDoc.Close();
    }
}
// NuGet: Install-Package PDFOne.NET (deprecated; vendor recommends Gnostice.DocumentStudio.WinForms)
using Gnostice.PDFOne;
using Gnostice.PDFOne.Document;
using System;

class Program
{
    static void Main()
    {
        PDFDocument doc1 = new PDFDocument();
        doc1.Load("document1.pdf");

        PDFDocument doc2 = new PDFDocument();
        doc2.Load("document2.pdf");

        PDFDocument mergedDoc = new PDFDocument();
        mergedDoc.Open();

        mergedDoc.Append(doc1);
        mergedDoc.Append(doc2);

        mergedDoc.Save("merged.pdf");

        doc1.Close();
        doc2.Close();
        mergedDoc.Close();
    }
}
Imports Gnostice.PDFOne
Imports Gnostice.PDFOne.Document
Imports System

Module Program
    Sub Main()
        Dim doc1 As New PDFDocument()
        doc1.Load("document1.pdf")

        Dim doc2 As New PDFDocument()
        doc2.Load("document2.pdf")

        Dim mergedDoc As New PDFDocument()
        mergedDoc.Open()

        mergedDoc.Append(doc1)
        mergedDoc.Append(doc2)

        mergedDoc.Save("merged.pdf")

        doc1.Close()
        doc2.Close()
        mergedDoc.Close()
    End Sub
End Module
$vbLabelText   $csharpLabel

Po (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var pdf1 = PdfDocument.FromFile("document1.pdf");
        var pdf2 = PdfDocument.FromFile("document2.pdf");

        var merged = PdfDocument.Merge(pdf1, pdf2);
        merged.SaveAs("merged.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var pdf1 = PdfDocument.FromFile("document1.pdf");
        var pdf2 = PdfDocument.FromFile("document2.pdf");

        var merged = PdfDocument.Merge(pdf1, pdf2);
        merged.SaveAs("merged.pdf");
    }
}
Imports IronPdf
Imports System
Imports System.Collections.Generic

Module Program
    Sub Main()
        Dim pdf1 = PdfDocument.FromFile("document1.pdf")
        Dim pdf2 = PdfDocument.FromFile("document2.pdf")

        Dim merged = PdfDocument.Merge(pdf1, pdf2)
        merged.SaveAs("merged.pdf")
    End Sub
End Module
$vbLabelText   $csharpLabel

PodejścieGnostice PDFOnewymaga utworzenia nowego dokumentu, otwarcia go, osobnego załadowania dokumentów źródłowych, dołączenia każdego z nich oraz ręcznego zamknięcia wszystkich trzech dokumentów. Statyczna metoda MergeIronPDF obsługuje to w trzech liniach z właściwym zarządzaniem zasobami. Dowiedz się więcej o łączeniu i dzieleniu plików PDF.

Przykład 3: Dodaj znak wodny do pliku PDF

Przed (Gnostice PDFOne):

// NuGet: Install-Package PDFOne.NET (deprecated; vendor recommends Gnostice.DocumentStudio.WinForms)
using Gnostice.PDFOne;
using Gnostice.PDFOne.Graphics;
using System;
using System.Drawing;

class Program
{
    static void Main()
    {
        PDFDocument doc = new PDFDocument();
        doc.Load("input.pdf");

        PDFFont font = new PDFFont(PDFStandardFont.Helvetica, 48);

        foreach (PDFPage page in doc.Pages)
        {
            PDFTextElement watermark = new PDFTextElement();
            watermark.Text = "CONFIDENTIAL";
            watermark.Font = font;
            watermark.Color = Color.FromArgb(128, 255, 0, 0);
            watermark.RotationAngle = 45;

            watermark.Draw(page, 200, 400);
        }

        doc.Save("watermarked.pdf");
        doc.Close();
    }
}
// NuGet: Install-Package PDFOne.NET (deprecated; vendor recommends Gnostice.DocumentStudio.WinForms)
using Gnostice.PDFOne;
using Gnostice.PDFOne.Graphics;
using System;
using System.Drawing;

class Program
{
    static void Main()
    {
        PDFDocument doc = new PDFDocument();
        doc.Load("input.pdf");

        PDFFont font = new PDFFont(PDFStandardFont.Helvetica, 48);

        foreach (PDFPage page in doc.Pages)
        {
            PDFTextElement watermark = new PDFTextElement();
            watermark.Text = "CONFIDENTIAL";
            watermark.Font = font;
            watermark.Color = Color.FromArgb(128, 255, 0, 0);
            watermark.RotationAngle = 45;

            watermark.Draw(page, 200, 400);
        }

        doc.Save("watermarked.pdf");
        doc.Close();
    }
}
Imports Gnostice.PDFOne
Imports Gnostice.PDFOne.Graphics
Imports System
Imports System.Drawing

Module Program
    Sub Main()
        Dim doc As New PDFDocument()
        doc.Load("input.pdf")

        Dim font As New PDFFont(PDFStandardFont.Helvetica, 48)

        For Each page As PDFPage In doc.Pages
            Dim watermark As New PDFTextElement()
            watermark.Text = "CONFIDENTIAL"
            watermark.Font = font
            watermark.Color = Color.FromArgb(128, 255, 0, 0)
            watermark.RotationAngle = 45

            watermark.Draw(page, 200, 400)
        Next

        doc.Save("watermarked.pdf")
        doc.Close()
    End Sub
End Module
$vbLabelText   $csharpLabel

Po (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;
using System;

class Program
{
    static void Main()
    {
        var pdf = PdfDocument.FromFile("input.pdf");

        var watermark = new TextStamper()
        {
            Text = "CONFIDENTIAL",
            FontSize = 48,
            Opacity = 50,
            Rotation = 45,
            VerticalAlignment = VerticalAlignment.Middle,
            HorizontalAlignment = HorizontalAlignment.Center
        };

        pdf.ApplyStamp(watermark);
        pdf.SaveAs("watermarked.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;
using System;

class Program
{
    static void Main()
    {
        var pdf = PdfDocument.FromFile("input.pdf");

        var watermark = new TextStamper()
        {
            Text = "CONFIDENTIAL",
            FontSize = 48,
            Opacity = 50,
            Rotation = 45,
            VerticalAlignment = VerticalAlignment.Middle,
            HorizontalAlignment = HorizontalAlignment.Center
        };

        pdf.ApplyStamp(watermark);
        pdf.SaveAs("watermarked.pdf");
    }
}
Imports IronPdf
Imports IronPdf.Editing
Imports System

Module Program
    Sub Main()
        Dim pdf = PdfDocument.FromFile("input.pdf")

        Dim watermark = New TextStamper() With {
            .Text = "CONFIDENTIAL",
            .FontSize = 48,
            .Opacity = 50,
            .Rotation = 45,
            .VerticalAlignment = VerticalAlignment.Middle,
            .HorizontalAlignment = HorizontalAlignment.Center
        }

        pdf.ApplyStamp(watermark)
        pdf.SaveAs("watermarked.pdf")
    End Sub
End Module
$vbLabelText   $csharpLabel

PodejścieGnostice PDFOnewymaga tworzenia obiektów PDFFont, ręcznego iterowania przez strony, obliczania współrzędnych (200, 400) i ustawiania właściwości na obiektach PDFTextElement. Funkcja TextStamperIronPDF zapewnia deklaratywną konfigurację z automatycznym wyśrodkowaniem i stosowaniem do stron—bez potrzeby obliczeń współrzędnych. Dodatkowe opcje można znaleźć w dokumentacji dotyczącej znaków wodnych.


Ważne uwagi dotyczące migracji

Układ oparty na współrzędnych do układu HTML/CSS

Najważniejszą zmianą paradygmatu w migracjiGnostice PDFOnejest przejście z pozycjonowania opartego na współrzędnych na układ HTML/CSS:

// Gnostice PDFOne: Manual coordinate positioning
watermark.Draw(page, 200, 400);  // X=200, Y=400

// IronPDF: Declarative alignment
watermark.VerticalAlignment = VerticalAlignment.Middle;
watermark.HorizontalAlignment = HorizontalAlignment.Center;
// Gnostice PDFOne: Manual coordinate positioning
watermark.Draw(page, 200, 400);  // X=200, Y=400

// IronPDF: Declarative alignment
watermark.VerticalAlignment = VerticalAlignment.Middle;
watermark.HorizontalAlignment = HorizontalAlignment.Center;
' Gnostice PDFOne: Manual coordinate positioning
watermark.Draw(page, 200, 400)  ' X=200, Y=400

' IronPDF: Declarative alignment
watermark.VerticalAlignment = VerticalAlignment.Middle
watermark.HorizontalAlignment = HorizontalAlignment.Center
$vbLabelText   $csharpLabel

Obiekty czcionek w stylach CSS

// Gnostice PDFOne
PDFFont font = new PDFFont(PDFStandardFont.Helvetica, 48);
watermark.Font = font;

//IronPDF- use CSS in HTML content
var html = "<span style='font-family: Helvetica, Arial, sans-serif; font-size: 48pt;'>Text</span>";
// Gnostice PDFOne
PDFFont font = new PDFFont(PDFStandardFont.Helvetica, 48);
watermark.Font = font;

//IronPDF- use CSS in HTML content
var html = "<span style='font-family: Helvetica, Arial, sans-serif; font-size: 48pt;'>Text</span>";
Imports Gnostice.PDFOne

' Gnostice PDFOne
Dim font As New PDFFont(PDFStandardFont.Helvetica, 48)
watermark.Font = font

' IronPDF- use CSS in HTML content
Dim html As String = "<span style='font-family: Helvetica, Arial, sans-serif; font-size: 48pt;'>Text</span>"
$vbLabelText   $csharpLabel

Indeksowanie stron

Gnostice PDFOne często stosuje indeksowanie stron od 1, podczas gdy IronPDF stosuje indeksowanie od 0 (standardowa konwencja .NET):

// Gnostice PDFOne: May use 1-indexed
var page = doc.Pages[1];  // First page

// IronPDF: 0-indexed
var page = pdf.Pages[0];  // First page
// Gnostice PDFOne: May use 1-indexed
var page = doc.Pages[1];  // First page

// IronPDF: 0-indexed
var page = pdf.Pages[0];  // First page
' Gnostice PDFOne: May use 1-indexed
Dim page = doc.Pages(1)  ' First page

' IronPDF: 0-indexed
Dim page = pdf.Pages(0)  ' First page
$vbLabelText   $csharpLabel

Funkcje, które teraz działają

Po migracji zGnostice PDFOnedo IronPDF dostępne stają się następujące funkcje, które wcześniej były problematyczne lub niemożliwe do zrealizowania:

  • Zewnętrzne arkusze CSS: Arkusze stylów, które nie działały w Gnostice PDFOne, są teraz wyświetlane poprawnie
  • Treści JavaScript: brakujące wcześniej treści dynamiczne są teraz widoczne
  • Języki RTL: arabski, hebrajski i inne języki pisane od prawej do lewej działają poprawnie
  • CSS Grid i Flexbox: w pełni obsługiwane są nowoczesne techniki układania stron
  • Podpisy cyfrowe: Niezawodne podpisywanie certyfikatów X509

Rozwiązywanie problemów

Problem 1: Nie znaleziono elementu PDFTextElement

Problem: PDFTextElement nie istnieje w IronPDF.

Rozwiązanie: Użyj treści HTML lub TextStamper:

// For new documents - render HTML
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<p>Your text here</p>");

// For existing documents - use stampers
var stamper = new TextStamper() { Text = "Added Text" };
pdf.ApplyStamp(stamper);
// For new documents - render HTML
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<p>Your text here</p>");

// For existing documents - use stampers
var stamper = new TextStamper() { Text = "Added Text" };
pdf.ApplyStamp(stamper);
Imports IronPdf

' For new documents - render HTML
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<p>Your text here</p>")

' For existing documents - use stampers
Dim stamper As New TextStamper() With {.Text = "Added Text"}
pdf.ApplyStamp(stamper)
$vbLabelText   $csharpLabel

Problem 2: Obiekty PDFFont

Problem:Gnostice PDFOneużywa obiektów PDFFont;IronPDF wykorzystuje CSS.

Rozwiązanie:

// Gnostice PDFOne
PDFFont font = new PDFFont(PDFStandardFont.Helvetica, 12);

//IronPDF- use CSS
var html = "<span style='font-family: Helvetica, Arial, sans-serif; font-size: 12pt;'>Text</span>";
// Gnostice PDFOne
PDFFont font = new PDFFont(PDFStandardFont.Helvetica, 12);

//IronPDF- use CSS
var html = "<span style='font-family: Helvetica, Arial, sans-serif; font-size: 12pt;'>Text</span>";
' Gnostice PDFOne
Dim font As New PDFFont(PDFStandardFont.Helvetica, 12)

' IronPDF- use CSS
Dim html = "<span style='font-family: Helvetica, Arial, sans-serif; font-size: 12pt;'>Text</span>"
$vbLabelText   $csharpLabel

Problem 3: Nie znaleziono DocExporter

Problem: Klasa DocExporter nie istnieje w IronPDF.

Rozwiązanie: Użyj ChromePdfRenderer:

// Gnostice PDFOne
DocExporter exporter = new DocExporter();
exporter.Export(doc, "output.pdf", DocumentFormat.PDF);

// IronPDF
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlFileAsPdf("input.html");
pdf.SaveAs("output.pdf");
// Gnostice PDFOne
DocExporter exporter = new DocExporter();
exporter.Export(doc, "output.pdf", DocumentFormat.PDF);

// IronPDF
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlFileAsPdf("input.html");
pdf.SaveAs("output.pdf");
' Gnostice PDFOne
Dim exporter As New DocExporter()
exporter.Export(doc, "output.pdf", DocumentFormat.PDF)

' IronPDF
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlFileAsPdf("input.html")
pdf.SaveAs("output.pdf")
$vbLabelText   $csharpLabel

Wydanie 4: Ulepszenia pamięci

Problem: W programieGnostice PDFOnezgłoszono wycieki pamięci.

Rozwiązanie:IronPDF zapewnia stabilne zarządzanie pamięcią. Należy stosować odpowiednie wzorce dyspozycyjne:

using (var pdf = PdfDocument.FromFile("large.pdf"))
{
    // Process PDF
    pdf.SaveAs("output.pdf");
}  // Automatically disposed
using (var pdf = PdfDocument.FromFile("large.pdf"))
{
    // Process PDF
    pdf.SaveAs("output.pdf");
}  // Automatically disposed
Imports PdfDocument

Using pdf = PdfDocument.FromFile("large.pdf")
    ' Process PDF
    pdf.SaveAs("output.pdf")
End Using
$vbLabelText   $csharpLabel

Lista kontrolna migracji

Przed migracją

  • Sporządź wykaz wszystkich wystąpieńGnostice PDFOnew kodzie źródłowym
  • Zwróć uwagę na funkcje, które wcześniej nie działały (CSS, JS, RTL) — teraz już działają!
  • Problemy z pamięcią dokumentów do testów porównawczych
  • Uzyskaj klucz licencyjny IronPDF
  • Utwórz gałąź migracji w systemie kontroli wersji

Migracja kodu

  • Usuń pakietyGnostice PDFOneNuGet
  • Zainstaluj pakiet NuGet IronPDF: dotnet add package IronPdf
  • Zaktualizuj importy przestrzeni nazw
  • Zastąp konfigurację klucza licencyjnego
  • Przekształć PDFDocument na PdfDocument
  • Przekształć DocExporter na ChromePdfRenderer
  • Zastąp rysowanie oparte na współrzędnych stemplowaniem HTML
  • Zaktualizuj PDFFont do stylizacji CSS
  • Przekształć doc.Append() na PdfDocument.Merge()

Testowanie

  • Przetestuj konwersję HTML do PDF
  • Sprawdź, czy zewnętrzny CSS działa teraz
  • Testowanie treści zależnych od JavaScript
  • Przetestuj języki RTL (w razie potrzeby)
  • Testuj podpisy cyfrowe (już dostępne!)
  • Testowanie łączenia plików PDF
  • Testowanie znaków wodnych
  • Porównaj zużycie pamięci

Po migracji

  • Usuń licencję Gnostice PDFOne
  • Aktualizacja dokumentacji
  • Usunąć obejścia ograniczeń Gnostice PDFOne
  • Przeprowadź szkolenie zespołu z zakresu API IronPDF

Zwróć uwagęGnostice jest zarejestrowanym znakiem towarowym swojego wlasciciela. Ta strona nie jest zwiazana, polecana ani sponsorowana przez Gnostice Information Technologies. Wszystkie nazwy produktów, logo i marki są własnością ich odpowiednich właścicieli. Porównania mają charakter wyłącznie informacyjny i odzwierciedlają informacje dostępne publicznie w momencie pisania.

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

Zespół wsparcia Iron

Jesteśmy online 24 godziny, 5 dni w tygodniu.
Czat
E-mail
Zadzwoń do mnie