IRONSOFTWAREHOME
VIDÉOS

Comment définir des marges personnalisées dans les PDFs C#

Curtis Chau
Curtis Chau
Updated: 19 juillet 2026

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. Paquet natif lourd : Le package NuGet public (Foxit.SDK.Dotnet) est volumineux (~240 Mo), et les anciens projets peuvent encore contenir des références DLL directes ou des configurations de flux privé.

  4. API verbeuse : L'initialisation de la bibliothèque avec Library.Initialize(), la vérification des codes d'erreur et les appels explicites à Library.Release() ajoutent un modèle standard à chaque opération.

  5. Moteur HTML2PDF Séparé : La conversion HTML en PDF nécessite les binaires du moteur HTML2PDF, distribués séparément du support/ventes Foxit plutôt que d'être inclus dans le paquet NuGet.

  6. Configuration complexe : Les paramètres nécessitent une configuration détaillée d'objets (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

AspectFoxit PDF SDKIronPDF
InstallationFoxit.SDK.Dotnet (~240 Mo) + moteur HTML2PDF séparéPaquet NuGet simple
Licence d'utilisationDirigé par les ventes, par développeur et par plateformeTransparent, adapté à toutes les tailles
InitialisationLibrary.Initialize(sn, key)Définir la clé de licence une seule fois
Gestion des erreursEnsembles ErrorCodeExceptions .NET Standard
HTML vers PDFTéléchargement de moteur séparéMoteur Chromium intégré
Style APIHéritage du C#, verbeuxModèles .NET modernes
Nettoyage des ressourcesManuel Release()IDisposable/automatic
DocumentationPortail documentaire d'entrepriseTutoriels publics

Analyse coûts-avantages

Passer de Foxit PDF à IronPDF offre des avantages tangibles en matière de développement : complexité réduite grâce à des API plus simples, développement plus rapide avec des méthodes intuitives, compatibilité .NET moderne incluant le support async/await et LINQ, une approche HTML-first utilisant des compétences web existantes, et conversion HTML incluse sans téléchargement de moteur séparé.IronPDF fonctionne sur les versions actuelles de .NET et s'associe proprement avec les modèles modernes C#.


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 SDKto IronPDF migration"
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"
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

# Remove the Foxit NuGet package
dotnet remove package Foxit.SDK.Dotnet

# Install IronPDF
dotnet add package IronPdf
SHELL

Si vous avez d'anciennes références DLL Foxit directes dans .csproj (anciennes constructions), supprimez-les manuellement :

<!-- Remove these manually -->
<Reference Include="fsdk_dotnet">
    <HintPath>..\libs\Foxit\fsdk_dotnet.dll</HintPath>
</Reference>
XML

Supprimez également tous les dossiers de moteur HTML2PDF qui ont été décompressés séparément.

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

É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-LICENSE-KEY";
// That's it! No Release() needed

É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;
Convert.FromHTML(htmlContent, @"C:\Foxit\html2pdf_engine", "",
                 settings, "output.pdf", 30);
Library.Release();

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

Référence API complète

Cartographie des espaces de noms

Espace de noms Foxit PDFÉquivalent d'IronPDF
foxitIronPdf
foxit.commonIronPdf
foxit.common.fxcrtN/A
foxit.pdfIronPdf
foxit.pdf.annotsIronPdf.Editing
foxit.addon.conversionIronPdf.Rendering

Mappage des classes de base

Classe Foxit PDF SDKÉquivalent d'IronPDF
LibraryN/A
PDFDocPdfDocument
PDFPagePdfDocument.Pages[i]
HTML2PDFChromePdfRenderer
TextPagepdf.ExtractTextFromPage(i)
WatermarkTextStamper / ImageStamper
SecuritySecuritySettings
Formpdf.Form
Metadatapdf.MetaData

Méthodes PDFDoc

Foxit PDFDocIronPDF 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 instruction using
doc.InsertDocument()PdfDocument.Merge()

Conversion HTML2PDF

Foxit HTML2PDFÉquivalent d'IronPDF
new HTML2PDFSettingData()new ChromePdfRenderer()
settings.page_widthRenderingOptions.PaperSize
settings.page_heightRenderingOptions.SetCustomPaperSize()
Convert.FromHTML(html, engine, ...)renderer.RenderHtmlAsPdf(html)
Convert.FromHTML(url, engine, ...)renderer.RenderUrlAsPdf(url)

Paramètres de filigrane

Filigrane FoxitÉquivalent d'IronPDF
new Watermark(doc, text, font, size, color)new TextStamper()
WatermarkSettings.positionVerticalAlignment + HorizontalAlignment
WatermarkSettings.rotationRotation
WatermarkSettings.opacityOpacity
watermark.InsertToAllPages()pdf.ApplyStamp(stamper)

Exemples de code

Exemple 1 : Conversion HTML vers PDF

Avant (Foxit PDF SDK):

// NuGet: Install-Package Foxit.SDK.Dotnet
// HTML-to-PDF requires the separate Foxit HTML2PDFengine (engine_path),
// obtained from Foxit support/sales — not in the NuGet package.
using foxit;
using foxit.common;
using foxit.addon.conversion;
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;

        Convert.FromHTML(
            "<html><body><h1>Hello World</h1></body></html>",
            @"C:\Foxit\html2pdf_engine",   // engine_path (separate download)
            "",                              // cookies path
            settingData,
            "output.pdf",
            30);                             // timeout (seconds)

        Library.Release();
    }
}
C#

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

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.Dotnet
// Convert.FromHTML accepts either a URL or a literal HTML string in the
// first argument; the URL form is what does URL-to-PDF.
using foxit;
using foxit.common;
using foxit.addon.conversion;
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;

        Convert.FromHTML(
            "https://www.example.com",
            @"C:\Foxit\html2pdf_engine",   // engine_path (separate download)
            "",                              // cookies path
            settingData,
            "output.pdf",
            30);                             // timeout (seconds)

        Library.Release();
    }
}

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

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.Dotnet
using foxit;
using foxit.common;
using foxit.pdf;
using System;

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

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

            WatermarkSettings settings = new WatermarkSettings();
            settings.flags = (int)Watermark.Flags.e_FlagASPageContents;
            settings.position = Position.e_PosCenter;
            settings.rotation = -45.0f;
            settings.opacity = 50;     // 0-100 in newer SDKs

            WatermarkTextProperties props = new WatermarkTextProperties();
            props.font = new Font(Font.StandardID.e_StdIDHelvetica);
            props.font_size = 48.0f;
            props.color = 0xFF0000;
            props.alignment = Alignment.e_AlignmentCenter;

            Watermark watermark = new Watermark(doc, "Confidential", props, settings);

            // No InsertToAllPages helper — iterate pages explicitly.
            for (int i = 0; i < doc.GetPageCount(); i++)
            {
                using (PDFPage page = doc.GetPage(i))
                {
                    watermark.InsertToPage(page);
                }
            }

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

        Library.Release();
    }
}

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

La TextStamper d'IronPDF offre une configuration intuitive basée sur les propriétés au lieu d'objets de paramètres séparés et 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

            Convert.FromHTML(
                "https://www.example.com",
                @"C:\Foxit\html2pdf_engine",  // engine_path (separate download)
                "",                            // cookies path
                settings,
                "webpage.pdf",
                30);                           // timeout (seconds)
        }
        finally
        {
            Library.Release();
        }
    }
}
C#

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

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

                // Build the encryption data (cipher, key length, permissions)
                using (StdEncryptData encryptData = new StdEncryptData(
                    true,                                    // is_encrypt_metadata
                    (int)(PDFDoc.UserPermissions.e_PermPrint |
                          PDFDoc.UserPermissions.e_PermModify),
                    SecurityHandler.CipherType.e_CipherAES,
                    16))                                     // key length (bytes) -> AES-128
                using (StdSecurityHandler securityHandler = new StdSecurityHandler())
                {
                    securityHandler.Initialize(encryptData, "user_password", "owner_password");
                    doc.SetSecurityHandler(securityHandler);
                }

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

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

Considérations de Performance

Réutiliser ChromePdfRenderer

Pour des performances optimales pendant votre migration PDF Foxit, réutilisez l'instance ChromePdfRenderer—elle est thread-safe :

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

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) to IronPDF millimeters
renderer.RenderingOptions.MarginTop = UnitConverter.PointsToMm(72); // ~25.4mm

É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

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

Edition 2 : Traitement des codes d'erreur

Problème : Le code vérifie ErrorCode.e_ErrSuccess mais IronPDF n'a pas cela.

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

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

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

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

Veuillez noter: Foxit PDF SDK et Foxit sont des marques déposées de Foxit Software Incorporated. Ce site n'est pas affilié à, approuvé par ou sponsorisé par Foxit Software. Tous les noms de produits, logos et marques sont la propriété de leurs propriétaires respectifs. Les comparaisons sont à titre informatif uniquement et reflètent les informations publiquement disponibles au moment de l'écriture.
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 et créer des manuels bien structurés et visuellement attrayants.

...
Lire la suite

Articles connexes

Key in blue circle

Obtenez votre clé d'essai de 30 jours instantanément.

Your trial license will be sent to your email address

Aucune restriction. 100 % débloqué. Pas de carte bancaire.

bullet_checkedAucune carte de crédit ou création de compte requiseAucune restriction. 100 % débloqué. Pas de carte bancaire.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Réservez votre Démonstration en direct gratuite
Booking Badge

De confiance par des millions d'ingénieurs dans le monde entier

Logos des clients d'Iron Software
Obtenez Votre Consultation sans Engagement
Remplissez le formulaire ci-dessous ou envoyez un email à sales@ironsoftware.com
Vos informations seront toujours gardées confidentielles.
De confiance par des millions d'ingénieurs dans le monde entier
Logos des clients d'Iron Software
Obtenez votre clé d'essai 30 jours gratuitement.
Aucune carte de crédit ou création de compte requise