IRONSOFTWAREHOME
FILMY

Jak ustawić i edytować metadane pliku PDF w języku C#

Curtis Chau
Curtis Chau
Updated: 19 lipca 2026

Przejście zGdPicture.NET SDKna IronPDF oferuje programistom .NET ukierunkowane i usprawnione podejście do generowania plików PDF. Niniejszy przewodnik przedstawia kompleksową, krok po kroku ścieżkę migracji, która zastępuje złożone wzorce SDK do przetwarzania obrazów dokumentów nowoczesnymi interfejsami API przeznaczonymi specjalnie dla formatu PDF, zaprojektowanymi z myślą o współczesnym programowaniu w środowisku .NET.

Dlaczego warto przejść zGdPicture.NET SDKna IronPDF

Wyzwania związane z GdPicture.NET SDK

GdPicture.NET SDK (obecnie pod nową nazwą Nutrient) to kompleksowy zestaw SDK do przetwarzania obrazów dokumentów, który stawia kilka wyzwań przed programistami skupiającymi się na plikach PDF:

  1. **Zbyt rozbudowane rozwiązanie dla projektów opartych wyłącznie na plikach PDF:**GdPicture.NET SDKto kompletna Suite do przetwarzania obrazów dokumentów, obejmująca OCR, rozpoznawanie BarCode, skanowanie i przetwarzanie obrazów. Jeśli potrzebujesz tylko funkcji PDF, płacisz za funkcje, z których nigdy nie skorzystasz.

  2. Złożony system licencjonowania: wiele poziomów produktów (GdPicture.NET 14, GdPicture.API, Ultimate, Professional) z mylącymi kombinacjami numerów katalogowych (SKU) i wymogąmi dotyczącymi rocznej subskrypcji.

  3. Ceny dla przedsiębiorstw: Koszt licencji zaczyna się od 2999 USD za samą wtyczkę PDF, a w przypadku wersji Ultimate wynosi ponad 10 000 USD. Licencjonowanie na programistę powoduje znaczne obciążenie dla rozwijających się zespołów.

  4. Stroma krzywa uczenia się: API zostało zaprojektowane w oparciu o koncepcje obrazówania dokumentów, a nie nowoczesne wzorce .NET. Takie metody jak LicenseManager.RegisterKEY(), sprawdzanie enumeracji GdPictureStatus oraz strony indeksowane od 1 wydają się przestarzałe w porównaniu z nowoczesnymi konwencjami C#.

  5. Wzorzec Kodu Statusu: Każda operacja zwraca enumerację GdPictureStatus, którą należy sprawdzić — bez wyjątku rzucanego przy błędach, co powoduje, że obsługa błędów jest rozbudowana i powtarzalna.

  6. Ręczne Zarządzanie Zasobami: Wymaga jawnych wywołań Dispose() lub Release(). SDK nie stosuje się ściśle do standardowych wzorców usuwania w .NET Standard.

  7. Zakotwiczenie wersji: Przestrzeń nazw GdPicture14 zawiera numer wersji, co powoduje, że aktualizacje do głównych wersji wymagają zmiany przestrzeni nazw w całym kodzie.

  8. Zamieszanie związane ze zmianą marki: Niedawna zmiana marki na "Nutrient" powoduje fragmentację dokumentacji między gdpicture.com a nutrient.io, co komplikuje wsparcie techniczne i naukę.

PorównanieGdPicture.NET SDKi IronPDF

AspektGdPicture.NET SDKIronPDF
Skup się naSuite do przetwarzania obrazów dokumentów (zbyt rozbudowana jak na PDF)Biblioteka przeznaczona dla formatu PDF
Ceny2 999–10 000+ USD – poziom EnterpriseKonkurencyjny, skalowalny wraz z rozwojem firmy
Styl APIKody statusu, zarządzanie ręczneWyjątki, IDisposable, nowoczesny .NET
Krzywa uczenia sięSteep (koncepcje SDK do przetwarzania obrazów)Prosty (znajomość HTML/CSS)
Renderowanie HTMLPodstawowy, wewnętrzny silnikNajnowsza wersja Chromium z CSS3/JS
Indeksowanie stron1-indeksowane0-indeksowane (standard .NET Standard)
Bezpieczeństwo wątkówWymagana ręczna synchronizacjaZabezpieczone przed współbieżnością już w fazie projektowania
Przestrzeń nazwSpecyficzne dla wersji (GdPicture14)Stabilne (IronPdf)

IronPDF jest zgodne z nowoczesnymi wzorcami i konwencjami .NET, co sprawia, że jest proste do wprowadzenia dla zespołów pracujących na aktualnych wersjach .NET.


Ocena złożoności migracji

Szacowany nakład pracy według funkcji

FunkcjaZłożoność migracji
HTML do PDFNiski
URL do pliku PDFNiski
Łączenie plików PDFNiski
Podział plików PDFNiski
Znaki wodneNiski
Ekstrakcja tekstuNiski
Ochrona hasłemMedium
Pola formularzaMedium
Podpisy cyfroweŚrednio-wysoki
OCRWysoka
Rozpoznawanie kodów kreskowychNie dotyczy

Macierz decyzji dotyczących migracji

Twoja sytuacjaZalecenie
Operacje dostępne wyłącznie w formacie PDFMigracja — znaczne uproszczenie i oszczędność kosztów
Intensywne wykorzystanieOCRRozważ IronOCR jako produkt towarzyszący
BarCode/skanowanieZachowajGdPicture.NET SDKdla tych funkcji, użyj IronPDF dla plików PDF
Pełne obrazówanie dokumentówOceń, czy faktycznie korzystasz ze wszystkich funkcji

Zanim zaczniesz

Wymagania wstępne

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

Zidentyfikuj wszystkie przypadki użycia GdPicture.NET SDK

# Find allGdPicture.NET SDKreferences in your codebase
grep -r "GdPicture14\|GdPicturePDF\|GdPictureDocumentConverter\|GdPictureStatus\|LicenseManager\.RegisterKEY" --include="*.cs" .

# Find all GdPicture package references
grep -r "GdPicture" --include="*.csproj" .
SHELL

Zmiany w pakiecie NuGet

# RemoveGdPicture.NET SDKpackages
dotnet remove package GdPicture.NET.14
dotnet remove package GdPicture.NET.14.API
dotnet remove package GdPicture
dotnet remove package GdPicture.API

# Install IronPDF
dotnet add package IronPdf
SHELL

Szybki start – migracja

Krok 1: Zaktualizuj konfigurację licencji

Przed (GdPicture.NET SDK):

// Must be called before anyGdPicture.NET SDKoperations
LicenseManager.RegisterKEY("YOUR-GDPICTURE-LICENSE-KEY");

Po (IronPDF):

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

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

Krok 2: Zaktualizuj importy przestrzeni nazw

// Before (GdPicture.NET SDK)
using GdPicture14;

// After (IronPDF)
using IronPdf;
using IronPdf.Editing;

Krok 3: Podstawowy wzorzec konwersji

Najważniejszą zmianą w migracjiGdPicture.NET SDKjest wyeliminowanie rozbudowanego schematu sprawdzania stanu:

Przed (GdPicture.NET SDK):

using GdPicture14;

LicenseManager.RegisterKEY("YOUR-GDPICTURE-LICENSE-KEY");

using (GdPictureDocumentConverter converter = new GdPictureDocumentConverter())
{
    GdPictureStatus status = converter.LoadFromHTMLString("<h1>Hello World</h1>");

    if (status == GdPictureStatus.OK)
    {
        status = converter.SaveAsPDF("output.pdf");

        if (status != GdPictureStatus.OK)
        {
            Console.WriteLine($"Error: {status}");
        }
    }
    else
    {
        Console.WriteLine($"Load error: {status}");
    }
}

Po (IronPDF):

using IronPdf;

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
pdf.SaveAs("output.pdf");

Kluczowe różnice:

  • Brak sprawdzania stanu — wyjątki w przypadku błędów
  • Nie jest wymagane jawne usuwanie renderera
  • Nowoczesny, płynny interfejs API
  • Renderowanie oparte na silniku Chromium zapewniające lepszą obsługę HTML/CSS

Kompletna dokumentacija API

Mapowanie przestrzeni nazw

GdPicture.NET SDKIronPDF
GdPicture14IronPdf
GdPicture14.PDFIronPdf
GdPicture14.ImagingNie dotyczy (nie dotyczy)

Mapowanie klas podstawowych

GdPicture.NET SDKIronPDFOpis
GdPicturePDFPdfDocumentGłówna klasa dokumentu PDF
GdPictureDocumentConverterChromePdfRendererKonwersja HTML/URL do formatu PDF
LicenseManagerIronPdf.LicenseZarządzanie licencjami
GdPictureStatusWyjątkiObsługa błędów

Metody ładowania dokumentów

GdPicture.NET SDKIronPDF
pdf.LoadFromFile(path, loadInMemory)PdfDocument.FromFile(path)
pdf.LoadFromFile(path, password, loadInMemory)PdfDocument.FromFile(path, password)
converter.LoadFromHTMLString(html)renderer.RenderHtmlAsPdf(html)
converter.LoadFromURL(url)renderer.RenderUrlAsPdf(url)

Operacje na stronach

GdPicture.NET SDKIronPDF
pdf.GetPageCount()pdf.PageCount
pdf.SelectPage(pageNo)pdf.Pages[index]
pdf.GetPageWidth()pdf.Pages[i].Width
pdf.GetPageHeight()pdf.Pages[i].Height

Operacje scałania i dzielenia

GdPicture.NET SDKIronPDF
pdf1.MergePages(pdf2)PdfDocument.Merge(pdf1, pdf2)
pdf.ExtractPages(start, end)pdf.CopyPages(indices)

Operacje związane z znakami wodnymi

GdPicture.NET SDKIronPDF
pdf.DrawText(...) looppdf.ApplyWatermark(html)
pdf.SetTextColor(color)Stylizacja CSS
pdf.SetTextSize(size)Stylizacja CSS

Przykłady migracji kodu

Przykład 1: Konwersja HTML do PDF

Przed (GdPicture.NET SDK):

// NuGet: Install-Package GdPicture.NET
using GdPicture14;
using System;

class Program
{
    static void Main()
    {
        using (GdPictureDocumentConverter converter = new GdPictureDocumentConverter())
        {
            string htmlContent = "<html><body><h1>Hello World</h1></body></html>";
            GdPictureStatus status = converter.LoadFromHTMLString(htmlContent);
            
            if (status == GdPictureStatus.OK)
            {
                converter.SaveAsPDF("output.pdf");
            }
        }
    }
}

Po (IronPDF):

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        string htmlContent = "<html><body><h1>Hello World</h1></body></html>";
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("output.pdf");
    }
}

W ChromePdfRendererIronPDF używana jest nowoczesna przeglądarka Chromium do dokładnego renderowania HTML/CSS, eliminując potrzebę sprawdzania kodu statusu. Aby uzyskać więcej informacji na temat opcji renderowania HTML, zapoznaj się z dokumentacją dotyczącą konwersji HTML do PDF.

Przykład 2: Scałanie wielu plików PDF

Przed (GdPicture.NET SDK):

// NuGet: Install-Package GdPicture.NET
using GdPicture14;
using System;

class Program
{
    static void Main()
    {
        using (GdPicturePDF pdf1 = new GdPicturePDF())
        using (GdPicturePDF pdf2 = new GdPicturePDF())
        {
            pdf1.LoadFromFile("document1.pdf", false);
            pdf2.LoadFromFile("document2.pdf", false);
            
            pdf1.MergePages(pdf2);
            pdf1.SaveToFile("merged.pdf");
        }
    }
}

Po (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
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(new List<PdfDocument> { pdf1, pdf2 });
        merged.SaveAs("merged.pdf");
    }
}

Statyczna metoda MergeIronPDF akceptuje listę dokumentów, co ułatwia łączenie wielu PDF w jednej operacji. Dowiedz się więcej o łączeniu i dzieleniu plików PDF.

Przykład 3: Dodaj znak wodny do wszystkich stron

Przed (GdPicture.NET SDK):

// NuGet: Install-Package GdPicture.NET
using GdPicture14;
using System;
using System.Drawing;

class Program
{
    static void Main()
    {
        using (GdPicturePDF pdf = new GdPicturePDF())
        {
            pdf.LoadFromFile("input.pdf", false);
            
            for (int i = 1; i <= pdf.GetPageCount(); i++)
            {
                pdf.SelectPage(i);
                pdf.SetTextColor(Color.Red);
                pdf.SetTextSize(48);
                pdf.DrawText("CONFIDENTIAL", 200, 400);
            }
            
            pdf.SaveToFile("watermarked.pdf");
        }
    }
}

Po (IronPDF):

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

class Program
{
    static void Main()
    {
        var pdf = PdfDocument.FromFile("input.pdf");
        
        pdf.ApplyWatermark("<h1 style='color:red;'>CONFIDENTIAL</h1>", 50, VerticalAlignment.Middle, HorizontalAlignment.Center);
        
        pdf.SaveAs("watermarked.pdf");
    }
}

MigracjaGdPicture.NET SDKz rysowania tekstu opartego na współrzędnych do znakowania wodnego opartego na HTML znacznie upraszcza kod. Metoda ApplyWatermarkIronPDF używa stylizacji HTML/CSS, eliminując potrzebę ręcznego iterowania po stronach i obliczania współrzędnych. Aby zapoznać się z dodatkowymi opcjami, zapoznaj się z pełną dokumentacją dotyczącą znaków wodnych.

Przykład 4: Ochrona hasłem i bezpieczeństwo

Przed (GdPicture.NET SDK):

using GdPicture14;

class Program
{
    static void Main()
    {
        LicenseManager.RegisterKEY("YOUR-GDPICTURE-LICENSE-KEY");

        using (GdPicturePDF pdf = new GdPicturePDF())
        {
            GdPictureStatus status = pdf.LoadFromFile("document.pdf", false);

            if (status != GdPictureStatus.OK) return;

            // Save with encryption - many boolean parameters
            status = pdf.SaveToFile(
                "protected.pdf",
                PdfEncryption.PdfEncryption256BitAES,
                "user123",      // User password
                "owner456",     // Owner password
                true,           // Can print
                false,          // Cannot copy
                false,          // Cannot modify
                false,          // Cannot add notes
                true,           // Can fill forms
                false,          // Cannot extract
                false,          // Cannot assemble
                true            // Can print high quality
            );
        }
    }
}

Po (IronPDF):

using IronPdf;

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

        // Configure security settings with clear property names
        pdf.SecuritySettings.OwnerPassword = "owner456";
        pdf.SecuritySettings.UserPassword = "user123";

        // Set permissions
        pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
        pdf.SecuritySettings.AllowUserCopyPasteContent = false;
        pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit;
        pdf.SecuritySettings.AllowUserAnnotations = false;
        pdf.SecuritySettings.AllowUserFormData = true;

        pdf.SaveAs("protected.pdf");
    }
}

Właściwość SecuritySettingsIronPDF zapewnia nazwane, samodokumentujące się właściwości zamiast pozycjonalnych parametrów logicznych.


Ważne uwagi dotyczące migracji

Konwersja indeksowania stron

Jedną z najważniejszych zmian w migracjiGdPicture.NET SDKjest różnica w indeksowaniu stron:

// GdPicture.NET SDK: 1-indeksowane pages
for (int i = 1; i <= pdf.GetPageCount(); i++)
{
    pdf.SelectPage(i);
    // process page
}

// IronPDF: 0-indexed pages (standard .NET)
for (int i = 0; i < pdf.PageCount; i++)
{
    var page = pdf.Pages[i];
    // process page
}

Kody statusu a wyjątki

Zastąp rozbudowane sprawdzanie statusu standardowym try-catch:

// GdPicture.NET SDK
GdPictureStatus status = converter.LoadFromHTMLString(html);
if (status != GdPictureStatus.OK)
{
    Console.WriteLine($"Error: {status}");
    return;
}

// IronPDF
try
{
    var pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs("output.pdf");
}
catch (Exception ex)
{
    Console.WriteLine($"Error: {ex.Message}");
}

Przeliczanie jednostek

GdPicture.NET SDK używa cali jako jednostki miary dla marginesów;IronPDF używa milimetrów:

// GdPicture.NET SDK: 0.5 inches margin
converter.HtmlSetMargins(0.5f, 0.5f, 0.5f, 0.5f);

// IronPDF: 0.5 inches = 12.7 mm
renderer.RenderingOptions.MarginTop = 12.7;
renderer.RenderingOptions.MarginBottom = 12.7;
renderer.RenderingOptions.MarginLeft = 12.7;
renderer.RenderingOptions.MarginRight = 12.7;

Formuła konwersji: millimeters = inches × 25.4

Bezpieczeństwo wątków

GdPicture.NET SDK wymaga ręcznej synchronizacji w przypadku operacji wykonywanych jednocześnie. W ChromePdfRendererIronPDF jest z założenia bezpieczny dla wątków, co upraszcza wielowątkowe generowanie PDF.


Kwestie związane z wydajnością

Ponowne użycie ChromePdfRenderer

Aby uzyskać optymalną wydajność, należy ponownie wykorzystać instancję renderera:

// GOOD - Reuse renderer (thread-safe)
public class PdfService
{
    private static readonly ChromePdfRenderer _renderer = new ChromePdfRenderer();

    public byte[] Generate(string html) => _renderer.RenderHtmlAsPdf(html).BinaryData;
}

// BAD - Creates new instance each time
public byte[] GenerateBad(string html)
{
    var renderer = new ChromePdfRenderer();  // Wasteful
    return renderer.RenderHtmlAsPdf(html).BinaryData;
}

Właściwa utylizacja zasobów

// Use using statements for automatic cleanup
using (var pdf = PdfDocument.FromFile("large.pdf"))
{
    string text = pdf.ExtractAllText();
}  // pdf is disposed automatically

Lista kontrolna migracji

Przed migracją

  • Sporządź spis wszystkich miejsc użyciaGdPicture.NET SDKw kodzie źródłowym
  • Określ, które funkcje są faktycznie używane (PDF vsOCRvs BarCode)
  • Sprawdź, czy potrzebne są funkcje OCR/kodów kreskowych (rozważ IronOCR/IronBarcode)
  • Przejrzyj aktualne warunki licencji i porównaj je z cennikiem IronPDF
  • Uzyskaj klucz licencyjny IronPDF
  • Utwórz gałąź migracji w systemie kontroli wersji

Migracja kodu

  • Usuń pakiety NuGet GdPicture.NET SDK: dotnet remove package GdPicture.NET
  • Zainstaluj pakiet NuGet IronPDF: dotnet add package IronPdf
  • Zaktualizuj importy namespace (GdPicture14IronPdf)
  • Zamień LicenseManager.RegisterKEY() na IronPdf.License.LicenseKey
  • Przekształć sprawdzanie kodów statusu w bloki try-catch
  • Aktualizacja indeksowania stron (indeksowanie 1 → indeksowanie 0)
  • Zamień GdPicturePDF na PdfDocument
  • Zamień GdPictureDocumentConverter na ChromePdfRenderer
  • Konwersja tekstu opartego na współrzędnych na znaczniki HTML
  • Zaktualizuj przeliczniki jednostek (całe → milimetry)

Testowanie

  • Przeprowadź testy jednostkowe wszystkich ścieżek generowania plików PDF
  • Sprawdź, czy jakość renderowania HTML jest co najmniej taka sama jak
  • Przetestuj wszystkie scenariusze związane z bezpieczeństwem/szyfrowaniem
  • Sprawdź działanie funkcji wypełniania formularzy
  • Testowanie operacji scałania/dzielenia
  • Sprawdź wygląd znaku wodnego
  • Ścieżki krytyczne testów wydajności

Po migracji

  • Usuń pliki licencyjne/klucze GdPicture.NET SDK
  • Aktualizacja dokumentacji
  • Przeprowadź szkolenie zespołu w zakresie wzorców API IronPDF
  • Monitoruj produkcję pod kątem wszelkich problemów

Zwróć uwagę: GdPicture.NET i Nutrient są zarejestrowanymi znakami towarowymi swoich właścicieli. Ta strona nie jest powiązana, akceptowana ani sponsorowana przez Nutrient, ORPALIS lub PSPDFKit. 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