Passer au contenu du pied de page
GUIDES DE MIGRATION

Migrer de Foxit PDF SDK à IronPDF : (Guide .NET)

La migration du kit de développement logiciel Foxit PDF versIronPDFsimplifie votre flux de travail de génération de PDF .NET en remplaçant les API complexes destinées aux entreprises par des modèles modernes et conviviaux pour les développeurs. Ce guide propose une méthode de migration complète et détaillée qui supprime le code inutile et simplifie les opérations PDF dans l'ensemble de votre code source.

Pourquoi migrer de Foxit PDF SDKà IronPDF

Les défis PDF de Foxit

Le kit de développement logiciel (SDK) Foxit PDF est une bibliothèque puissante de niveau entreprise, mais sa complexité importante peut ralentir le développement :

  1. Système de licences complexe : La multiplicité des produits, des références et des types de licences (par développeur, par serveur, OEM, etc.) rend difficile le choix de la solution adaptée à votre projet.

  2. Tarification pour les entreprises : La tarification est conçue pour les grandes organisations et peut être prohibitive pour les petites équipes ou les développeurs individuels.

  3. Installation manuelle : le SDK Foxit PDF nécessite des références DLL manuelles ou des flux NuGet privés ; il n'existe pas de package NuGet public simple disponible.

  4. API verbeuse : l'initialisation de la bibliothèque avec Library.Initialize() , la vérification du code d'erreur et les appels explicites Library.Release() ajoutent une quantité importante de code répétitif à chaque opération.

  5. Module complémentaire de conversion HTML séparé : la conversion HTML vers PDF nécessite l'achat d'un module complémentaire supplémentaire ; il n'est pas inclus dans le SDK de base.

  6. Configuration complexe : Les paramètres nécessitent une configuration d'objet détaillée (par exemple, HTML2PDFSettingData ) avec plusieurs propriétés.

  7. Héritage C++ : les modèles d'API reflètent les origines du C++, paraissant moins naturels dans les applications C# modernes.

Comparaison Foxit PDF vs IronPDF

Aspect Foxit PDF SDK IronPDF
Installation DLLs manuelles / flux privés Paquet NuGet simple
Licence d'utilisation Complexe, axé sur l'entreprise Transparent, adapté à toutes les tailles
Initialisation Library.Initialize(sn, key) Définir la clé de licence une seule fois
Gestion des erreurs Ensembles ErrorCode Exceptions .NET Standard
HTML vers PDF Achat séparé d'un module complémentaire Moteur Chromium intégré
Style API Héritage du C#, verbeux Modèles .NET modernes
Nettoyage des ressources Manuel Close()/Release() IDisposable/automatic
Documentation Portail documentaire d'entreprise Tutoriels publics

Analyse coûts-avantages

Passer de Foxit PDF àIronPDFoffre des avantages concrets en matière de développement : complexité réduite grâce à des API plus simples, développement plus rapide grâce à des méthodes intuitives, compatibilité .NET moderne incluant la prise en charge d'async/await et de LINQ, une approche HTML-first utilisant les compétences web existantes et des fonctionnalités complètes sans achats de modules complémentaires séparés. Alors que vous planifiez l'adoption de .NET 10 et C# 14 jusqu'en 2025 et 2026,IronPDFconstitue une base pérenne pour la génération de PDF.


Avant de commencer

Prérequis

  1. Environnement .NET :IronPDFprend en charge .NET Framework 4.6.2+, .NET Core 3.1+ et .NET 5/6/7/8/9+.
  2. Accès à NuGet : assurez-vous de pouvoir installer des packages depuis NuGet.
  3. Clé de licence : Obtenez votre clé de licenceIronPDFpour une utilisation en production sur ironpdf.com

Sauvegarde de votre projet

# 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

Identifier tous les usages de Foxit PDF

# 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

Documenter les fonctionnalités actuelles

Avant la migration, catalogue :

  • Quelles sont les fonctionnalités de Foxit PDF que vous utilisez (conversion HTML, annotations, formulaires, sécurité) ?
  • Emplacement des clés de licence et code d'initialisation
  • Configurations et paramètres personnalisés
  • Modèles de gestion des erreurs utilisant les enums ErrorCode

Migration rapide

Étape 1 : Mise à jour des paquets NuGet

# 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

Si vous avez des références Foxit PDF dans .csproj, supprimez-les manuellement:


<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

Étape 2 : Mise à jour des espaces de noms

// 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

Étape 3 : Initialisation d'IronPDF

L'une des améliorations les plus significatives de cette migration Foxit PDF est l'élimination du modèle complexe d'initialisation et de nettoyage :

// 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

Étape 4 : Modèle de conversion de base

// 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

Référence API complète

Cartographie des espaces de noms

Espace de noms Foxit PDF Équivalent d'IronPDF Notes
foxit IronPDF Espace de noms principal
foxit.common IronPDF Types courants
foxit.common.fxcrt N/A Bas niveau (non nécessaire)
foxit.pdf IronPDF Fonctionnement du document PDF
foxit.pdf.annots IronPdf.Edition Annotations
foxit.addon.conversion IronPdf.Rendering Conversion HTML/image

Mappage des classes de base

Classe Foxit PDF SDK Équivalent d'IronPDF Notes
Bibliothèque N/A IronPDFgère automatiquement
PDFDoc Document PDF Classe du document principal
PDFPage PdfDocument.Pages[i] Accès à la page
HTML2PDF ChromePdfRenderer Conversion HTML
TextPage pdf.ExtractTextFromPage(i) Extraction de texte
Watermark TextStamper / ImageStamper Watermarks
Sécurité Paramètres de sécurité Sécurité PDF
Formulaire pdf.Form Champs de formulaire
Métadonnées pdf.MetaData Métadonnées du document

Méthodes PDFDoc

Foxit PDFDoc IronPDFPdfDocument Notes
new PDFDoc(path) PdfDocument.FromFile(path) Charger à partir d'un fichier
doc.LoadW(password) PdfDocument.FromFile(path, password) Protégé par mot de passe
doc.GetPageCount() pdf.PageCount Propriété du nombre de pages
doc.GetPage(index) pdf.Pages[index] Accéder à la page par l'index
doc.SaveAs(path, flags) pdf.SaveAs(path) Enregistrer le document
doc.Close() pdf.Dispose() ou déclaration d'utilisation Nettoyage
doc.InsertDocument() PdfDocument.Merge() Fusionner des documents

Conversion HTML2PDF

Foxit HTML2PDF Équivalent d'IronPDF Notes
new HTML2PDFSettingData() new ChromePdfRenderer() Créer un moteur de rendu
settings.page_width RenderingOptions.PaperSize Tailles standard
settings.page_height RenderingOptions.SetCustomPaperSize() Taille personnalisée
html2pdf.Convert(html, path) renderer.RenderHtmlAsPdf(html) Chaîne HTML
html2pdf.ConvertFromURL(url, path) renderer.RenderUrlAsPdf(url) Conversion d'URL

Paramètres de filigrane

Filigrane Foxit Équivalent d'IronPDF Notes
new Watermark(doc, text, font, size, color) new TextStamper() Texte en filigrane
WatermarkSettings.position Alignement vertical + Alignement horizontal Poste à pourvoir
WatermarkSettings.rotation Rotation Angle de rotation
WatermarkSettings.opacity Opacité pourcentage de 0 à 100
watermark.InsertToAllPages() pdf.ApplyStamp(stamper) Postuler à tous

Exemples de code

Exemple 1 : Conversion HTML vers PDF

Avant (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

Après (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

L'approche d'IronPDF permet de réduire 15+ lignes de code de configuration à seulement 4 lignes. Pas d'initialisation de bibliothèque, pas de nettoyage explicite, pas d'objets de configuration complexes. Pour plus d'options de rendu HTML, consultez la documentation HTML vers PDF.

Exemple 2 : Conversion d'une URL en PDF

Avant (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

Après (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

Le moteur Chromium intégré d'IronPDF gère automatiquement l'exécution de JavaScript, le rendu CSS et le contenu dynamique. En savoir plus sur la conversion d'URL en PDF.

Exemple 3 : Ajout de filigranes

Avant (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

Après (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

Le TextStamper d'IronPDF offre une configuration intuitive basée sur les propriétés au lieu d'objets de paramètres distincts et d'une itération manuelle des pages. Consultez la documentation complète watermarking pour des options supplémentaires.

Exemple 4 : URL vers PDF avec en-têtes et pieds de page

Avant (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

Après (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 offre une prise en charge native des en-têtes et pieds de page avec un style HTML et des espaces réservés dynamiques pour les numéros de page.

Exemple 5 : Sécurité et chiffrement des PDF

Avant (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

Après (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

Considérations de Performance

Réutiliser ChromePdfRenderer

Pour des performances optimales lors de votre migration Foxit PDF, réutilisez l'instance ChromePdfRenderer- elle est à l'abri des threads :

// 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

Aide à la conversion d'unités

Foxit PDF SDK utilise des points ;IronPDFutilise des millimètres. Utilisez cette aide lors de la 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

Élimination correcte des ressources

// 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

Dépannage

Sujet 1 : Library.Initialize() introuvable

Problème : Library.Initialize() n'existe pas dans IronPDF.

Solution :IronPDFutilise un modèle d'initialisation plus simple :

// 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

Edition 2 : Traitement des codes d'erreur

Problème : le code vérifie ErrorCode.e_ErrSuccess , maisIronPDFne possède pas cette fonctionnalité.

Solution : Utiliser la gestion standard des exceptions .NET :

// 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

Sujet 3 : PDFDoc.Close() introuvable

Problème : la méthode doc.Close()n'existe pas dans IronPDF.

Solution : Utilisez Dispose() ou des instructions using :

// 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

Liste de contrôle de la migration

Pré-migration

  • Inventaire de toutes les fonctionnalités du SDK Foxit PDF utilisées
  • Emplacements des clés de licence du document
  • Notez tous les appels Library.Initialize() et Library.Release()
  • Liste des paramètres personnalisés (formats de page, marges, etc.)
  • Identifier les modèles de gestion des erreurs à l'aide d'ErrorCode
  • Sauvegarder le projet dans le système de contrôle de version
  • Obtenir une clé de licence IronPDF

Migration de paquets

  • Supprimer les références à la DLL du kit de développement logiciel (SDK) Foxit PDF du fichier .csproj
  • Supprimez toutes les configurations de flux NuGet privés.
  • Installez le package NuGet IronPdf : dotnet add package IronPdf
  • Mettre à jour les importations d'espace de noms
  • Définir la clé de licenceIronPDFau démarrage

Migration de code

  • Supprimez les appels Library.Initialize() et Library.Release()
  • Remplacez les vérifications ErrorCode par try/catch
  • Remplacer PDFDocpar PdfDocument
  • Remplacer HTML2PDFpar ChromePdfRenderer
  • Mettre à jour l'accès à la page de GetPage(i) à Pages[i]
  • Remplacez SaveAs(path, flags) par SaveAs(path)
  • Remplacez Close() par Dispose() ou par des instructions using
  • Mettre à jour le code du filigrane pour utiliser TextStamper
  • Convertir les unités de points en millimètres

Essai

  • Vérifier que la conversion HTML vers PDF correspond aux attentes
  • Test de chargement de PDF et d'extraction de texte
  • Vérifier la fonctionnalité de fusion
  • Vérifier l'apparence du filigrane
  • Tester les fonctionnalités de sécurité/cryptage
  • Valider les opérations sur les champs de formulaire
  • Tests de performance

Après la migration

  • Supprimer les DLL du SDK PDF de Foxit
  • Supprimer les fichiers de configuration liés à Foxit
  • Mise à jour de la documentation
  • Nettoyer le code d'assistance inutilisé

migration.

Curtis Chau
Rédacteur technique

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes ...

Lire la suite