IRONSOFTWAREHOME
FILMY

Jak spłaszczyć obrazy w pliku PDF w języku C# za pomocą IronPDF

Curtis Chau
Curtis Chau
Updated: 19 lipca 2026

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

AspektGnostice PDFOneIronPDF
Zewnętrzny CSSNieobsługiwaneObsługiwane
Wykonanie kodu JavaScriptNieobsługiwanePełny silnik Chromium
Języki RTLNieobsługiwanePełna obsługa Unicode
Podpisy cyfroweOgraniczone/brakującePełna obsługa X509
PlatformaProdukty fragmentarycznePojedyncza, ujednolicona biblioteka
Stabilność pamięciZgłoszone problemyStabilny, dobrze zarządzany
HTML do PDFPodstawowe, wymaga obejśćRenderowanie na poziomie przeglądarki Chrome
Krzywa uczenia sięZłożony interfejs APIProste, intuicyjne API
Nowoczesny CSS (Flexbox, Grid)NieobsługiwanePełna obsługa CSS3
Obsługa obrazówZnane problemyNiezawodny

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

FunkcjaZłożoność migracji
Wczytywanie/zapisywanie plików PDFBardzo niski
Łączenie plików PDFBardzo niski
Podział plików PDFNiski
Ekstrakcja tekstuNiski
Znaki wodneNiski
Nagłówki/stopkiNiski
HTML do PDFNiski
SzyfrowanieMedium
Pola formularzaMedium
Podpisy cyfroweNiski

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" .
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
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";
C#

Po (IronPDF):

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

// Or in appsettings.json:
// { "IronPdf.License.LicenseKey": "YOUR-LICENSE-KEY" }

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;

Kompletna dokumentacija API

Mapowanie klas podstawowych

Gnostice PDFOneIronPDFOpis
PDFDocumentPdfDocumentGłówna klasa dokumentu PDF
PDFPagePdfDocument.Pages[i]Przedstawienie strony
PDFFontStylizacja CSSSpecyfikacja czcionki
PDFTextElementTreść HTMLTreść tekstowa
PDFImageElementTagi HTML <img>Treść obrazu
DocExporterChromePdfRendererKonwersja HTML/URL do formatu PDF

Operacje na dokumentach

Gnostice PDFOneIronPDF
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.Countpdf.PageCount
doc.Pages.Add()Renderuj HTML lub scal

Operacje scałania

Gnostice PDFOneIronPDF
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();
    }
}
C#

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");
    }
}

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();
    }
}
C#

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");
    }
}

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();
    }
}
C#

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");
    }
}

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;

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>";

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

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);

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>";

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");

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

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ęczników.

...
Czytaj więcej

Powiązane artykuły

Key in blue circle

Uzyskaj natychmiast swój darmowy 30-dniowy Klucz Testowy.

Your trial license will be sent to your email address

Brak ograniczeń. 100% dostępności. Bez karty kredytowej.

bullet_checkedNie wymaga karty kredytowej ani tworzenia kontaBrak ograniczeń. 100% dostępności. Bez karty kredytowej.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Zarezerwuj swoje darmowe Demo na żywo
Booking Badge

Zaufane przez miliony inżynierów na całym świecie

Logotypy klientów Iron Software
Otrzymaj swoje Konsultacja Bez Zobowiązań
Wypełnij poniższy formularz lub wyślij e-mail na sales@ironsoftware.com
Twoje dane zawsze będą utrzymywane w tajemnicy.
Zaufane przez miliony inżynierów na całym świecie
Logotypy klientów Iron Software
Otrzymaj swój darmowy Klucz Próbny na 30 dni natychmiast.
Nie wymaga karty kredytowej ani tworzenia konta