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 vers IronPDF simplifie 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 Enterprise : 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 un code répétitif substantiel à 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 Release() IDisposable/automatic
Documentation Portail documentaire d'entreprise Tutoriels publics

Analyse coûts-avantages

Passer de Foxit PDF à IronPDF offre des avantages concrets en matière de développement : une complexité réduite grâce à des API plus simples, un développement plus rapide grâce à des méthodes intuitives, une compatibilité .NET moderne incluant la prise en charge d'async/await et de LINQ, une approche HTML-first qui utilise 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, IronPDF constitue une base pérenne pour la génération de PDF.


Avant de commencer

Prérequis

  1. Environnement .NET :IronPDF prend 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 licence IronPDF pour une utilisation en production sur IronPDF

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;
Imports IronPdf
Imports IronPdf.Rendering
Imports 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
' Before (Foxit PDF)
Dim sn As String = "YOUR_SERIAL_NUMBER"
Dim key As String = "YOUR_LICENSE_KEY"
Dim error_code As ErrorCode = Library.Initialize(sn, key)
If error_code <> ErrorCode.e_ErrSuccess Then
    Throw New Exception("Failed to initialize Foxit PDF SDK")
End If
' ... 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");
Imports FoxitPDF
Imports IronPdf

' Before (Foxit PDF)
Library.Initialize(sn, key)
Dim settings As New HTML2PDFSettingData()
settings.page_width = 612.0F
settings.page_height = 792.0F
Using html2pdf As New HTML2PDF(settings)
    html2pdf.Convert(htmlContent, "output.pdf")
End Using
Library.Release()

' After (IronPDF)
Dim renderer As New ChromePdfRenderer()
Dim 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
foxit IronPdf
foxit.common IronPdf
foxit.common.fxcrt N/A
foxit.pdf IronPdf
foxit.pdf.annots IronPdf.Editing
foxit.addon.conversion IronPdf.Rendering

Mappage des classes de base

Classe Foxit PDF SDK Équivalent d'IronPDF
Library N/A
PDFDoc PdfDocument
PDFPage PdfDocument.Pages[i]
HTML2PDF ChromePdfRenderer
TextPage pdf.ExtractTextFromPage(i)
Watermark TextStamper / ImageStamper
Security SecuritySettings
Form pdf.Form
Metadata pdf.MetaData

Méthodes PDFDoc

Foxit PDFDoc IronPDF PdfDocument
new PDFDoc(path) PdfDocument.FromFile(path)
doc.LoadW(password) PdfDocument.FromFile(path, password)
doc.GetPageCount() pdf.PageCount
doc.GetPage(index) pdf.Pages[index]
doc.SaveAs(path, flags) pdf.SaveAs(path)
doc.Close() pdf.Dispose() ou en utilisant l'instruction
doc.InsertDocument() PdfDocument.Merge()

Conversion HTML2PDF

Foxit HTML2PDF Équivalent d'IronPDF
new HTML2PDFSettingData() new ChromePdfRenderer()
settings.page_width RenderingOptions.PaperSize
settings.page_height RenderingOptions.SetCustomPaperSize()
html2pdf.Convert(html, path) renderer.RenderHtmlAsPdf(html)
html2pdf.ConvertFromURL(url, path) renderer.RenderUrlAsPdf(url)

Paramètres de filigrane

Filigrane Foxit Équivalent d'IronPDF
new Watermark(doc, text, font, size, color) new TextStamper()
WatermarkSettings.position VerticalAlignment + HorizontalAlignment
WatermarkSettings.rotation Rotation
WatermarkSettings.opacity Opacity
watermark.InsertToAllPages() pdf.ApplyStamp(stamper)

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();
    }
}
Imports Foxit.SDK
Imports Foxit.SDK.Common
Imports Foxit.SDK.PDFConversion
Imports System

Class Program
    Shared Sub Main()
        Library.Initialize("sn", "key")

        Dim settingData As New HTML2PDFSettingData()
        settingData.page_width = 612.0F
        settingData.page_height = 792.0F
        settingData.page_mode = HTML2PDFPageMode.e_HTML2PDFPageModeSinglePage

        Using html2pdf As New HTML2PDF(settingData)
            html2pdf.Convert("<html><body><h1>Hello World</h1></body></html>", "output.pdf")
        End Using

        Library.Release()
    End Sub
End Class
$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");
    }
}
Imports IronPdf
Imports System

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()
        Dim pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1></body></html>")
        pdf.SaveAs("output.pdf")
    End Sub
End Class
$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();
    }
}
Imports Foxit.SDK
Imports Foxit.SDK.Common
Imports Foxit.SDK.PDFConversion
Imports System

Class Program
    Shared Sub Main()
        Library.Initialize("sn", "key")

        Dim settingData As New HTML2PDFSettingData()
        settingData.page_width = 612.0F
        settingData.page_height = 792.0F
        settingData.page_mode = HTML2PDFPageMode.e_HTML2PDFPageModeSinglePage

        Using html2pdf As New HTML2PDF(settingData)
            html2pdf.ConvertFromURL("https://www.example.com", "output.pdf")
        End Using

        Library.Release()
    End Sub
End Class
$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");
    }
}
Imports IronPdf
Imports System

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()
        Dim pdf = renderer.RenderUrlAsPdf("https://www.example.com")
        pdf.SaveAs("output.pdf")
    End Sub
End Class
$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();
    }
}
Imports Foxit.SDK
Imports Foxit.SDK.Common
Imports Foxit.SDK.PDFDoc
Imports System

Class Program
    Shared Sub Main()
        Library.Initialize("sn", "key")

        Using doc As New PDFDoc("input.pdf")
            doc.Load("")

            Dim watermark As New Watermark(doc, "Confidential", 
                                           New Font(Font.StandardID.e_StdIDHelvetica), 48.0F, &HFF0000FF)

            Dim settings As 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)
        End Using

        Library.Release()
    End Sub
End Class
$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");
    }
}
Imports IronPdf
Imports IronPdf.Editing
Imports System

Class Program
    Shared Sub Main()
        Dim pdf = PdfDocument.FromFile("input.pdf")
        pdf.ApplyWatermark(New TextStamper() With {
            .Text = "Confidential",
            .FontSize = 48,
            .Opacity = 50,
            .Rotation = -45,
            .VerticalAlignment = VerticalAlignment.Middle,
            .HorizontalAlignment = HorizontalAlignment.Center
        })
        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

IronPDF's TextStamper fournit une configuration intuitive basée sur les propriétés au lieu d'objets de paramètres séparés 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();
        }
    }
}
Imports foxit
Imports foxit.addon.conversion

Class Program
    Shared Sub Main()
        Library.Initialize("sn", "key")

        Try
            Dim settings As 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 SDK has limited header/footer support
            ' Often requires post-processing or additional code

            Using html2pdf As New HTML2PDF(settings)
                html2pdf.ConvertFromURL("https://www.example.com", "webpage.pdf")
            End Using
        Finally
            Library.Release()
        End Try
    End Sub
End Class
$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");
    }
}
Imports IronPdf

Class Program
    Shared Sub Main()
        Dim 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() With {
            .HtmlFragment = "<div style='text-align:center; font-size:12pt;'>Company Report</div>",
            .DrawDividerLine = True
        }

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

        Dim pdf = renderer.RenderUrlAsPdf("https://www.example.com")
        pdf.SaveAs("webpage.pdf")
    End Sub
End Class
$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();
        }
    }
}
Imports foxit
Imports foxit.pdf

Class Program
    Shared Sub Main()
        Library.Initialize("sn", "key")

        Try
            Using doc As New PDFDoc("input.pdf")
                doc.LoadW("")

                Dim securityHandler As New StdSecurityHandler()
                securityHandler.Initialize(StdSecurityHandler.EncryptAlgorithm.e_CipherAES,
                                           "user_password",
                                           "owner_password",
                                           PDFDoc.Permission.e_PermPrint Or PDFDoc.Permission.e_PermModify,
                                           128)

                doc.SetSecurityHandler(securityHandler)
                doc.SaveAs("encrypted.pdf", CInt(PDFDoc.SaveFlags.e_SaveFlagNoOriginal))
            End Using
        Finally
            Library.Release()
        End Try
    End Sub
End Class
$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");
    }
}
Imports IronPdf

Class Program
    Shared Sub Main()
        Dim 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")
    End Sub
End Class
$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 sûre pour les 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;
}
Imports System

Public Class PdfService
    Private Shared ReadOnly _renderer As New ChromePdfRenderer()

    Public Function Generate(html As String) As Byte()
        Return _renderer.RenderHtmlAsPdf(html).BinaryData
    End Function

    ' BAD - Creates new instance each time
    Public Function GenerateBad(html As String) As Byte()
        Dim renderer As New ChromePdfRenderer() ' Wasteful
        Return renderer.RenderHtmlAsPdf(html).BinaryData
    End Function
End Class
$vbLabelText   $csharpLabel

Aide à la conversion d'unités

Foxit PDF SDK utilise des points ;IronPDF utilise 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
Public Module UnitConverter
    Public Function PointsToMm(points As Double) As Double
        Return points * 0.352778
    End Function

    Public Function MmToPoints(mm As Double) As Double
        Return mm / 0.352778
    End Function

    Public Function InchesToMm(inches As Double) As Double
        Return inches * 25.4
    End Function
End Module

' Usage: Convert Foxit's 72 points (1 inch) to IronPDF millimeters
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
Imports PdfDocument

' GOOD - Using block for automatic cleanup
Using pdf = PdfDocument.FromFile("large.pdf")
    Dim text As String = pdf.ExtractAllText()
End Using ' pdf is disposed automatically
$vbLabelText   $csharpLabel

Dépannage

Sujet 1 : Library.Initialize() introuvable

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

Solution :IronPDF utilise 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 mais IronPDF ne le possède pas.

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}");
}
Imports System
Imports System.IO

' Foxit PDF
Dim err As ErrorCode = doc.LoadW("")
If err <> ErrorCode.e_ErrSuccess Then
    ' handle error
End If

' IronPDF
Try
    Dim pdf = PdfDocument.FromFile("input.pdf")
Catch ex As IOException
    Console.WriteLine($"Failed to load PDF: {ex.Message}")
End Try
$vbLabelText   $csharpLabel

Sujet 3 : PDFDoc.Close() introuvable

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

Solution : Utilisez les instructions Dispose() ou 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 licence IronPDF au démarrage

Migration de code

  • Supprimer les appels Library.Initialize() et Library.Release()
  • Remplacez les vérifications ErrorCode par des blocs try/catch
  • Remplacez PDFDoc par PdfDocument
  • Remplacez HTML2PDF par ChromePdfRenderer
  • Mise à jour de l'accès à la page de GetPage(i) à Pages[i]
  • Remplacez SaveAs(path, flags) par SaveAs(path)
  • Remplacez Close() par Dispose() ou utilisez des instructions
  • Mettez à 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

Équipe de soutien Iron

Nous sommes en ligne 24 heures sur 24, 5 jours sur 7.
Chat
Email
Appelez-moi