Zum Fußzeileninhalt springen
MIGRATIONSLEITFäDEN

Migrieren von Foxit PDF SDK zu IronPDF: (.NET-Anleitung)

Die Migration vom Foxit PDF SDKzuIronPDFvereinfacht Ihren .NET-Workflow zur PDF-Generierung, indem komplexe, unternehmensorientierte APIs durch moderne, entwicklerfreundliche Muster ersetzt werden. Dieser Leitfaden bietet einen vollständigen, schrittweisen Migrationspfad, der unnötigen Code entfernt und PDF-Operationen in Ihrer gesamten Codebasis vereinfacht.

Warum von Foxit PDF SDKzuIronPDFmigrieren

Die Foxit PDF-Herausforderungen

Das Foxit PDF SDKist eine leistungsstarke Bibliothek für Unternehmen, bringt aber eine erhebliche Komplexität mit sich, die die Entwicklung verlangsamen kann:

  1. Komplexes Lizenzsystem: Mehrere Produkte, SKUs und Lizenztypen (pro Entwickler, pro Server, OEM usw.) erschweren die Auswahl der richtigen Option für Ihr Projekt.

  2. Enterprise-Preisgestaltung: Die Preisgestaltung ist auf große Organisationen zugeschnitten und kann für kleinere Teams oder einzelne Entwickler unerschwinglich sein.

  3. Manuelle Installation: Für das Foxit PDF SDKsind manuelle DLL-Referenzen oder private NuGet-Feeds erforderlich – es gibt kein einfaches öffentliches NuGet-Paket.

  4. Verbose API: Die Initialisierung der Bibliothek mit Library.Initialize() , die Überprüfung von Fehlercodes und explizite Aufrufe Library.Release() fügen jeder Operation erheblichen Boilerplate-Code hinzu.

  5. Separates HTML-Konvertierungs-Add-on: Für die Konvertierung von HTML in PDF ist ein zusätzlicher Kauf eines Add-ons erforderlich – es ist nicht im Basis-SDK enthalten.

  6. Komplexe Konfiguration: Einstellungen erfordern eine detaillierte Objektkonfiguration (z. B. HTML2PDFSettingData ) mit mehreren Eigenschaften.

  7. C++-Erbe: API-Muster spiegeln die C++-Ursprünge wider und fühlen sich in modernen C#-Anwendungen weniger natürlich an.

Vergleich zwischen Foxit PDF und IronPDF

Aspekt Foxit PDF SDK IronPDF
Installation Manuelle DLLs/private Feeds Einfaches NuGet-Paket
Lizenzierung Komplexe, auf Unternehmen ausgerichtete Transparent, für alle Größen geeignet
Initialisierung Library.Initialize(sn, key) Lizenzschlüssel einmalig festlegen
Fehlerbehandlung ErrorCode Aufzählungen Standard .NET Ausnahmen
HTML zu PDF Separater Kauf eines Add-ons Eingebaute Chromium-Engine
API-Stil C++-Erbe, wortreich Moderne .NET-Muster
Bereinigung von Ressourcen Handbuch Close()/Release() IDisposable/automatisch
Dokumentation Portal für Unternehmensdokumente Öffentliche Tutorials

Kosten-Nutzen-Analyse

Der Wechsel von Foxit PDF zuIronPDFbietet konkrete Vorteile für Entwickler: geringere Komplexität durch einfachere APIs, schnellere Entwicklung mit intuitiven Methoden, moderne .NET-Kompatibilität einschließlich async/await und LINQ-Unterstützung, ein HTML-First-Ansatz, der vorhandene Webkenntnisse nutzt, und umfassende Funktionen ohne separate Add-on-Käufe.IronPDFbietet bei der Planung der Einführung von .NET 10 und C# 14 bis 2025 und 2026 eine zukunftssichere Grundlage für die PDF-Erstellung.


Bevor Sie beginnen

Voraussetzungen

  1. .NET-Umgebung:IronPDFunterstützt .NET Framework 4.6.2+, .NET Core 3.1+, .NET 5/6/7/8/9+
  2. NuGet-Zugriff: Stellen Sie sicher, dass Sie Pakete von NuGet installieren können.
  3. Lizenzschlüssel: Ihren IronPDF-Lizenzschlüssel für die produktive Nutzung erhalten Sie unter ironpdf.com.

Sichern Sie Ihr Projekt

# Create a backup branch
git checkout -b pre-ironpdf-migration
git add .
git commit -m "Backup before Foxit PDF SDKtoIronPDFmigration"
# Create a backup branch
git checkout -b pre-ironpdf-migration
git add .
git commit -m "Backup before Foxit PDF SDKtoIronPDFmigration"
SHELL

Alle Foxit PDF-Verwendung identifizieren

# Find all Foxit PDF SDKreferences
grep -r "foxit\|PDFDoc\|PDFPage\|Library.Initialize\|Library.Release" --include="*.cs" --include="*.csproj" .

# Find Foxit DLL references
find . -name "*.csproj" | xargs grep -l "Foxit\|fsdk"
# Find all Foxit PDF SDKreferences
grep -r "foxit\|PDFDoc\|PDFPage\|Library.Initialize\|Library.Release" --include="*.cs" --include="*.csproj" .

# Find Foxit DLL references
find . -name "*.csproj" | xargs grep -l "Foxit\|fsdk"
SHELL

Dokumentieren Sie die aktuelle Funktionalität

Vor der Migration, Katalog:

  • Welche Funktionen von Foxit PDF Sie nutzen (HTML-Konvertierung, Anmerkungen, Formulare, Sicherheit)
  • Standorte der Lizenzschlüssel und Initialisierungscode
  • Benutzerdefinierte Konfigurationen und Einstellungen
  • Fehlerbehandlungsmuster mit ErrorCode-Enums

Schnellstart Migration

Schritt 1: NuGet-Pakete aktualisieren

# Foxit PDF SDKtypically requires manual removal of DLL references
# Check your .csproj for Foxit references and remove them

# Install IronPDF
dotnet add package IronPdf
# Foxit PDF SDKtypically requires manual removal of DLL references
# Check your .csproj for Foxit references and remove them

# Install IronPDF
dotnet add package IronPdf
SHELL

Wenn Sie Foxit PDF-Referenzen in .csproj haben, entfernen Sie diese manuell:


<Reference Include="fsdk_dotnet">
    <HintPath>..\libs\Foxit\fsdk_dotnet.dll</HintPath>
</Reference>

<Reference Include="fsdk_dotnet">
    <HintPath>..\libs\Foxit\fsdk_dotnet.dll</HintPath>
</Reference>
XML

Schritt 2: Namespaces aktualisieren

// Before (Foxit PDF)
using foxit;
using foxit.common;
using foxit.common.fxcrt;
using foxit.pdf;
using foxit.pdf.annots;
using foxit.addon.conversion;

// After (IronPDF)
using IronPdf;
using IronPdf.Rendering;
using IronPdf.Editing;
// Before (Foxit PDF)
using foxit;
using foxit.common;
using foxit.common.fxcrt;
using foxit.pdf;
using foxit.pdf.annots;
using foxit.addon.conversion;

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

Schritt 3:IronPDFinitialisieren

Eine der wichtigsten Verbesserungen bei dieser Foxit-PDF-Migration ist die Abschaffung des komplexen Initialisierungs- und Bereinigungsmusters:

// Before (Foxit PDF)
string sn = "YOUR_SERIAL_NUMBER";
string key = "YOUR_LICENSE_KEY";
ErrorCode error_code = Library.Initialize(sn, key);
if (error_code != ErrorCode.e_ErrSuccess)
{
    throw new Exception("Failed to initialize Foxit PDF SDK");
}
// ... your code ...
Library.Release();  // Don't forget this!

// After (IronPDF)
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";
// That's it! No Release() needed
// Before (Foxit PDF)
string sn = "YOUR_SERIAL_NUMBER";
string key = "YOUR_LICENSE_KEY";
ErrorCode error_code = Library.Initialize(sn, key);
if (error_code != ErrorCode.e_ErrSuccess)
{
    throw new Exception("Failed to initialize Foxit PDF SDK");
}
// ... your code ...
Library.Release();  // Don't forget this!

// After (IronPDF)
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";
// That's it! No Release() needed
$vbLabelText   $csharpLabel

Schritt 4: Grundlegendes Konvertierungsmuster

// Before (Foxit PDF)
Library.Initialize(sn, key);
HTML2PDFSettingData settings = new HTML2PDFSettingData();
settings.page_width = 612.0f;
settings.page_height = 792.0f;
using (HTML2PDF html2pdf = new HTML2PDF(settings))
{
    html2pdf.Convert(htmlContent, "output.pdf");
}
Library.Release();

// After (IronPDF)
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("output.pdf");
// Before (Foxit PDF)
Library.Initialize(sn, key);
HTML2PDFSettingData settings = new HTML2PDFSettingData();
settings.page_width = 612.0f;
settings.page_height = 792.0f;
using (HTML2PDF html2pdf = new HTML2PDF(settings))
{
    html2pdf.Convert(htmlContent, "output.pdf");
}
Library.Release();

// After (IronPDF)
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("output.pdf");
$vbLabelText   $csharpLabel

Komplette API-Referenz

Namensraum-Zuordnung

Foxit PDF-Namensraum IronPDF-Äquivalent Notizen
foxit IronPdf Haupt-Namensraum
foxit.common IronPdf Gängige Typen
foxit.common.fxcrt Nicht anwendbar Low-Level (nicht erforderlich)
foxit.pdf IronPdf Arbeitsweise des PDF-Dokuments
foxit.pdf.annots IronPdf.Editing Anmerkungen
foxit.addon.conversion IronPdf.Rendering HTML/Bild-Konvertierung

Kernklassen-Zuordnung

Foxit PDF SDK-Klasse IronPDF-Äquivalent Notizen
Bibliothek Nicht anwendbar IronPDFverwaltet automatisch
PDFDoc PdfDocument Klasse des Hauptdokuments
PDFSeite PdfDocument.Pages[i] Zugriff auf die Seite
HTML2PDF ChromePdfRenderer HTML-Konvertierung
TextSeite pdf.ExtractTextFromPage(i) Textextraktion
Wasserzeichen TextStamper / ImageStamper Wasserzeichen
Sicherheit Sicherheitseinstellungen PDF-Sicherheit
Formular pdf.Form Formularfelder
Metadaten pdf.MetaData Metadaten des Dokuments

PDFDoc-Methoden

Foxit PDFDoc IronPDFPdfDocument Notizen
neues PDFDoc(Pfad) PdfDocument.FromFile(path) Aus Datei laden
doc.LoadW(Passwort) PdfDocument.FromFile(Pfad, Passwort) Passwortgeschützt
doc.GetPageCount() pdf.PageCount Eigenschaft Seitenzahl
doc.GetPage(index) pdf.Seiten[index] Seite per Index aufrufen
doc.SaveAs(path, flags) pdf.SaveAs(Pfad) Dokument speichern
doc.Close() pdf.Dispose() oder using-Anweisung Bereinigung
doc.InsertDocument() PdfDocument.Merge() Dokumente zusammenführen

HTML2PDF / Konvertierung

Foxit HTML2PDF IronPDF-Äquivalent Notizen
new HTML2PDFSettingData() new ChromePdfRenderer() Renderer erstellen
Einstellungen.Seite_Breite RenderingOptions.PaperSize Standardgrößen
Einstellungen.Seitenhöhe RenderingOptions.SetCustomPaperSize() Benutzerdefinierte Größe
html2pdf.Convert(html, path) renderer.RenderHtmlAsPdf(html) HTML-Zeichenkette
html2pdf.ConvertFromURL(url, path) renderer.RenderUrlAsPdf(url) URL-Konvertierung

Wasserzeichen-Einstellungen

Foxit Wasserzeichen IronPDF-Äquivalent Notizen
new Watermark(doc, text, font, size, color) new TextStamper() Text-Wasserzeichen
WasserzeichenEinstellungen.Position VertikalesAlignment + HorizontalesAlignment Stelle
WasserzeichenEinstellungen.Rotation Rotation Rotationswinkel
WasserzeichenEinstellungen.Deckkraft Durchsetzungsvermögen 0-100 Prozent
watermark.InsertToAllPages() pdf.ApplyStamp(Stamper) Bewerben Sie sich für alle

Beispiele für Code

Beispiel 1: Konvertierung von HTML in PDF

Vor (Foxit PDF SDK):

// NuGet: Install-Package Foxit.SDK
using Foxit.SDK;
using Foxit.SDK.Common;
using Foxit.SDK.PDFConversion;
using System;

class Program
{
    static void Main()
    {
        Library.Initialize("sn", "key");

        HTML2PDFSettingData settingData = new HTML2PDFSettingData();
        settingData.page_width = 612.0f;
        settingData.page_height = 792.0f;
        settingData.page_mode = HTML2PDFPageMode.e_HTML2PDFPageModeSinglePage;

        using (HTML2PDF html2pdf = new HTML2PDF(settingData))
        {
            html2pdf.Convert("<html><body><h1>Hello World</h1></body></html>", "output.pdf");
        }

        Library.Release();
    }
}
// NuGet: Install-Package Foxit.SDK
using Foxit.SDK;
using Foxit.SDK.Common;
using Foxit.SDK.PDFConversion;
using System;

class Program
{
    static void Main()
    {
        Library.Initialize("sn", "key");

        HTML2PDFSettingData settingData = new HTML2PDFSettingData();
        settingData.page_width = 612.0f;
        settingData.page_height = 792.0f;
        settingData.page_mode = HTML2PDFPageMode.e_HTML2PDFPageModeSinglePage;

        using (HTML2PDF html2pdf = new HTML2PDF(settingData))
        {
            html2pdf.Convert("<html><body><h1>Hello World</h1></body></html>", "output.pdf");
        }

        Library.Release();
    }
}
$vbLabelText   $csharpLabel

Nach (IronPDF):

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1></body></html>");
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

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

Der IronPDF-Ansatz reduziert 15+ Zeilen Konfigurationscode auf nur 4 Zeilen. Keine Bibliotheksinitialisierung, keine expliziten Bereinigungen, keine komplexen Einstellungsobjekte. Weitere HTML-Rendering-Optionen finden Sie in der HTML to PDF-Dokumentation.

Beispiel 2: Konvertierung von URL in PDF

Vor (Foxit PDF SDK):

// NuGet: Install-Package Foxit.SDK
using Foxit.SDK;
using Foxit.SDK.Common;
using Foxit.SDK.PDFConversion;
using System;

class Program
{
    static void Main()
    {
        Library.Initialize("sn", "key");

        HTML2PDFSettingData settingData = new HTML2PDFSettingData();
        settingData.page_width = 612.0f;
        settingData.page_height = 792.0f;
        settingData.page_mode = HTML2PDFPageMode.e_HTML2PDFPageModeSinglePage;

        using (HTML2PDF html2pdf = new HTML2PDF(settingData))
        {
            html2pdf.ConvertFromURL("https://www.example.com", "output.pdf");
        }

        Library.Release();
    }
}
// NuGet: Install-Package Foxit.SDK
using Foxit.SDK;
using Foxit.SDK.Common;
using Foxit.SDK.PDFConversion;
using System;

class Program
{
    static void Main()
    {
        Library.Initialize("sn", "key");

        HTML2PDFSettingData settingData = new HTML2PDFSettingData();
        settingData.page_width = 612.0f;
        settingData.page_height = 792.0f;
        settingData.page_mode = HTML2PDFPageMode.e_HTML2PDFPageModeSinglePage;

        using (HTML2PDF html2pdf = new HTML2PDF(settingData))
        {
            html2pdf.ConvertFromURL("https://www.example.com", "output.pdf");
        }

        Library.Release();
    }
}
$vbLabelText   $csharpLabel

Nach (IronPDF):

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
        pdf.SaveAs("output.pdf");
    }
}
$vbLabelText   $csharpLabel

Die inIronPDFintegrierte Chromium-Engine kümmert sich automatisch um die Ausführung von JavaScript, CSS-Rendering und dynamische Inhalte. Erfahren Sie mehr über die URL in PDF Konvertierung.

Beispiel 3: Hinzufügen von Wasserzeichen

Vor (Foxit PDF SDK):

// NuGet: Install-Package Foxit.SDK
using Foxit.SDK;
using Foxit.SDK.Common;
using Foxit.SDK.PDFDoc;
using System;

class Program
{
    static void Main()
    {
        Library.Initialize("sn", "key");

        using (PDFDoc doc = new PDFDoc("input.pdf"))
        {
            doc.Load("");

            Watermark watermark = new Watermark(doc, "Confidential", 
                new Font(Font.StandardID.e_StdIDHelvetica), 48.0f, 0xFF0000FF);

            WatermarkSettings settings = new WatermarkSettings();
            settings.flags = Watermark.e_WatermarkFlagASPageContents;
            settings.position = Watermark.Position.e_PosCenter;
            settings.rotation = -45.0f;
            settings.opacity = 0.5f;

            watermark.SetSettings(settings);
            watermark.InsertToAllPages();

            doc.SaveAs("output.pdf", PDFDoc.SaveFlags.e_SaveFlagNoOriginal);
        }

        Library.Release();
    }
}
// NuGet: Install-Package Foxit.SDK
using Foxit.SDK;
using Foxit.SDK.Common;
using Foxit.SDK.PDFDoc;
using System;

class Program
{
    static void Main()
    {
        Library.Initialize("sn", "key");

        using (PDFDoc doc = new PDFDoc("input.pdf"))
        {
            doc.Load("");

            Watermark watermark = new Watermark(doc, "Confidential", 
                new Font(Font.StandardID.e_StdIDHelvetica), 48.0f, 0xFF0000FF);

            WatermarkSettings settings = new WatermarkSettings();
            settings.flags = Watermark.e_WatermarkFlagASPageContents;
            settings.position = Watermark.Position.e_PosCenter;
            settings.rotation = -45.0f;
            settings.opacity = 0.5f;

            watermark.SetSettings(settings);
            watermark.InsertToAllPages();

            doc.SaveAs("output.pdf", PDFDoc.SaveFlags.e_SaveFlagNoOriginal);
        }

        Library.Release();
    }
}
$vbLabelText   $csharpLabel

Nach (IronPDF):

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

class Program
{
    static void Main()
    {
        var pdf = PdfDocument.FromFile("input.pdf");
        pdf.ApplyWatermark(new TextStamper()
        {
            Text = "Confidential",
            FontSize = 48,
            Opacity = 50,
            Rotation = -45,
            VerticalAlignment = VerticalAlignment.Middle,
            HorizontalAlignment = HorizontalAlignment.Center
        });
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;
using System;

class Program
{
    static void Main()
    {
        var pdf = PdfDocument.FromFile("input.pdf");
        pdf.ApplyWatermark(new TextStamper()
        {
            Text = "Confidential",
            FontSize = 48,
            Opacity = 50,
            Rotation = -45,
            VerticalAlignment = VerticalAlignment.Middle,
            HorizontalAlignment = HorizontalAlignment.Center
        });
        pdf.SaveAs("output.pdf");
    }
}
$vbLabelText   $csharpLabel

IronPDFs TextStamper bietet eine intuitive, eigenschaftsbasierte Konfiguration anstelle von separaten Einstellungsobjekten und manueller Seiteniteration. Weitere Optionen finden Sie in der vollständigen Wasserzeichen-Dokumentation.

Beispiel 4: URL zu PDF mit Kopf- und Fußzeilen

Vor (Foxit PDF SDK):

using foxit;
using foxit.addon.conversion;

class Program
{
    static void Main()
    {
        Library.Initialize("sn", "key");

        try
        {
            HTML2PDFSettingData settings = new HTML2PDFSettingData();
            settings.page_width = 595.0f;  // A4
            settings.page_height = 842.0f;
            settings.page_margin_top = 100.0f;
            settings.page_margin_bottom = 100.0f;

            // Foxit PDF SDKhas limited header/footer support
            // Often requires post-processing or additional code

            using (HTML2PDF html2pdf = new HTML2PDF(settings))
            {
                html2pdf.ConvertFromURL("https://www.example.com", "webpage.pdf");
            }
        }
        finally
        {
            Library.Release();
        }
    }
}
using foxit;
using foxit.addon.conversion;

class Program
{
    static void Main()
    {
        Library.Initialize("sn", "key");

        try
        {
            HTML2PDFSettingData settings = new HTML2PDFSettingData();
            settings.page_width = 595.0f;  // A4
            settings.page_height = 842.0f;
            settings.page_margin_top = 100.0f;
            settings.page_margin_bottom = 100.0f;

            // Foxit PDF SDKhas limited header/footer support
            // Often requires post-processing or additional code

            using (HTML2PDF html2pdf = new HTML2PDF(settings))
            {
                html2pdf.ConvertFromURL("https://www.example.com", "webpage.pdf");
            }
        }
        finally
        {
            Library.Release();
        }
    }
}
$vbLabelText   $csharpLabel

Nach (IronPDF):

using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.PrintHtmlBackgrounds = true;
        renderer.RenderingOptions.WaitFor.RenderDelay(3000);  // Wait for JS

        // Built-in header/footer support
        renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
        {
            HtmlFragment = "<div style='text-align:center; font-size:12pt;'>Company Report</div>",
            DrawDividerLine = true
        };

        renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter()
        {
            HtmlFragment = "<div style='text-align:right; font-size:10pt;'>Page {page} of {total-pages}</div>",
            DrawDividerLine = true
        };

        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
        pdf.SaveAs("webpage.pdf");
    }
}
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.PrintHtmlBackgrounds = true;
        renderer.RenderingOptions.WaitFor.RenderDelay(3000);  // Wait for JS

        // Built-in header/footer support
        renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
        {
            HtmlFragment = "<div style='text-align:center; font-size:12pt;'>Company Report</div>",
            DrawDividerLine = true
        };

        renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter()
        {
            HtmlFragment = "<div style='text-align:right; font-size:10pt;'>Page {page} of {total-pages}</div>",
            DrawDividerLine = true
        };

        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
        pdf.SaveAs("webpage.pdf");
    }
}
$vbLabelText   $csharpLabel

IronPDF bietet native Kopf- und Fußzeilen-Unterstützung mit HTML-Styling und dynamischen Seitenzahl-Platzhaltern.

Beispiel 5: PDF-Sicherheit und Verschlüsselung

Vor (Foxit PDF SDK):

using foxit;
using foxit.pdf;

class Program
{
    static void Main()
    {
        Library.Initialize("sn", "key");

        try
        {
            using (PDFDoc doc = new PDFDoc("input.pdf"))
            {
                doc.LoadW("");

                StdSecurityHandler securityHandler = new StdSecurityHandler();
                securityHandler.Initialize(
                    StdSecurityHandler.EncryptAlgorithm.e_CipherAES,
                    "user_password",
                    "owner_password",
                    PDFDoc.Permission.e_PermPrint | PDFDoc.Permission.e_PermModify,
                    128);

                doc.SetSecurityHandler(securityHandler);
                doc.SaveAs("encrypted.pdf", (int)PDFDoc.SaveFlags.e_SaveFlagNoOriginal);
            }
        }
        finally
        {
            Library.Release();
        }
    }
}
using foxit;
using foxit.pdf;

class Program
{
    static void Main()
    {
        Library.Initialize("sn", "key");

        try
        {
            using (PDFDoc doc = new PDFDoc("input.pdf"))
            {
                doc.LoadW("");

                StdSecurityHandler securityHandler = new StdSecurityHandler();
                securityHandler.Initialize(
                    StdSecurityHandler.EncryptAlgorithm.e_CipherAES,
                    "user_password",
                    "owner_password",
                    PDFDoc.Permission.e_PermPrint | PDFDoc.Permission.e_PermModify,
                    128);

                doc.SetSecurityHandler(securityHandler);
                doc.SaveAs("encrypted.pdf", (int)PDFDoc.SaveFlags.e_SaveFlagNoOriginal);
            }
        }
        finally
        {
            Library.Release();
        }
    }
}
$vbLabelText   $csharpLabel

Nach (IronPDF):

using IronPdf;

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

        // Set passwords
        pdf.SecuritySettings.OwnerPassword = "owner_password";
        pdf.SecuritySettings.UserPassword = "user_password";

        // Set permissions
        pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights;
        pdf.SecuritySettings.AllowUserEdits = IronPdf.Security.PdfEditSecurity.EditAll;
        pdf.SecuritySettings.AllowUserCopyPasteContent = true;
        pdf.SecuritySettings.AllowUserAnnotations = true;

        pdf.SaveAs("encrypted.pdf");
    }
}
using IronPdf;

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

        // Set passwords
        pdf.SecuritySettings.OwnerPassword = "owner_password";
        pdf.SecuritySettings.UserPassword = "user_password";

        // Set permissions
        pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights;
        pdf.SecuritySettings.AllowUserEdits = IronPdf.Security.PdfEditSecurity.EditAll;
        pdf.SecuritySettings.AllowUserCopyPasteContent = true;
        pdf.SecuritySettings.AllowUserAnnotations = true;

        pdf.SaveAs("encrypted.pdf");
    }
}
$vbLabelText   $csharpLabel

Erwägungen zur Leistung

Wiederverwendung von ChromePdfRenderer

Für eine optimale Leistung während der Foxit-PDF-Migration sollten Sie die ChromePdfRenderer-Instanz wiederverwenden - sie ist thread-sicher:

// 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;
}
// 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;
}
$vbLabelText   $csharpLabel

Helfer bei der Einheitenumwandlung

Foxit PDF SDK verwendet Punkte;IronPDFarbeitet mit Millimetern. Verwenden Sie dieses Hilfsmittel während der Migration:

public static class UnitConverter
{
    public static double PointsToMm(double points) => points * 0.352778;
    public static double MmToPoints(double mm) => mm / 0.352778;
    public static double InchesToMm(double inches) => inches * 25.4;
}

// Usage: Convert Foxit's 72 points (1 inch) toIronPDFmillimeters
renderer.RenderingOptions.MarginTop = UnitConverter.PointsToMm(72); // ~25.4mm
public static class UnitConverter
{
    public static double PointsToMm(double points) => points * 0.352778;
    public static double MmToPoints(double mm) => mm / 0.352778;
    public static double InchesToMm(double inches) => inches * 25.4;
}

// Usage: Convert Foxit's 72 points (1 inch) toIronPDFmillimeters
renderer.RenderingOptions.MarginTop = UnitConverter.PointsToMm(72); // ~25.4mm
$vbLabelText   $csharpLabel

Ressourcen richtig entsorgen

// GOOD - Using statement for automatic cleanup
using (var pdf = PdfDocument.FromFile("large.pdf"))
{
    string text = pdf.ExtractAllText();
}  // pdf is disposed automatically
// GOOD - Using statement for automatic cleanup
using (var pdf = PdfDocument.FromFile("large.pdf"))
{
    string text = pdf.ExtractAllText();
}  // pdf is disposed automatically
$vbLabelText   $csharpLabel

Fehlerbehebung

Problem 1: Library.Initialize() nicht gefunden

Problem: Library.Initialize() existiert nicht in IronPDF.

Lösung:IronPDFverwendet ein einfacheres Initialisierungsmuster:

// Foxit PDF
Library.Initialize(sn, key);

//IronPDF- just set license key once at startup
IronPdf.License.LicenseKey = "YOUR-KEY";
// Foxit PDF
Library.Initialize(sn, key);

//IronPDF- just set license key once at startup
IronPdf.License.LicenseKey = "YOUR-KEY";
$vbLabelText   $csharpLabel

Ausgabe 2: Behandlung von Fehlercodes

Problem: Der Code prüft ErrorCode.e_ErrSuccess , aberIronPDFhat diese Funktion nicht.

Lösung: Verwenden Sie die standardmäßige .NET-Ausnahmebehandlung:

// Foxit PDF
ErrorCode err = doc.LoadW("");
if (err != ErrorCode.e_ErrSuccess) { /* handle error */ }

// IronPDF
try
{
    var pdf = PdfDocument.FromFile("input.pdf");
}
catch (IOException ex)
{
    Console.WriteLine($"Failed to load PDF: {ex.Message}");
}
// Foxit PDF
ErrorCode err = doc.LoadW("");
if (err != ErrorCode.e_ErrSuccess) { /* handle error */ }

// IronPDF
try
{
    var pdf = PdfDocument.FromFile("input.pdf");
}
catch (IOException ex)
{
    Console.WriteLine($"Failed to load PDF: {ex.Message}");
}
$vbLabelText   $csharpLabel

Ausgabe 3: PDFDoc.Close() nicht gefunden

Problem: Die Methode doc.Close()existiert inIronPDFnicht.

Lösung: Verwenden Sie Dispose() oder using -Anweisungen:

// Foxit PDF
doc.Close();

// IronPDF
pdf.Dispose();
// or better: wrap in using statement
// Foxit PDF
doc.Close();

// IronPDF
pdf.Dispose();
// or better: wrap in using statement
$vbLabelText   $csharpLabel

Migrations-Checkliste

Vor der Migration

  • Inventarisierung aller verwendeten Foxit PDF SDK-Funktionen
  • Speicherorte der Dokumentenlizenzschlüssel
  • Beachten Sie alle Aufrufe Library.Initialize() und Library.Release()
  • Benutzerdefinierte Einstellungen auflisten (Seitengrößen, Ränder usw.)
  • Fehlerbehandlungsmuster mithilfe von ErrorCode identifizieren
  • Projekt in der Versionskontrolle sichern
  • IronPDF-Lizenzschlüssel erhalten

Paket-Migration

  • Entfernen Sie die Verweise auf die Foxit PDF SDKDLL aus der .csproj-Datei.
  • Entfernen Sie alle privaten NuGet-Feed-Konfigurationen
  • Installieren Sie das IronPdf NuGet-Paket: dotnet add package IronPdf
  • Namespace-Importe aktualisieren
  • IronPDF-Lizenzschlüssel beim Start festlegen

Code-Migration

  • Entfernen Sie die Aufrufe Library.Initialize() und Library.Release() .
  • Ersetzen Sie ErrorCode Prüfungen durch try/catch
  • Ersetzen Sie PDFDocdurch PdfDocument
  • Ersetzen Sie HTML2PDFdurch ChromePdfRenderer
  • Aktualisierung des Seitenzugriffs von GetPage(i) auf Pages[i]
  • Ersetzen Sie SaveAs(path, flags) durch SaveAs(path)
  • Ersetzen Sie Close() durch Dispose() oder using-Anweisungen
  • Aktualisieren Sie den Wasserzeichencode, um TextStamper zu verwenden.
  • Einheiten von Punkten in Millimeter umrechnen

Testen

  • Überprüfen Sie, ob die HTML-zu-PDF-Ausgabe den Erwartungen entspricht.
  • Test des PDF-Ladens und der Textextraktion
  • Überprüfung der Zusammenführungsfunktionalität
  • Wasserzeichendarstellung prüfen
  • Sicherheits-/Verschlüsselungsfunktionen testen
  • Formularfeldoperationen validieren
  • Leistungstests

Nach der Migration

  • Löschen Sie die Foxit PDF SDKDLLs
  • Entfernen Sie die Foxit-bezogenen Konfigurationsdateien
  • Dokumentation aktualisieren
  • Nicht verwendeten Hilfscode bereinigen

Migration.

Curtis Chau
Technischer Autor

Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender ...

Weiterlesen