IRONSOFTWAREHOME
VIDÉOS

Comment ajouter des en-têtes et des pieds de page dans des PDFs à l'aide d'Iron PDF

Curtis Chau
Curtis Chau
Updated: 19 juillet 2026

Apryse (rebaptisé depuis PDFTron le 8 février 2023) est un SDK PDF d'entreprise connu pour ses capacités complètes de traitement de documents. Les packages NuGet et namespaces .NET continuent d'être livrés sous les anciens IDs PDFTron.* / pdftron.* après la rebrand. Apryse utilise un modèle de tarification dirigé par les ventes — les prix publics ne sont pas publiés sur apryse.com, et les places de marché tierces (Vendr, G2) rapportent des devis d'entrée à partir d'environ 1 500 $/développeur/an. Associé à la configuration du chemin du module et aux API héritées de C++, cela peut créer des obstacles pour les équipes recherchant une fonctionnalité PDF simple. Ce guide fournit un chemin de migration étape par étape d'Apryse vers IronPDF— une bibliothèque PDF .NET native avec des conventions C# modernes, une intégration plus simple et une licence perpétuelle unique.

Pourquoi migrer loin d'Apryse PDF?

Bien qu'Apryse PDF offre des fonctionnalités robustes, plusieurs facteurs poussent les équipes de développement à chercher des alternatives pour leurs besoins de génération de PDF.

Tarification premium et modèle d'abonnement

Apryse cible les clients d'entreprise avec une tarification dirigée par les ventes qui peut être prohibitive pour les projets de petite à moyenne taille. Les prix publics ne sont pas publiés sur apryse.com ; les chiffres ci-dessous proviennent d'agrégateurs tiers (Vendr, G2) et doivent être confirmés avec les ventes Apryse :

AspectApryse (PDFTron)IronPDF
Niveau d'entrée~1 500 $/développeur/an (rapporté par Vendr)749 $ en une seule fois (Lite)
Gamme typique~9 275 $–35 816 $/an (selon les données du marché Vendr)Hiérarchisé Lite/Plus/Professional
Modèle de licenceAbonnement annuel, devis dirigé par les ventesLicence perpétuelle
Licence de visualisationWebViewer/PDFViewCtrl tarifé séparémentN/A (utiliser les visionneuses standard)
Licence serveurTarification entreprise requiseInclus dans les niveaux de licence

Complexité de l'intégration

L'héritage C++ d'Apryse façonne la surface .NET, ce qui peut ajouter des étapes de configuration par rapport à un package uniquement géré :

FonctionApryse PDFIronPDF
ConfigurationChemins d'accès aux modules, binaires externesPaquet NuGet unique
InitialisationPDFNet.Initialize() avec licenceAttribution simple de propriétés
Rendu HTMLModule html2pdf externe requisMoteur Chromium intégré
Style APIHéritage du C#, complexeConventions C# modernes
DépendancesPlusieurs DLL, spécifiques à une plate-formePaquet autonome

Quand envisager la migration

Migrer vers IronPDF si :

  • Vous avez principalement besoin d'une conversion HTML/URL en PDF
  • Vous voulez une API plus simple avec moins de "boilerplate
  • Le prix premium n'est pas justifié pour votre cas d'utilisation
  • Vous n'avez pas besoin des contrôles de visualisation PDFViewCtrl
  • Vous préférez la licence unique aux abonnements

Rester avec Apryse PDFsi:

  • Vous avez besoin de leurs contrôles de visualisation natifs (PDFViewCtrl)
  • Vous utilisez beaucoup XOD ou des formats propriétaires
  • Vous avez besoin de fonctionnalités spécifiques à l'entreprise (rédaction avancée, etc.)
  • Votre organisation dispose déjà de licences d'entreprise

Préparation de la migration

Prérequis

Assurez-vous que votre environnement répond à ces exigences :

  • .NET Framework 4.6.2+, .NET Core 3.1+, or .NET 5/6/7/8/9
  • Visual Studio 2019+ ou VS Code avec l'extension C#
  • Accès au Package Manager NuGet
  • Clé de licence IronPDF(essai gratuit disponible sur ironpdf.com)

Audit de l'utilisation du PDF Apryse

Exécutez ces commandes dans votre répertoire de solutions pour identifier toutes les références d'Apryse :

# Find all pdftron using statements
grep -r "using pdftron" --include="*.cs" .

# Find PDFNet initialization
grep -r "PDFNet.Initialize\|PDFNet.SetResourcesPath" --include="*.cs" .

# Find PDFDoc usage
grep -r "new PDFDoc\|PDFDoc\." --include="*.cs" .

# Find HTML2PDF usage
grep -r "HTML2PDF\|InsertFromURL\|InsertFromHtmlString" --include="*.cs" .

# Find ElementReader/Writer usage
grep -r "ElementReader\|ElementWriter\|ElementBuilder" --include="*.cs" .
SHELL

Modifications importantes à prévoir

Apryse PDFPatternChangements requis
PDFNet.Initialize()Remplacer par IronPdf.License.LicenseKey
HTML2PDF moduleIntégré ChromePdfRenderer
ElementWriterIronPDF gère le contenu en interne
SDFDoc.SaveOptionsMéthode simple SaveAs()
PDFViewCtrlUtiliser des visionneuses PDF externes
Format XODConvertir en PDF ou en images
Configuration du chemin d'accès au modulePas nécessaire

Processus de migration étape par étape

Étape 1 : Mise à jour des paquets NuGet

Apryse publie le SDK .NET sous plusieurs IDs de package PDFTron.* selon le framework cible et l'architecture (la marque a changé en 2023, mais les IDs de package n'ont pas changé). Communément utilisés :

  • PDFTron.NET.x64 — package principal .NET / .NET Core x64 (actuel 11.x)
  • PDFTron.NetFramework.x64 — uniquement .NET Framework 4.5.1+ x64
  • PDFTron.NETCore.Windows.x64 — .NET Core on Windows x64
  • PDFNet — package Windows .NET Framework 32/64 bits combiné hérité
# Remove whichever Apryse/PDFTron package(s) you have installed
dotnet remove package PDFTron.NET.x64
dotnet remove package PDFTron.NetFramework.x64
dotnet remove package PDFTron.NETCore.Windows.x64
dotnet remove package PDFNet

# Install IronPDF
dotnet add package IronPdf
SHELL

Ou via la console du Package Manager :

Uninstall-Package PDFTron.NET.x64
Install-Package IronPdf
PowerShell

Étape 2 : Mise à jour des références aux espaces de noms

Remplacer les espaces de noms Apryse par IronPDF:

// Remove these
using pdftron;
using pdftron.PDF;
using pdftron.PDF.Convert;
using pdftron.SDF;
using pdftron.Filters;

// Add these
using IronPdf;
using IronPdf.Rendering;

Étape 3 : supprimer le modèle d'initialisation

Apryse PDF nécessite une initialisation complexe.IronPDF élimine totalement ce problème.

Mise en œuvre d'Apryse PDF:

// Complex initialization
PDFNet.Initialize("YOUR_LICENSE_KEY");
PDFNet.SetResourcesPath("path/to/resources");
// Plus module path for HTML2PDF...

Mise en œuvre d'IronPDF:

// Simple license assignment (optional for development)
IronPdf.License.LicenseKey = "YOUR_LICENSE_KEY";

Aucun appel PDFNet.Terminate() n'est nécessaire avec IronPDF—les ressources sont gérées automatiquement.

Référence complète de migration des API

Mappage des classes de base

Apryse PDFClassÉquivalent d'IronPDF
PDFDocPdfDocument
HTML2PDFChromePdfRenderer
TextExtractorPdfDocument.ExtractAllText()
StamperPdfDocument.ApplyWatermark()
PDFDrawPdfDocument.ToBitmap()
SecurityHandlerPdfDocument.SecuritySettings
PDFNetIronPdf.License

Opérations documentaires

Méthode Apryse PDFMéthode IronPDF
new PDFDoc()new PdfDocument()
new PDFDoc(path)PdfDocument.FromFile(path)
new PDFDoc(buffer)PdfDocument.FromBinaryData(bytes)
doc.Save(path, options)pdf.SaveAs(path)
doc.Save(buffer)pdf.BinaryData
doc.Close()pdf.Dispose()
doc.GetPageCount()pdf.PageCount
doc.AppendPages(doc2, start, end)PdfDocument.Merge(pdfs)

Conversion HTML en PDF

Méthode Apryse PDFMéthode IronPDF
HTML2PDF.Convert(doc)renderer.RenderHtmlAsPdf(html)
converter.InsertFromURL(url)renderer.RenderUrlAsPdf(url)
converter.InsertFromHtmlString(html)renderer.RenderHtmlAsPdf(html)
converter.SetModulePath(path)Pas nécessaire
converter.SetPaperSize(width, height)RenderingOptions.PaperSize
converter.SetLandscape(true)RenderingOptions.PaperOrientation

Exemples de migration de code

Chaîne HTML convertie en PDF

L'opération la plus courante démontre la réduction considérable du code standard.

Mise en œuvre d'Apryse PDF:

using pdftron;
using pdftron.PDF;

class Program
{
    static void Main()
    {
        PDFNet.Initialize("YOUR_LICENSE_KEY");
        PDFNet.SetResourcesPath("path/to/resources");

        string html = "<html><body><h1>Hello World</h1><p>Content here</p></body></html>";

        using (PDFDoc doc = new PDFDoc())
        {
            HTML2PDF converter = new HTML2PDF();
            converter.SetModulePath("path/to/html2pdf");
            converter.InsertFromHtmlString(html);

            HTML2PDF.WebPageSettings settings = new HTML2PDF.WebPageSettings();
            settings.SetPrintBackground(true);
            settings.SetLoadImages(true);

            if (converter.Convert(doc))
            {
                doc.Save("output.pdf", SDFDoc.SaveOptions.e_linearized);
                Console.WriteLine("PDF created successfully");
            }
            else
            {
                Console.WriteLine($"Conversion failed: {converter.GetLog()}");
            }
        }

        PDFNet.Terminate();
    }
}

Mise en œuvre d'IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;

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

IronPDF élimine l'initialisation, les chemins d'accès aux modules et le code de nettoyage, réduisant ainsi plus de 35 lignes à 5 lignes.

Conversion d'URL en PDF

Mise en œuvre d'Apryse PDF:

using pdftron;
using pdftron.PDF;

PDFNet.Initialize("YOUR_LICENSE_KEY");

using (PDFDoc doc = new PDFDoc())
{
    HTML2PDF converter = new HTML2PDF();
    converter.SetModulePath("path/to/html2pdf");

    HTML2PDF.WebPageSettings settings = new HTML2PDF.WebPageSettings();
    settings.SetLoadImages(true);
    settings.SetAllowJavaScript(true);
    settings.SetPrintBackground(true);

    converter.InsertFromURL("https://example.com", settings);

    if (converter.Convert(doc))
    {
        doc.Save("webpage.pdf", SDFDoc.SaveOptions.e_linearized);
    }
}

PDFNet.Terminate();

Mise en œuvre d'IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        
        string url = "https://www.example.com";
        var pdf = renderer.RenderUrlAsPdf(url);
        
        pdf.SaveAs("webpage.pdf");
    }
}

Fusionner plusieurs fichiers PDF

Mise en œuvre d'Apryse PDF:

using pdftron;
using pdftron.PDF;

PDFNet.Initialize("YOUR_LICENSE_KEY");

using (PDFDoc mainDoc = new PDFDoc())
{
    string[] files = { "doc1.pdf", "doc2.pdf", "doc3.pdf" };

    foreach (string file in files)
    {
        using (PDFDoc doc = new PDFDoc(file))
        {
            mainDoc.AppendPages(doc, 1, doc.GetPageCount());
        }
    }

    mainDoc.Save("merged.pdf", SDFDoc.SaveOptions.e_linearized);
}

PDFNet.Terminate();

Mise en œuvre d'IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var pdf1 = PdfDocument.FromFile("document1.pdf");
        var pdf2 = PdfDocument.FromFile("document2.pdf");
        
        var merged = PdfDocument.Merge(new List<PdfDocument> { pdf1, pdf2 });
        
        merged.SaveAs("merged.pdf");
    }
}

La méthode statique Merge de IronPDF accepte plusieurs documents directement, éliminant le modèle d'itération des pages.

Extraction de texte

Mise en œuvre d'Apryse PDF:

using pdftron;
using pdftron.PDF;

PDFNet.Initialize("YOUR_LICENSE_KEY");

using (PDFDoc doc = new PDFDoc("document.pdf"))
{
    TextExtractor extractor = new TextExtractor();

    for (int i = 1; i <= doc.GetPageCount(); i++)
    {
        Page page = doc.GetPage(i);
        extractor.Begin(page);

        string pageText = extractor.GetAsText();
        Console.WriteLine($"Page {i}:");
        Console.WriteLine(pageText);
    }
}

PDFNet.Terminate();

Mise en œuvre d'IronPDF:

using IronPdf;

var pdf = PdfDocument.FromFile("document.pdf");

// Extract all text at once
string allText = pdf.ExtractAllText();
Console.WriteLine(allText);

// Extract from specific page
string page1Text = pdf.ExtractTextFromPage(0); // 0-indexed
Console.WriteLine($"Page 1: {page1Text}");

Ajouter des filigranes

Mise en œuvre d'Apryse PDF:

using pdftron;
using pdftron.PDF;

PDFNet.Initialize("YOUR_LICENSE_KEY");

using (PDFDoc doc = new PDFDoc("document.pdf"))
{
    Stamper stamper = new Stamper(Stamper.SizeType.e_relative_scale, 0.5, 0.5);
    stamper.SetAlignment(Stamper.HorizontalAlignment.e_horizontal_center,
                         Stamper.VerticalAlignment.e_vertical_center);
    stamper.SetOpacity(0.3);
    stamper.SetRotation(45);
    stamper.SetFontColor(new ColorPt(1, 0, 0));
    stamper.SetTextAlignment(Stamper.TextAlignment.e_align_center);

    stamper.StampText(doc, "CONFIDENTIAL",
        new PageSet(1, doc.GetPageCount()));

    doc.Save("watermarked.pdf", SDFDoc.SaveOptions.e_linearized);
}

PDFNet.Terminate();

Mise en œuvre d'IronPDF:

using IronPdf;
using IronPdf.Editing;

var pdf = PdfDocument.FromFile("document.pdf");

// HTML-based watermark with full styling control
string watermarkHtml = @"
<div style='
    color: red;
    opacity: 0.3;
    font-size: 72px;
    font-weight: bold;
    text-align: center;
'>CONFIDENTIAL</div>";

pdf.ApplyWatermark(watermarkHtml,
    rotation: 45,
    verticalAlignment: VerticalAlignment.Middle,
    horizontalAlignment: HorizontalAlignment.Center);

pdf.SaveAs("watermarked.pdf");

IronPDF utilise un filigrane basé sur HTML/CSS , offrant un contrôle total du style grâce à des technologies web familières.

Protection par mot de passe

Mise en œuvre d'Apryse PDF:

using pdftron;
using pdftron.PDF;
using pdftron.SDF;

PDFNet.Initialize("YOUR_LICENSE_KEY");

using (PDFDoc doc = new PDFDoc("document.pdf"))
{
    SecurityHandler handler = new SecurityHandler();
    handler.ChangeUserPassword("user123");
    handler.ChangeMasterPassword("owner456");

    handler.SetPermission(SecurityHandler.Permission.e_print, false);
    handler.SetPermission(SecurityHandler.Permission.e_extract_content, false);

    doc.SetSecurityHandler(handler);
    doc.Save("protected.pdf", SDFDoc.SaveOptions.e_linearized);
}

PDFNet.Terminate();

Mise en œuvre d'IronPDF:

using IronPdf;

var pdf = PdfDocument.FromFile("document.pdf");

// Set passwords
pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.OwnerPassword = "owner456";

// Set permissions
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit;

pdf.SaveAs("protected.pdf");

En-têtes et pieds de page

Mise en œuvre d'IronPDF:

using IronPdf;

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='text-align:center; font-size:12px;'>Company Header</div>",
    DrawDividerLine = true,
    MaxHeight = 30
};

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

var pdf = renderer.RenderHtmlAsPdf("<h1>Content</h1>");
pdf.SaveAs("with_headers.pdf");

IronPDF prend en charge des tokens de remplacement comme {page} et {total-pages} pour la numérotation dynamique des pages. Pour plus d'options, consultez la documentation sur les en-têtes et les pieds de page.

Intégration d'ASP.NET Core

Les exigences d'initialisation d'Apryse PDF compliquent l'intégration des applications web.IronPDF simplifie ce modèle.

Modèle IronPDF:

[ApiController]
[Route("[controller]")]
public class PdfController : ControllerBase
{
    [HttpGet("generate")]
    public IActionResult GeneratePdf()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Report</h1>");

        return File(pdf.BinaryData, "application/pdf", "report.pdf");
    }

    [HttpGet("generate-async")]
    public async Task<IActionResult> GeneratePdfAsync()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Report</h1>");

        return File(pdf.BinaryData, "application/pdf", "report.pdf");
    }
}

Configuration de l'injection de dépendance

// Program.cs
public void ConfigureServices(IServiceCollection services)
{
    // Set license once
    IronPdf.License.LicenseKey = Configuration["IronPdf:LicenseKey"];

    // Register renderer as scoped service
    services.AddScoped<ChromePdfRenderer>();

    // Or create a wrapper service
    services.AddScoped<IPdfService, IronPdfService>();
}

// IronPdfService.cs
public class IronPdfService : IPdfService
{
    private readonly ChromePdfRenderer _renderer;

    public IronPdfService()
    {
        _renderer = new ChromePdfRenderer();
        _renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        _renderer.RenderingOptions.PrintHtmlBackgrounds = true;
    }

    public PdfDocument GenerateFromHtml(string html) =>
        _renderer.RenderHtmlAsPdf(html);

    public Task<PdfDocument> GenerateFromHtmlAsync(string html) =>
        _renderer.RenderHtmlAsPdfAsync(html);
}

Comparaison des Performances

MétriqueApryse PDFIronPDF
Départ à froidFast (code natif)~2s (Chromium init)
Rendu ultérieurFastFast
HTML complexeVariable (module html2pdf)Excellent (Chromium)
Support CSSLimitéCSS3 complet
JavaScriptLimitéPrise en charge

Conseils pour l'optimisation des performances

// 1. Reuse renderer instance
private static readonly ChromePdfRenderer SharedRenderer = new ChromePdfRenderer();

// 2. Disable unnecessary features for speed
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = false; // If not needed
renderer.RenderingOptions.WaitFor.RenderDelay(0);   // No delay
renderer.RenderingOptions.Timeout = 30000;          // 30s max

// 3. Proper disposal
using (var pdf = renderer.RenderHtmlAsPdf(html))
{
    pdf.SaveAs("output.pdf");
}

Dépannage des problèmes de migration courants

Sujet : Erreurs de chemin d'accès au module

Supprimer toute configuration du chemin d'accès aux modules : le moteur Chromium d'IronPDF est intégré :

// Remove this
converter.SetModulePath("path/to/html2pdf");

// Just use the renderer
var renderer = new ChromePdfRenderer();

Problème : PDFNet.Initialize() introuvable

Remplacer par la configuration de la licence IronPDF:

// Remove this
PDFNet.Initialize("KEY");
PDFNet.SetResourcesPath("path");

// Use this (optional for development)
IronPdf.License.LicenseKey = "YOUR-KEY";

Édition : Remplacement de PDFViewCtrl

IronPDF n'inclut pas de contrôles de visualisation. Options possibles :

  • Utiliser PDF.js pour les visionneuses web
  • Utiliser les visionneuses PDF du système
  • Prendre en compte les composants de visualisation tiers

Liste de contrôle post-migration

Après avoir effectué la migration du code, vérifiez les points suivants :

  • Vérifier que la qualité de la sortie PDF correspond aux attentes
  • Tester tous les cas limites (documents volumineux, CSS complexe)
  • Comparer les indicateurs de performance
  • Mettre à jour les configurations Docker si nécessaire
  • Supprimer la licence Apryse et les configurations associées
  • Documentez toutes les configurations spécifiques à IronPDF
  • Former l'équipe aux nouveaux modèles d'API
  • Mettre à jour les pipelines CI/CD si nécessaire

Ressources supplémentaires


La migration d'Apryse PDF vers IronPDF transforme votre base de code PDF, qui passe de modèles C++ complexes à un langage C# idiomatique. L'élimination de l'initialisation, de la configuration des chemins d'accès aux modules et des licences par abonnement permet de réaliser des gains de productivité immédiats tout en réduisant les coûts à long terme.

Veuillez noter: Apryse est une marque déposée de son propriétaire respectif. Ce site n'est pas affilié à, approuvé par, ou sponsorisé par Apryse ou PDFTron. 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