Przejdź do treści stopki
PRZEWODNIKI MIGRACJI

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

Przejście z Gnostice PDFOne naIronPDFzmienia 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 udokumentówane ograniczenia dotyczące CSS, JavaScript i stabilności pamięci dla profesjonalnych programistów .NET.

Dlaczego warto przejść z Gnostice PDFOne na IronPDF

Wyzwania związane z Gnostice PDFOne

Gnostice PDFOne i Document Studio .NET mają dobrze udokumentówane ograniczenia, które mają wpływ na aplikacje produkcyjne:

  1. Brak obsługi zewnętrznych arkuszy CSS: Dokumentacja Gnostice PDFOne wyraź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 PDFOne nie 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 programie Gnostice PDFOne podpisy 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ównanie Gnostice PDFOne i 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 wdrożenie .NET 10 i C# 14 w latach 2025 i 2026,IronPDFzapewnia przyszłościową podstawę w postaci ujednoliconej biblioteki, 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 Low
Ekstrakcja tekstu Low
Znaki wodne Low
Nagłówki/stopki Low
HTML do PDF Low
Szyfrowanie Medium
Pola formularza Medium
Podpisy cyfrowe Low

Korzyści, jakie zyskujesz

Po migracji z Gnostice PDFOne doIronPDFdostę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:IronPDFobsługuje .NET Framework 4.6.2+ oraz .NET Core 2.0+ / .NET 5/6/7/8/9+
  2. Klucz licencyjny: Uzyskaj klucz licencyjnyIronPDFna 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 PDFOne packages
dotnet remove package PDFOne.NET
dotnet remove package Gnostice.DocumentStudio.NET
dotnet remove package Gnostice.PDFOne.NET
dotnet remove package Gnostice.XtremeDocumentStudio.NET

# Install IronPDF
dotnet add package IronPdf
# Remove Gnostice PDFOne packages
dotnet remove package PDFOne.NET
dotnet remove package Gnostice.DocumentStudio.NET
dotnet remove package Gnostice.PDFOne.NET
dotnet remove package Gnostice.XtremeDocumentStudio.NET

# Install IronPDF
dotnet add package IronPdf
SHELL

Szybki start – migracja

Krok 1: Zaktualizuj konfigurację licencji

Przed (Gnostice PDFOne):

// Gnostice license often set via config or property
PDFOne.License.LicenseKey = "YOUR-GNOSTICE-LICENSE";
// Gnostice license often set via config or property
PDFOne.License.LicenseKey = "YOUR-GNOSTICE-LICENSE";
' Gnostice license often set via config or property
PDFOne.License.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 scalania

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 Gnostice.PDFOne.DLL
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 Gnostice.PDFOne.DLL
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 PDFOne nie pozwala na bezpośrednią konwersję HTML do PDF — należy ręcznie tworzyć elementy tekstowe i pozycjonować je za pomocą współrzędnych. ChromePdfRenderer firmyIronPDFzapewnia bezpośrednie renderowanie HTML z pełną obsługą 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 Gnostice.PDFOne.DLL
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 Gnostice.PDFOne.DLL
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ście Gnostice PDFOne wymaga 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 Merge wIronPDFobsługuje to w trzech wierszach przy odpowiednim zarządzaniu 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 Gnostice.PDFOne.DLL
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 Gnostice.PDFOne.DLL
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ście Gnostice PDFOne wymaga tworzenia obiektów PDFFont, ręcznego przechodzenia przez strony, obliczania współrzędnych (200, 400) oraz ustawiania właściwości obiektów PDFTextElement. TextStamper firmyIronPDFzapewnia konfigurację deklaratywną z automatycznym centrowaniem i zastosowaniem stron — bez konieczności obliczania 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 migracji Gnostice PDFOne jest 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 gdyIronPDFstosuje 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 z Gnostice PDFOne doIronPDFdostę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 PDFOne wykorzystuje obiekty PDFFont;IronPDFwykorzystuje 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 programie Gnostice PDFOne zgłoszono wycieki pamięci.

Rozwiązanie:IronPDFzapewnia 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 PDFOne w 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ń pakiety Gnostice PDFOne NuGet
  • Zainstaluj pakiet IronPdf NuGet: dotnet add package IronPdf
  • Zaktualizuj importy przestrzeni nazw
  • Zastąp konfigurację klucza licencyjnego
  • Zamień PDFDocument na PdfDocument
  • Zamień DocExporter na ChromePdfRenderer
  • Zastąp rysowanie oparte na współrzędnych stemplowaniem HTML
  • Zaktualizuj PDFFont do stylów CSS
  • Zamień 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

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