Passer au contenu du pied de page
COMPARAISONS DE PRODUITS

Une Comparaison entre IronPDF et Apitron PDF Kit

En C#, travailler avec des fichiers PDF peut être un défi pour les développeurs. Il y a de nombreux facteurs à prendre en compte lors de la création de contenu pour de tels fichiers, et encore plus lors de la conversion de contenu de différents formats vers PDF. L'automatisation est désormais la clé des processus de développement logiciel. Ces problèmes ont maintenant été résolus avec la construction de bibliothèques conçues pour aider à lire, écrire, créer et modifier des documents PDF, ainsi qu'à modifier leurs attributs et à les convertir à partir d'autres formats.

Deux bibliothèques PDF seront comparées pour .NET et .NET Core dans cet article de blog. Ces deux bibliothèques sont :

  • La bibliothèque IronPDF
  • Le kit PDF Apitron

IronPDF et Apitron PDF Kit sont deux bibliothèques qui fournissent des fonctions de manipulation du PDF pour .NET et .NET Core. Elles peuvent toutes deux être utilisées pour des tâches de conversion et de manipulation des champs de documents. Elles peuvent également toutes deux créer des signets. La prochaine question est de décider quelle bibliothèque C# PDF .NET est la meilleure pour nos projets .NET. Cet article de comparaison vous aidera à décider entre ces deux bibliothèques PDF.

Tout d'abord, examinons ce que les deux bibliothèques ont à offrir, puis passons à la comparaison elle-même.

La bibliothèque Apitron PDF Kit et ses caractéristiques

Apitron PDF Kit est un composant .NET qui vous permet de manipuler ou de convertir des fichiers PDF comme vous le souhaitez. Vous pouvez ajouter des images, des dessins et des textes, signer des documents, et bien plus encore. Vous pouvez également modifier le contenu existant. Le composant .NET Apitron PDF Kit peut être utilisé pour créer des applications mobiles, de bureau, web, Windows et Cloud sur plusieurs plateformes.

En utilisant ce SDK PDF, vous pourrez :

  • Extraire, modifier et ajouter des graphiques (texte, images, dessins)
  • Diviser ou fusionner des documents PDF
  • Remplir ou créer des formulaires PDF protégés par mot de passe, support FDF
  • Créer un document PDF multi-couches avec des groupes de contenu optionnels (OCG)
  • Ajouter ou supprimer des champs du document
  • Utiliser du texte de droite à gauche ou bidirectionnel pour créer du contenu de page
  • Examiner les ressources dans un document - polices définies, fichiers intégrés
  • Signer numériquement et vérifier les signatures existantes sur les documents PDF

Les caractéristiques principales d'IronPDF

Les développeurs, en particulier les programmeurs C#, adoreront la bibliothèque IronPDF .NET. Avec cet outil incroyable, vous pouvez facilement construire une application de traitement PDF .NET Core.

IronPDF utilise le moteur Chromium .NET pour transformer des pages HTML (en code ou sous forme d'URL) en fichiers PDF. Il n'est absolument pas nécessaire d'utiliser des APIs complexes pour positionner des objets de navigation ou pour concevoir des PDFs à partir de HTML. Les documents web standards sont pris en charge par IronPDF, y compris HTML, ASPX, JS, CSS et images.

IronPDF peut être créé en utilisant HTML5, CSS, JS et images. Un PDF peut être facilement édité, tamponné, et ajouté avec des en-têtes et pieds de page. Il facilite également la lecture du texte PDF et l'extraction de graphiques.

Les caractéristiques remarquables d'IronPDF incluent :

  • Création de documents PDF à l'aide de HTML4/5, CSS, et JavaScript
  • Chargement d'URLs avec des identifiants de connexion réseau personnalisés, agents utilisateurs, proxies, cookies, en-têtes HTTP, et variables de formulaire (permettant la connexion derrière des formulaires de connexion HTML)
  • Lecture et remplissage des champs de formulaire PDF
  • Extraction de texte et graphiques des PDFs
  • Mise à jour des pages PDF avec du nouveau contenu HTML
  • Création d'en-têtes et de pieds de page basés sur du texte ou du HTML
  • Fusion et séparation du contenu des documents PDF
  • Conversion de webforms ASP.NET en PDFs imprimables
  • Impression de fichiers PDF sans logiciel Adobe Acrobat

IronPDF est disponible sur presque tous les systèmes d'exploitation et frameworks compatibles avec C#, y compris les suivants :

  • .NET Core 2.1, 3.0, 3.1, .NET 6 & 5
  • Conformité .NET Standard 2.0 pour une compatibilité universelle
  • Azure, AWS, Docker, Linux, Windows

La suite de l'article se déroule comme suit :

  1. Installation d'IronPDF
  2. Installation d'Apitron PDF Kit
  3. Créer un document PDF
  4. Créer un en-tête et un pied de page dans un PDF
  5. Signer numériquement un PDF
  6. Tarification et licences
  7. Conclusion

1. Installation d'IronPDF

Il y a quatre méthodes pour télécharger et installer la bibliothèque IronPDF. Les voici :

  1. Utiliser le gestionnaire de packages NuGet
  2. L'invite de commandes du développeur
  3. Télécharger le package NuGet directement
  4. Télécharger la bibliothèque DLL IronPDF

1.1. Utiliser le gestionnaire de packages NuGet

Pour installer IronPDF, faites un clic droit sur votre projet dans l'Explorateur de solutions. Cela ouvrira le gestionnaire de packages NuGet.

class="content-img-align-center"> Une comparaison d'IronPDF avec Apitron PDF SDK .NET - Figure 1 : Accès au gestionnaire de packages NuGet à l'aide de l'Explorateur de solutions

class="content__image-caption">Accès au gestionnaire de packages NuGet à l'aide de l'Explorateur de solutions

Une fois sélectionné, parcourez le package IronPDF et installez-le, comme montré sur la capture d'écran ci-dessous.

class="content-img-align-center"> Une comparaison d'IronPDF avec Apitron PDF SDK .NET - Figure 2 : Installation de la bibliothèque IronPDF à l'aide du gestionnaire de packages NuGet

class="content__image-caption">Installation de la bibliothèque IronPDF à l'aide du gestionnaire de packages NuGet

1.2. Utiliser l'invite de commandes du développeur

Vous pouvez également installer IronPDF via l'invite de commandes du développeur.

  • Ouvrez l'invite de commandes du développeur --- généralement trouvée dans le dossier Visual Studio
  • Tapez la commande suivante :
Install-Package IronPdf
  • Appuyez sur Entrée
  • Cela téléchargera et installera le package
  • Rechargez votre projet et commencez à l'utiliser

1.3. Télécharger le package NuGet directement

IronPDF peut également être installé en visitant directement le site du package NuGet IronPDF et en téléchargeant le package. Les étapes sont :

  • Allez sur package NuGet IronPDF
  • Sélectionnez Télécharger le package
  • Double-cliquez sur le package téléchargé
  • Le package sera installé
  • Rechargez votre projet Visual Studio et commencez à l'utiliser

IronPDF est téléchargé et prêt à l'emploi. Cependant, avant cela, nous devrions installer la bibliothèque Apitron PDF.

2. Installation d'Apitron PDF Kit

Pour les applications .NET Core, nous pouvons installer Apitron en utilisant le gestionnaire de packages NuGet, ou nous pouvons télécharger et installer Apitron directement depuis le site Apitron PDF Kit NuGet.

  • Ouvrez les packages NuGet dans Visual Studio comme nous l'avons fait pour IronPDF.
  • Recherchez Apitron.PDF.Kit.
  • Cliquez sur installer dans votre projet actuel.
class="content-img-align-center"> Une comparaison d'IronPDF avec Apitron PDF SDK .NET - Figure 3 : Recherche Apitron PDF Kit

class="content__image-caption">Recherche Apitron PDF Kit

Vous pouvez également utiliser la console du gestionnaire de packages NuGet pour installer Apitron. Suivez l'étape "Utiliser l'invite de commandes du développeur" comme mentionné dans IronPDF et tapez la commande suivante :

Install-Package Apitron.PDF.Kit

Appuyez sur ENTREE. Cela téléchargera et installera Apitron.PDF.Kit.

Ajoutez les espaces de noms suivants :

using Apitron.PDF.Kit;
using Apitron.PDF.Kit.FixedLayout.Resources;
using Apitron.PDF.Kit.FixedLayout.Resources.Fonts;
using Apitron.PDF.Kit.FlowLayout.Content;
using Apitron.PDF.Kit.Styles;
using Apitron.PDF.Kit.Styles.Appearance;
using Font = Apitron.PDF.Kit.Styles.Text.Font;
using Apitron.PDF.Kit;
using Apitron.PDF.Kit.FixedLayout.Resources;
using Apitron.PDF.Kit.FixedLayout.Resources.Fonts;
using Apitron.PDF.Kit.FlowLayout.Content;
using Apitron.PDF.Kit.Styles;
using Apitron.PDF.Kit.Styles.Appearance;
using Font = Apitron.PDF.Kit.Styles.Text.Font;
Imports Apitron.PDF.Kit
Imports Apitron.PDF.Kit.FixedLayout.Resources
Imports Apitron.PDF.Kit.FixedLayout.Resources.Fonts
Imports Apitron.PDF.Kit.FlowLayout.Content
Imports Apitron.PDF.Kit.Styles
Imports Apitron.PDF.Kit.Styles.Appearance
Imports Font = Apitron.PDF.Kit.Styles.Text.Font
$vbLabelText   $csharpLabel

Passons maintenant à la comparaison entre IronPDF et Apitron PDF.

3. Créer un document PDF

3.1. Utilisation d'IronPDF

IronPDF dispose de plusieurs méthodes pour créer des PDFs. Examinons deux importantes.

URL existante vers PDF

IronPDF facilite la conversion de n'importe quelle URL en PDF. Le code suivant aide à convertir une URL en PDF.

var Renderer = new IronPdf.ChromePdfRenderer();
// Render a PDF from an existing URL
using var Pdf = Renderer.RenderUrlAsPdf("https://ironpdf.com/");
// Save the PDF to a file
Pdf.SaveAs("url.pdf");
var Renderer = new IronPdf.ChromePdfRenderer();
// Render a PDF from an existing URL
using var Pdf = Renderer.RenderUrlAsPdf("https://ironpdf.com/");
// Save the PDF to a file
Pdf.SaveAs("url.pdf");
Dim Renderer = New IronPdf.ChromePdfRenderer()
' Render a PDF from an existing URL
Dim Pdf = Renderer.RenderUrlAsPdf("https://ironpdf.com/")
' Save the PDF to a file
Pdf.SaveAs("url.pdf")
$vbLabelText   $csharpLabel

Chaîne d'entrée HTML vers PDF

Le code ci-dessous explique comment rendre un document PDF à partir d'une chaîne HTML. Vous pouvez utiliser uniquement du HTML, ou le combiner avec du CSS, des images et du JavaScript.

var Renderer = new IronPdf.ChromePdfRenderer();
// Render a PDF from a simple HTML string
using var PDF = Renderer.RenderHtmlAsPdf("<h1>Html with CSS and Images</h1>");
PDF.SaveAs("pixel-perfect.pdf");

// Load external HTML assets like images, CSS, and JavaScript
// Set the optional BasePath as the file location to load assets from
using var AdvancedPDF = Renderer.RenderHtmlAsPdf("<img src='logo.png'><h1>Sample Text</h1>", @"C:\site\assets\");
AdvancedPDF.SaveAs("html-with-assets.pdf");
var Renderer = new IronPdf.ChromePdfRenderer();
// Render a PDF from a simple HTML string
using var PDF = Renderer.RenderHtmlAsPdf("<h1>Html with CSS and Images</h1>");
PDF.SaveAs("pixel-perfect.pdf");

// Load external HTML assets like images, CSS, and JavaScript
// Set the optional BasePath as the file location to load assets from
using var AdvancedPDF = Renderer.RenderHtmlAsPdf("<img src='logo.png'><h1>Sample Text</h1>", @"C:\site\assets\");
AdvancedPDF.SaveAs("html-with-assets.pdf");
Dim Renderer = New IronPdf.ChromePdfRenderer()
' Render a PDF from a simple HTML string
Dim PDF = Renderer.RenderHtmlAsPdf("<h1>Html with CSS and Images</h1>")
PDF.SaveAs("pixel-perfect.pdf")

' Load external HTML assets like images, CSS, and JavaScript
' Set the optional BasePath as the file location to load assets from
Dim AdvancedPDF = Renderer.RenderHtmlAsPdf("<img src='logo.png'><h1>Sample Text</h1>", "C:\site\assets\")
AdvancedPDF.SaveAs("html-with-assets.pdf")
$vbLabelText   $csharpLabel

Le résultat est le suivant :

class="content-img-align-center"> Une comparaison d'IronPDF avec Apitron PDF SDK .NET - Figure 4 : IronPDF Générer PDF à partir de l'URL et de la chaîne HTML CSS

class="content__image-caption">IronPDF Générer PDF à partir de l'URL et de la chaîne HTML CSS

3.2. Utilisation d'Apitron PDF Kit

Apitron PDF ne fournit pas la fonctionnalité de convertir une URL ou HTML en PDF. Il permet de convertir le PDF en HTML. Cependant, il convertit également un fichier XML en PDF. Le fichier XML utilisé est :

<?xml version="1.0" encoding="utf-8"?>
<FlowDocument xmlns="Apitron.PDF.Kit.FlowLayout.v1">
  <Resources>
    <Image resourceId="logo" fileName="../../images/logo.png" />
  </Resources>
  <Styles>
    <Style selector="flowdocument">
      <Color value="Black" />
    </Style>
    <Style selector="grid">
      <InnerBorder thickness="1" />
      <InnerBorderColor value="Black" />
    </Style>
  </Styles>
  <Elements>
    <Image>
      <Properties>
        <Class value="logo" />
        <ResourceId value="logo" />
      </Properties>
    </Image>
    <TextBlock>
      <Properties>
        <Class value="header" />
        <Text value="Sample Interview Questions for Candidates" />
      </Properties>
    </TextBlock>
    <Br />
    <TextBlock>
      <Properties>
        <Class value="headerNote" />
        <Text value="To help facilitate the interview process, the Human Resources Department has compiled a list of questions that might be used during the phone and/or on-campus interviews. Some of the questions deal with the same content, but are phrased differently while other questions may not pertain to a specific discipline; however all of the questions are unbiased and appropriate to ask. We hope you'll find this helpful." />
      </Properties>
    </TextBlock>
  </Elements>
  <Properties>
    <Margin value="30,20,30,20" />
  </Properties>
</FlowDocument>
<?xml version="1.0" encoding="utf-8"?>
<FlowDocument xmlns="Apitron.PDF.Kit.FlowLayout.v1">
  <Resources>
    <Image resourceId="logo" fileName="../../images/logo.png" />
  </Resources>
  <Styles>
    <Style selector="flowdocument">
      <Color value="Black" />
    </Style>
    <Style selector="grid">
      <InnerBorder thickness="1" />
      <InnerBorderColor value="Black" />
    </Style>
  </Styles>
  <Elements>
    <Image>
      <Properties>
        <Class value="logo" />
        <ResourceId value="logo" />
      </Properties>
    </Image>
    <TextBlock>
      <Properties>
        <Class value="header" />
        <Text value="Sample Interview Questions for Candidates" />
      </Properties>
    </TextBlock>
    <Br />
    <TextBlock>
      <Properties>
        <Class value="headerNote" />
        <Text value="To help facilitate the interview process, the Human Resources Department has compiled a list of questions that might be used during the phone and/or on-campus interviews. Some of the questions deal with the same content, but are phrased differently while other questions may not pertain to a specific discipline; however all of the questions are unbiased and appropriate to ask. We hope you'll find this helpful." />
      </Properties>
    </TextBlock>
  </Elements>
  <Properties>
    <Margin value="30,20,30,20" />
  </Properties>
</FlowDocument>
XML

Le code pour convertir ce modèle XML en PDF est le suivant :

// Use Apitron's FlowDocument to convert XML to PDF
using (Stream stream = File.OpenRead("C:\\PLACE YOUR EXACT PATH HERE\\template.xml"), 
               outputStream = File.Create("fromTemplate.pdf"))
{
    ResourceManager resourceManager = new ResourceManager();
    FlowDocument doc = FlowDocument.LoadFromXml(stream, resourceManager);

    doc.Write(outputStream, resourceManager);
}
// Use Apitron's FlowDocument to convert XML to PDF
using (Stream stream = File.OpenRead("C:\\PLACE YOUR EXACT PATH HERE\\template.xml"), 
               outputStream = File.Create("fromTemplate.pdf"))
{
    ResourceManager resourceManager = new ResourceManager();
    FlowDocument doc = FlowDocument.LoadFromXml(stream, resourceManager);

    doc.Write(outputStream, resourceManager);
}
' Use Apitron's FlowDocument to convert XML to PDF
Using stream As Stream = File.OpenRead("C:\PLACE YOUR EXACT PATH HERE\template.xml"), outputStream As Stream = File.Create("fromTemplate.pdf")
	Dim resourceManager As New ResourceManager()
	Dim doc As FlowDocument = FlowDocument.LoadFromXml(stream, resourceManager)

	doc.Write(outputStream, resourceManager)
End Using
$vbLabelText   $csharpLabel

Le résultat est le suivant :

class="content-img-align-center"> Une comparaison d'IronPDF avec Apitron PDF SDK .NET - Figure 5 : Document PDF Apitron

class="content__image-caption">Document PDF Apitron

Si nous comparons le résultat d'IronPDF et d'Apitron, nous pouvons clairement voir qu'IronPDF crée des documents magnifiques en utilisant le rendu HTML sans même redimensionner la taille de l'image. Par contre, Apitron donne un résultat similaire à IronPDF mais uniquement si le fichier XML a des styles enregistrés.

4. Ajouter des en-têtes et des pieds de page aux documents PDF

4.1. Utilisation d'IronPDF

Ajouter des en-têtes et pieds de page est assez facile avec IronPDF. IronPDF vous permet d'ajouter des numéros de page et des sauts de page, d'attacher une page de couverture, une marge, etc.

Le code pour ajouter des en-têtes et des pieds de page est ci-dessous :

var Renderer = new ChromePdfRenderer();

// Add a header
Renderer.RenderingOptions.FirstPageNumber = 1; // Use 2 if a cover page will be appended
Renderer.RenderingOptions.TextHeader.DrawDividerLine = true;
Renderer.RenderingOptions.TextHeader.CenterText = "This is the header text";
Renderer.RenderingOptions.TextHeader.Font = IronPdf.Font.FontTypes.Helvetica;
Renderer.RenderingOptions.TextHeader.FontSize = 12;
Renderer.RenderingOptions.MarginTop = 25; // Create 25mm space for header

// Add a footer too
Renderer.RenderingOptions.TextFooter.DrawDividerLine = true;
Renderer.RenderingOptions.TextFooter.Font = IronPdf.Font.FontTypes.Arial;
Renderer.RenderingOptions.TextFooter.FontSize = 12;
Renderer.RenderingOptions.TextFooter.LeftText = "{date} {time}";
Renderer.RenderingOptions.TextFooter.RightText = "{page} of {total-pages}";
Renderer.RenderingOptions.MarginTop = 25; // Create 25mm space for footer

using var AdvancedPDF = Renderer.RenderHtmlAsPdf("<img src='logo.png'><h1>This is header and footer generated pdf file</h1>", @"C:\site\assets\");
AdvancedPDF.SaveAs("html-with-assets.pdf");
var Renderer = new ChromePdfRenderer();

// Add a header
Renderer.RenderingOptions.FirstPageNumber = 1; // Use 2 if a cover page will be appended
Renderer.RenderingOptions.TextHeader.DrawDividerLine = true;
Renderer.RenderingOptions.TextHeader.CenterText = "This is the header text";
Renderer.RenderingOptions.TextHeader.Font = IronPdf.Font.FontTypes.Helvetica;
Renderer.RenderingOptions.TextHeader.FontSize = 12;
Renderer.RenderingOptions.MarginTop = 25; // Create 25mm space for header

// Add a footer too
Renderer.RenderingOptions.TextFooter.DrawDividerLine = true;
Renderer.RenderingOptions.TextFooter.Font = IronPdf.Font.FontTypes.Arial;
Renderer.RenderingOptions.TextFooter.FontSize = 12;
Renderer.RenderingOptions.TextFooter.LeftText = "{date} {time}";
Renderer.RenderingOptions.TextFooter.RightText = "{page} of {total-pages}";
Renderer.RenderingOptions.MarginTop = 25; // Create 25mm space for footer

using var AdvancedPDF = Renderer.RenderHtmlAsPdf("<img src='logo.png'><h1>This is header and footer generated pdf file</h1>", @"C:\site\assets\");
AdvancedPDF.SaveAs("html-with-assets.pdf");
Dim Renderer = New ChromePdfRenderer()

' Add a header
Renderer.RenderingOptions.FirstPageNumber = 1 ' Use 2 if a cover page will be appended
Renderer.RenderingOptions.TextHeader.DrawDividerLine = True
Renderer.RenderingOptions.TextHeader.CenterText = "This is the header text"
Renderer.RenderingOptions.TextHeader.Font = IronPdf.Font.FontTypes.Helvetica
Renderer.RenderingOptions.TextHeader.FontSize = 12
Renderer.RenderingOptions.MarginTop = 25 ' Create 25mm space for header

' Add a footer too
Renderer.RenderingOptions.TextFooter.DrawDividerLine = True
Renderer.RenderingOptions.TextFooter.Font = IronPdf.Font.FontTypes.Arial
Renderer.RenderingOptions.TextFooter.FontSize = 12
Renderer.RenderingOptions.TextFooter.LeftText = "{date} {time}"
Renderer.RenderingOptions.TextFooter.RightText = "{page} of {total-pages}"
Renderer.RenderingOptions.MarginTop = 25 ' Create 25mm space for footer

Dim AdvancedPDF = Renderer.RenderHtmlAsPdf("<img src='logo.png'><h1>This is header and footer generated pdf file</h1>", "C:\site\assets\")
AdvancedPDF.SaveAs("html-with-assets.pdf")
$vbLabelText   $csharpLabel

Le résultat est le suivant :

class="content-img-align-center"> Une comparaison d'IronPDF avec Apitron PDF SDK .NET - Figure 6 : En-tête et Pied de page IronPDF

class="content__image-caption">En-tête et Pied de page IronPDF

4.2. Utilisation d'Apitron PDF Kit

Apitron PDF Kit crée des PDFs en convertissant le contenu dans un format structurel XML en un PDF. Dans Apitron PDF Kit, les en-têtes et les pieds de page peuvent être ajoutés en utilisant les propriétés PageHeader et PageFooter. Le code pour le faire est le suivant :

// Register document resources first
ResourceManager resourceManager = new ResourceManager();
resourceManager.RegisterResource(new Apitron.PDF.Kit.FixedLayout.Resources.XObjects.Image("logo", "../../data/logo.png"));

// Create the document
FlowDocument doc = new FlowDocument() { Margin = new Thickness(10) };

// Register styles
doc.StyleManager.RegisterStyle(".pageHeader", new Style() { Font = new Font(StandardFonts.TimesBold, 20) });
doc.StyleManager.RegisterStyle(".pageFooter", new Style() { Align = Align.Right });
doc.StyleManager.RegisterStyle("hr", new Style() { Height = 2, Margin = new Thickness(0, 5, 0, 5) });
doc.StyleManager.RegisterStyle(".content", new Style() { Align = Align.Left, Display = Display.InlineBlock });

// Fill the header section
doc.PageHeader.Class = "pageHeader";
doc.PageHeader.Add(new Image("logo") { Width = 100, Height = 50 });
doc.PageHeader.Add(new TextBlock("This document is intended for internal use only") { TextIndent = 20 });
doc.PageHeader.Add(new Hr());

// Fill the footer section
doc.PageFooter.Class = "pageFooter";
doc.PageFooter.Add(new Hr());
doc.PageFooter.Add(new TextBlock((ctx) => string.Format("Page {0} from&nbsp;", ctx.CurrentPage + 1)));
doc.PageFooter.Add(new PageCount(3) { Display = Display.Inline });

// Add pages
for (int i = 0; i < 2; ++i)
{
    doc.Add(new TextBlock("This is header and footer generation pdf file.") { Class = "content" });
    doc.Add(new PageBreak());
}

// Generate PDF
using (Stream stream = File.Create("out.pdf"))
{
    doc.Write(stream, resourceManager);
}

Process.Start("out.pdf");
// Register document resources first
ResourceManager resourceManager = new ResourceManager();
resourceManager.RegisterResource(new Apitron.PDF.Kit.FixedLayout.Resources.XObjects.Image("logo", "../../data/logo.png"));

// Create the document
FlowDocument doc = new FlowDocument() { Margin = new Thickness(10) };

// Register styles
doc.StyleManager.RegisterStyle(".pageHeader", new Style() { Font = new Font(StandardFonts.TimesBold, 20) });
doc.StyleManager.RegisterStyle(".pageFooter", new Style() { Align = Align.Right });
doc.StyleManager.RegisterStyle("hr", new Style() { Height = 2, Margin = new Thickness(0, 5, 0, 5) });
doc.StyleManager.RegisterStyle(".content", new Style() { Align = Align.Left, Display = Display.InlineBlock });

// Fill the header section
doc.PageHeader.Class = "pageHeader";
doc.PageHeader.Add(new Image("logo") { Width = 100, Height = 50 });
doc.PageHeader.Add(new TextBlock("This document is intended for internal use only") { TextIndent = 20 });
doc.PageHeader.Add(new Hr());

// Fill the footer section
doc.PageFooter.Class = "pageFooter";
doc.PageFooter.Add(new Hr());
doc.PageFooter.Add(new TextBlock((ctx) => string.Format("Page {0} from&nbsp;", ctx.CurrentPage + 1)));
doc.PageFooter.Add(new PageCount(3) { Display = Display.Inline });

// Add pages
for (int i = 0; i < 2; ++i)
{
    doc.Add(new TextBlock("This is header and footer generation pdf file.") { Class = "content" });
    doc.Add(new PageBreak());
}

// Generate PDF
using (Stream stream = File.Create("out.pdf"))
{
    doc.Write(stream, resourceManager);
}

Process.Start("out.pdf");
' Register document resources first
Dim resourceManager As New ResourceManager()
resourceManager.RegisterResource(New Apitron.PDF.Kit.FixedLayout.Resources.XObjects.Image("logo", "../../data/logo.png"))

' Create the document
Dim doc As New FlowDocument() With {.Margin = New Thickness(10)}

' Register styles
doc.StyleManager.RegisterStyle(".pageHeader", New Style() With {.Font = New Font(StandardFonts.TimesBold, 20)})
doc.StyleManager.RegisterStyle(".pageFooter", New Style() With {.Align = Align.Right})
doc.StyleManager.RegisterStyle("hr", New Style() With {
	.Height = 2,
	.Margin = New Thickness(0, 5, 0, 5)
})
doc.StyleManager.RegisterStyle(".content", New Style() With {
	.Align = Align.Left,
	.Display = Display.InlineBlock
})

' Fill the header section
doc.PageHeader.Class = "pageHeader"
doc.PageHeader.Add(New Image("logo") With {
	.Width = 100,
	.Height = 50
})
doc.PageHeader.Add(New TextBlock("This document is intended for internal use only") With {.TextIndent = 20})
doc.PageHeader.Add(New Hr())

' Fill the footer section
doc.PageFooter.Class = "pageFooter"
doc.PageFooter.Add(New Hr())
doc.PageFooter.Add(New TextBlock(Function(ctx) String.Format("Page {0} from&nbsp;", ctx.CurrentPage + 1)))
doc.PageFooter.Add(New PageCount(3) With {.Display = Display.Inline})

' Add pages
For i As Integer = 0 To 1
	doc.Add(New TextBlock("This is header and footer generation pdf file.") With {.Class = "content"})
	doc.Add(New PageBreak())
Next i

' Generate PDF
Using stream As Stream = File.Create("out.pdf")
	doc.Write(stream, resourceManager)
End Using

Process.Start("out.pdf")
$vbLabelText   $csharpLabel

Le résultat est le suivant :

class="content-img-align-center"> Une comparaison d'IronPDF avec Apitron PDF SDK .NET - Figure 7 : En-tête et Pied de page Apitron

class="content__image-caption">En-tête et Pied de page Apitron

5. Signer numériquement un PDF

5.1. Utilisation d'IronPDF

L'une des fonctionnalités les plus importantes du traitement PDF est la capacité de signer numériquement un document PDF. IronPDF fournit tous les outils nécessaires pour cela.

using IronPdf;

// Cryptographically sign an existing PDF in 1 line of code!
new IronPdf.Signing.PdfSignature("Iron.p12", "123456").SignPdfFile("any.pdf");

/***** Advanced example for more control *****/

// 1. Create a PDF
var Renderer = new IronPdf.ChromePdfRenderer();
var doc = Renderer.RenderHtmlAsPdf("<h1>Testing 2048 bit digital security</h1>");

// 2. Create a Signature.
// You may create a .pfx or .p12 PDF signing certificate using Adobe Acrobat Reader.

var signature = new IronPdf.Signing.PdfSignature("Iron.pfx", "123456");

// 3. Handwritten signature graphic
signature.LoadSignatureImageFromFile("handwriting.png");

// 4. Sign the PDF with the PdfSignature. Multiple signing certificates may be used
doc.SignPdfWithDigitalSignature(signature);

// 5. The PDF is not signed until saved to file, stream or byte array.
doc.SaveAs("signed.pdf");
using IronPdf;

// Cryptographically sign an existing PDF in 1 line of code!
new IronPdf.Signing.PdfSignature("Iron.p12", "123456").SignPdfFile("any.pdf");

/***** Advanced example for more control *****/

// 1. Create a PDF
var Renderer = new IronPdf.ChromePdfRenderer();
var doc = Renderer.RenderHtmlAsPdf("<h1>Testing 2048 bit digital security</h1>");

// 2. Create a Signature.
// You may create a .pfx or .p12 PDF signing certificate using Adobe Acrobat Reader.

var signature = new IronPdf.Signing.PdfSignature("Iron.pfx", "123456");

// 3. Handwritten signature graphic
signature.LoadSignatureImageFromFile("handwriting.png");

// 4. Sign the PDF with the PdfSignature. Multiple signing certificates may be used
doc.SignPdfWithDigitalSignature(signature);

// 5. The PDF is not signed until saved to file, stream or byte array.
doc.SaveAs("signed.pdf");
Imports IronPdf

' Cryptographically sign an existing PDF in 1 line of code!
Call (New IronPdf.Signing.PdfSignature("Iron.p12", "123456")).SignPdfFile("any.pdf")

'''*** Advanced example for more control ****

' 1. Create a PDF
Dim Renderer = New IronPdf.ChromePdfRenderer()
Dim doc = Renderer.RenderHtmlAsPdf("<h1>Testing 2048 bit digital security</h1>")

' 2. Create a Signature.
' You may create a .pfx or .p12 PDF signing certificate using Adobe Acrobat Reader.

Dim signature = New IronPdf.Signing.PdfSignature("Iron.pfx", "123456")

' 3. Handwritten signature graphic
signature.LoadSignatureImageFromFile("handwriting.png")

' 4. Sign the PDF with the PdfSignature. Multiple signing certificates may be used
doc.SignPdfWithDigitalSignature(signature)

' 5. The PDF is not signed until saved to file, stream or byte array.
doc.SaveAs("signed.pdf")
$vbLabelText   $csharpLabel

5.2 Utilisation d'Apitron PDF Kit

Apposer une signature à un PDF en utilisant Apitron PDF Kit est à la fois un processus long et technique.

static void Main(string[] args)
{
    string fileName = "signedTwice.pdf";

    using (Stream stream = File.Create(fileName))
    {
        FlowDocument doc = new FlowDocument() { Margin = new Thickness(10) };
        doc.Add(new TextBlock("Signed using Apitron PDF Kit for .NET"));
        doc.Write(stream, new ResourceManager());
    }

    // Save
    Sign(fileName, "../../data/certs/JohnDoe.pfx", "password", "../../data/images/signatureImage.png", new Boundary(10, 750, 110, 800));
}

// Implementation of Sign Method
private static void Sign(string pathToDocument, string pathToCertificate, string password, string pathToSignatureImage, Boundary signatureViewLocation)
{
    // Open existing document and sign once
    using (Stream inputStream = new FileStream(pathToDocument, FileMode.Open, FileAccess.ReadWrite))
    {
        using (FixedDocument doc = new FixedDocument(inputStream))
        {
            string imageResourceId = Guid.NewGuid().ToString("N");
            string signatureFieldId = Guid.NewGuid().ToString("N");

            // Register signature image resource
            doc.ResourceManager.RegisterResource(new Image(imageResourceId, pathToSignatureImage));

            // Create first signature field and initialize it using a stored certificate
            SignatureField signatureField = new SignatureField(signatureFieldId);
            using (Stream signatureDataStream = File.OpenRead(pathToCertificate))
            {
                signatureField.Signature = Signature.Create(new Pkcs12Store(signatureDataStream, password));
            }

            // Add signature fields to the document
            doc.AcroForm.Fields.Add(signatureField);

            // Create first signature view using the image resource
            SignatureFieldView signatureView = new SignatureFieldView(signatureField, signatureViewLocation);
            signatureView.ViewSettings.Graphic = Graphic.Image;
            signatureView.ViewSettings.GraphicResourceID = imageResourceId;
            signatureView.ViewSettings.Description = Description.None;

            // Add views to page annotations collection
            doc.Pages[0].Annotations.Add(signatureView);

            // Save as incremental update
            doc.Save();
        }
    }
}
static void Main(string[] args)
{
    string fileName = "signedTwice.pdf";

    using (Stream stream = File.Create(fileName))
    {
        FlowDocument doc = new FlowDocument() { Margin = new Thickness(10) };
        doc.Add(new TextBlock("Signed using Apitron PDF Kit for .NET"));
        doc.Write(stream, new ResourceManager());
    }

    // Save
    Sign(fileName, "../../data/certs/JohnDoe.pfx", "password", "../../data/images/signatureImage.png", new Boundary(10, 750, 110, 800));
}

// Implementation of Sign Method
private static void Sign(string pathToDocument, string pathToCertificate, string password, string pathToSignatureImage, Boundary signatureViewLocation)
{
    // Open existing document and sign once
    using (Stream inputStream = new FileStream(pathToDocument, FileMode.Open, FileAccess.ReadWrite))
    {
        using (FixedDocument doc = new FixedDocument(inputStream))
        {
            string imageResourceId = Guid.NewGuid().ToString("N");
            string signatureFieldId = Guid.NewGuid().ToString("N");

            // Register signature image resource
            doc.ResourceManager.RegisterResource(new Image(imageResourceId, pathToSignatureImage));

            // Create first signature field and initialize it using a stored certificate
            SignatureField signatureField = new SignatureField(signatureFieldId);
            using (Stream signatureDataStream = File.OpenRead(pathToCertificate))
            {
                signatureField.Signature = Signature.Create(new Pkcs12Store(signatureDataStream, password));
            }

            // Add signature fields to the document
            doc.AcroForm.Fields.Add(signatureField);

            // Create first signature view using the image resource
            SignatureFieldView signatureView = new SignatureFieldView(signatureField, signatureViewLocation);
            signatureView.ViewSettings.Graphic = Graphic.Image;
            signatureView.ViewSettings.GraphicResourceID = imageResourceId;
            signatureView.ViewSettings.Description = Description.None;

            // Add views to page annotations collection
            doc.Pages[0].Annotations.Add(signatureView);

            // Save as incremental update
            doc.Save();
        }
    }
}
Shared Sub Main(ByVal args() As String)
	Dim fileName As String = "signedTwice.pdf"

	Using stream As Stream = File.Create(fileName)
		Dim doc As New FlowDocument() With {.Margin = New Thickness(10)}
		doc.Add(New TextBlock("Signed using Apitron PDF Kit for .NET"))
		doc.Write(stream, New ResourceManager())
	End Using

	' Save
	Sign(fileName, "../../data/certs/JohnDoe.pfx", "password", "../../data/images/signatureImage.png", New Boundary(10, 750, 110, 800))
End Sub

' Implementation of Sign Method
Private Shared Sub Sign(ByVal pathToDocument As String, ByVal pathToCertificate As String, ByVal password As String, ByVal pathToSignatureImage As String, ByVal signatureViewLocation As Boundary)
	' Open existing document and sign once
	Using inputStream As Stream = New FileStream(pathToDocument, FileMode.Open, FileAccess.ReadWrite)
		Using doc As New FixedDocument(inputStream)
			Dim imageResourceId As String = Guid.NewGuid().ToString("N")
			Dim signatureFieldId As String = Guid.NewGuid().ToString("N")

			' Register signature image resource
			doc.ResourceManager.RegisterResource(New Image(imageResourceId, pathToSignatureImage))

			' Create first signature field and initialize it using a stored certificate
			Dim signatureField As New SignatureField(signatureFieldId)
			Using signatureDataStream As Stream = File.OpenRead(pathToCertificate)
				signatureField.Signature = Signature.Create(New Pkcs12Store(signatureDataStream, password))
			End Using

			' Add signature fields to the document
			doc.AcroForm.Fields.Add(signatureField)

			' Create first signature view using the image resource
			Dim signatureView As New SignatureFieldView(signatureField, signatureViewLocation)
			signatureView.ViewSettings.Graphic = Graphic.Image
			signatureView.ViewSettings.GraphicResourceID = imageResourceId
			signatureView.ViewSettings.Description = Description.None

			' Add views to page annotations collection
			doc.Pages(0).Annotations.Add(signatureView)

			' Save as incremental update
			doc.Save()
		End Using
	End Using
End Sub
$vbLabelText   $csharpLabel

Le résultat est à peu près le même pour les bibliothèques. Vous pouvez clairement voir qu'IronPDF est plus facile et plus pratique pour manipuler le contenu PDF. Le PDF de sortie est signé avec le certificat et la signature imprimée dessus.

Utilisation de Bootstrap 5 avec IronPDF pour des galeries de portfolios

Le moteur de rendu Chrome V8 d'IronPDF prend entièrement en charge les composants moderns de Bootstrap 5, vous permettant de générer des documents PDF visuellement époustouflants avec des galeries de portfolios professionnelles. Cet exemple démontre les mises en page de grille, les effets de survol, les superpositions en dégradé, et les badges de catégories - des fonctionnalités qui seraient difficiles à implémenter avec des bibliothèques PDF traditionnelles comme Apitron PDF SDK.

using IronPdf;

var renderer = new ChromePdfRenderer();

string portfolioGallery = @"
<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8'>
    <link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
    <style>
        .gallery-item {
            position: relative;
            overflow: hidden;
            border-radius: 10px;
            box-shadow: 0 4px 6px rgba(0,0,0,0.1);
        }
        .gallery-item img {
            width: 100%;
            height: 250px;
            object-fit: cover;
            transition: transform 0.3s;
        }
        .gallery-item:hover img {
            transform: scale(1.1);
        }
        .gallery-overlay {
            position: absolute;
            bottom: 0;
            left: 0;
            right: 0;
            background: linear-gradient(to top, rgba(0,0,0,0.8), transparent);
            padding: 20px;
            color: white;
        }
        .category-badge {
            position: absolute;
            top: 10px;
            right: 10px;
        }
        @media print {
            .gallery-item { page-break-inside: avoid; }
        }
    </style>
</head>
<body>
    <div class='container py-5'>
        <div class='text-center mb-5'>
            <h1 class='display-4'>Design Portfolio</h1>
            <p class='lead text-muted'>Showcase of PDF Document Designs</p>
        </div>

        <div class='row mb-4'>
            <div class='col-12'>
                <div class='btn-group' role='group'>
                    <button class='btn btn-primary'>All Projects</button>
                    <button class='btn btn-outline-primary'>Invoices</button>
                    <button class='btn btn-outline-primary'>Reports</button>
                    <button class='btn btn-outline-primary'>Forms</button>
                    <button class='btn btn-outline-primary'>Certificates</button>
                </div>
            </div>
        </div>

        <div class='row g-4'>
            <div class='col-md-4'>
                <div class='gallery-item'>
                    <span class='badge bg-primary category-badge'>Invoice</span>
                    <svg width='100%' height='250' style='background: linear-gradient(135deg, #667eea 0%, #764ba2 100%)'>
                        <text x='50%' y='50%' text-anchor='middle' fill='white' font-size='48' opacity='0.3'>📄</text>
                    </svg>
                    <div class='gallery-overlay'>
                        <h5 class='mb-1'>Professional Invoice Template</h5>
                        <small>Corporate billing with itemized details</small>
                    </div>
                </div>
            </div>

            <div class='col-md-4'>
                <div class='gallery-item'>
                    <span class='badge bg-success category-badge'>Report</span>
                    <svg width='100%' height='250' style='background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%)'>
                        <text x='50%' y='50%' text-anchor='middle' fill='white' font-size='48' opacity='0.3'>📊</text>
                    </svg>
                    <div class='gallery-overlay'>
                        <h5 class='mb-1'>Analytics Dashboard Report</h5>
                        <small>Data visualization and metrics</small>
                    </div>
                </div>
            </div>

            <div class='col-md-4'>
                <div class='gallery-item'>
                    <span class='badge bg-warning category-badge'>Certificate</span>
                    <svg width='100%' height='250' style='background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%)'>
                        <text x='50%' y='50%' text-anchor='middle' fill='white' font-size='48' opacity='0.3'>🏆</text>
                    </svg>
                    <div class='gallery-overlay'>
                        <h5 class='mb-1'>Award Certificate</h5>
                        <small>Professional achievement recognition</small>
                    </div>
                </div>
            </div>

            <div class='col-md-4'>
                <div class='gallery-item'>
                    <span class='badge bg-info category-badge'>Form</span>
                    <svg width='100%' height='250' style='background: linear-gradient(135deg, #fa709a 0%, #fee140 100%)'>
                        <text x='50%' y='50%' text-anchor='middle' fill='white' font-size='48' opacity='0.3'>📝</text>
                    </svg>
                    <div class='gallery-overlay'>
                        <h5 class='mb-1'>Application Form</h5>
                        <small>Multi-page data collection</small>
                    </div>
                </div>
            </div>

            <div class='col-md-4'>
                <div class='gallery-item'>
                    <span class='badge bg-danger category-badge'>Invoice</span>
                    <svg width='100%' height='250' style='background: linear-gradient(135deg, #30cfd0 0%, #330867 100%)'>
                        <text x='50%' y='50%' text-anchor='middle' fill='white' font-size='48' opacity='0.3'>💰</text>
                    </svg>
                    <div class='gallery-overlay'>
                        <h5 class='mb-1'>Payment Receipt</h5>
                        <small>Transaction confirmation document</small>
                    </div>
                </div>
            </div>

            <div class='col-md-4'>
                <div class='gallery-item'>
                    <span class='badge bg-secondary category-badge'>Report</span>
                    <svg width='100%' height='250' style='background: linear-gradient(135deg, #a8edea 0%, #fed6e3 100%)'>
                        <text x='50%' y='50%' text-anchor='middle' fill='white' font-size='48' opacity='0.3'>📈</text>
                    </svg>
                    <div class='gallery-overlay'>
                        <h5 class='mb-1'>Financial Statement</h5>
                        <small>Quarterly performance overview</small>
                    </div>
                </div>
            </div>
        </div>

        <div class='text-center mt-5'>
            <p class='text-muted'>All templates rendered with IronPDF's Chromium engine</p>
            <div class='d-flex justify-content-center gap-2'>
                <span class='badge bg-primary'>Bootstrap 5</span>
                <span class='badge bg-success'>Responsive</span>
                <span class='badge bg-info'>Print-Ready</span>
            </div>
        </div>
    </div>
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(portfolioGallery);
pdf.SaveAs("portfolio-gallery.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

string portfolioGallery = @"
<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8'>
    <link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
    <style>
        .gallery-item {
            position: relative;
            overflow: hidden;
            border-radius: 10px;
            box-shadow: 0 4px 6px rgba(0,0,0,0.1);
        }
        .gallery-item img {
            width: 100%;
            height: 250px;
            object-fit: cover;
            transition: transform 0.3s;
        }
        .gallery-item:hover img {
            transform: scale(1.1);
        }
        .gallery-overlay {
            position: absolute;
            bottom: 0;
            left: 0;
            right: 0;
            background: linear-gradient(to top, rgba(0,0,0,0.8), transparent);
            padding: 20px;
            color: white;
        }
        .category-badge {
            position: absolute;
            top: 10px;
            right: 10px;
        }
        @media print {
            .gallery-item { page-break-inside: avoid; }
        }
    </style>
</head>
<body>
    <div class='container py-5'>
        <div class='text-center mb-5'>
            <h1 class='display-4'>Design Portfolio</h1>
            <p class='lead text-muted'>Showcase of PDF Document Designs</p>
        </div>

        <div class='row mb-4'>
            <div class='col-12'>
                <div class='btn-group' role='group'>
                    <button class='btn btn-primary'>All Projects</button>
                    <button class='btn btn-outline-primary'>Invoices</button>
                    <button class='btn btn-outline-primary'>Reports</button>
                    <button class='btn btn-outline-primary'>Forms</button>
                    <button class='btn btn-outline-primary'>Certificates</button>
                </div>
            </div>
        </div>

        <div class='row g-4'>
            <div class='col-md-4'>
                <div class='gallery-item'>
                    <span class='badge bg-primary category-badge'>Invoice</span>
                    <svg width='100%' height='250' style='background: linear-gradient(135deg, #667eea 0%, #764ba2 100%)'>
                        <text x='50%' y='50%' text-anchor='middle' fill='white' font-size='48' opacity='0.3'>📄</text>
                    </svg>
                    <div class='gallery-overlay'>
                        <h5 class='mb-1'>Professional Invoice Template</h5>
                        <small>Corporate billing with itemized details</small>
                    </div>
                </div>
            </div>

            <div class='col-md-4'>
                <div class='gallery-item'>
                    <span class='badge bg-success category-badge'>Report</span>
                    <svg width='100%' height='250' style='background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%)'>
                        <text x='50%' y='50%' text-anchor='middle' fill='white' font-size='48' opacity='0.3'>📊</text>
                    </svg>
                    <div class='gallery-overlay'>
                        <h5 class='mb-1'>Analytics Dashboard Report</h5>
                        <small>Data visualization and metrics</small>
                    </div>
                </div>
            </div>

            <div class='col-md-4'>
                <div class='gallery-item'>
                    <span class='badge bg-warning category-badge'>Certificate</span>
                    <svg width='100%' height='250' style='background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%)'>
                        <text x='50%' y='50%' text-anchor='middle' fill='white' font-size='48' opacity='0.3'>🏆</text>
                    </svg>
                    <div class='gallery-overlay'>
                        <h5 class='mb-1'>Award Certificate</h5>
                        <small>Professional achievement recognition</small>
                    </div>
                </div>
            </div>

            <div class='col-md-4'>
                <div class='gallery-item'>
                    <span class='badge bg-info category-badge'>Form</span>
                    <svg width='100%' height='250' style='background: linear-gradient(135deg, #fa709a 0%, #fee140 100%)'>
                        <text x='50%' y='50%' text-anchor='middle' fill='white' font-size='48' opacity='0.3'>📝</text>
                    </svg>
                    <div class='gallery-overlay'>
                        <h5 class='mb-1'>Application Form</h5>
                        <small>Multi-page data collection</small>
                    </div>
                </div>
            </div>

            <div class='col-md-4'>
                <div class='gallery-item'>
                    <span class='badge bg-danger category-badge'>Invoice</span>
                    <svg width='100%' height='250' style='background: linear-gradient(135deg, #30cfd0 0%, #330867 100%)'>
                        <text x='50%' y='50%' text-anchor='middle' fill='white' font-size='48' opacity='0.3'>💰</text>
                    </svg>
                    <div class='gallery-overlay'>
                        <h5 class='mb-1'>Payment Receipt</h5>
                        <small>Transaction confirmation document</small>
                    </div>
                </div>
            </div>

            <div class='col-md-4'>
                <div class='gallery-item'>
                    <span class='badge bg-secondary category-badge'>Report</span>
                    <svg width='100%' height='250' style='background: linear-gradient(135deg, #a8edea 0%, #fed6e3 100%)'>
                        <text x='50%' y='50%' text-anchor='middle' fill='white' font-size='48' opacity='0.3'>📈</text>
                    </svg>
                    <div class='gallery-overlay'>
                        <h5 class='mb-1'>Financial Statement</h5>
                        <small>Quarterly performance overview</small>
                    </div>
                </div>
            </div>
        </div>

        <div class='text-center mt-5'>
            <p class='text-muted'>All templates rendered with IronPDF's Chromium engine</p>
            <div class='d-flex justify-content-center gap-2'>
                <span class='badge bg-primary'>Bootstrap 5</span>
                <span class='badge bg-success'>Responsive</span>
                <span class='badge bg-info'>Print-Ready</span>
            </div>
        </div>
    </div>
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(portfolioGallery);
pdf.SaveAs("portfolio-gallery.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Ce code génère un portfolio PDF professionnel avec une mise en page de grille réactive, des badges de catégorie visuels, des superpositions en dégradé, et des effets de survol. Le moteur de rendu Chrome préserve tous les styles Bootstrap, les mises en page CSS Grid, et les propriétés CSS personnalisées - des capacités que les bibliothèques PDF traditionnelles ont du mal à répliquer.

Principaux avantages par rapport à Apitron PDF SDK :

  • Prise en charge native de Bootstrap 5 sans conversion
  • Les mises en page CSS Grid et Flexbox se rendent parfaitement
  • Fonds en dégradé et effets CSS modernes
  • Code plus simple avec une sortie de haute qualité

Pour un guide complet sur la génération de PDF Bootstrap, voir HTML to PDF Bootstrap Guide.

6. Tarification et licences

Tarification et licences d'IronPDF

IronPDF est une bibliothèque C# qui est gratuite à utiliser pour le développement et peut être licenciée pour une utilisation commerciale à tout moment. Les licences de projet pour développeurs individuels, agences et organisations multinationales, ainsi que pour la redistribution SaaS et OEM, sont toutes accessibles. Toutes les licences offrent une garantie de remboursement de 30 jours, un an de support et de mises à jour, une validité pour développement/staging/production, et une licence perpétuelle (achat unique).

Le package Lite est disponible pour $799 sans frais récurrents. Plus de détails et d'aide pour choisir la meilleure licence sont disponibles sur la page de licences de produit IronPDF.

class="content-img-align-center"> Une comparaison d'IronPDF avec Apitron PDF SDK .NET - Figure 8 : Licences IronPDF

class="content__image-caption">Licences IronPDF

Prix et licences Apitron PDF Kit

Il existe actuellement deux régimes de licences en vigueur - Moderne et Hérité. Si vous avez déjà une licence, alors le régime de licence hérité reste actif pour vous jusqu'à l'expiration de votre licence. Ensuite, vous devez contacter le support client pour la transition. Le régime de licence moderne ne s'applique à vous que si vous êtes un nouveau client.

Dans le cadre du régime moderne, il existe trois niveaux de licences :

  • Évaluation - période d'évaluation de trois mois pour utiliser un produit pleinement fonctionnel. Il suffit de télécharger le package à partir de NuGet et de commencer le développement.
  • Communauté - Utilisez des produits entièrement fonctionnels sans frais dans vos projets non commerciaux. Une approbation est requise.
  • Commercial - tout cas d'utilisation non décrit ci-dessus. La tarification dépend du schéma d'utilisation.

Conclusion

La bibliothèque IronPDF crée des PDFs parfaits à partir de types de documents tels que HTML, JS, CSS, JPG, PNG, GIF, et SVG. Le moteur Chromium aide à rendre les fichiers ou les URLs HTML pour donner des PDFs parfaits en sortie.

Apitron vous permet de créer des PDF en utilisant une API de mise en page fixe, mise en œuvre pour être 100% compatible avec les spécifications PDF. En tant que méthode de génération de contenu orientée style similaire à HTML et CSS, cette API de mise en page fixe vous permet de créer en quelques minutes des rapports, factures, catalogues et plus encore. Elle prend également en charge la création de modèles XML.

Les prix des licences Apitron PDF ne sont pas disponibles sur leur site Web. Vous devez contacter le support pour obtenir un devis en fonction de votre utilisation. D'un autre côté, IronPDF a un package de licence très clair affiché sur leur site Web. Cela permet à IronPDF de se démarquer de ses concurrents et permet aux utilisateurs de choisir judicieusement selon leurs besoins.

Avec IronPDF, vous pouvez travailler avec des fichiers PDF plus facilement qu'avec Apitron PDF. IronPDF permet à ses utilisateurs d'écrire moins de lignes de code pour des travaux PDF difficiles. IronPDF offre plusieurs méthodes pour produire des PDFs à partir de plusieurs types de fichiers, tandis qu'Apitron ne peut que convertir des documents XML en documents PDF. Un résultat parfait est obtenu sans ajouter d'options techniques dans IronPDF par rapport à Apitron.

Tous les clients d'Iron Software ont la possibilité d'acheter les cinq produits de la société pour le prix de deux d'entre eux. Essayez la version d'essai gratuite de 30 jours d'IronPDF pour tester sa pleine fonctionnalité. Achetez la suite complète des produits Iron Software sur IronSoftware.com.

Veuillez noterApitron PDF Kit est une marque déposée de son propriétaire respectif. Ce site n'est pas affilié, approuvé par, ou sponsorisé par Apitron PDF Kit. Tous les noms de produits, logos et marques sont la propriété de leurs propriétaires respectifs. Les comparaisons sont à des fins d'information uniquement et reflètent les informations disponibles publiquement au moment de la rédaction.

Questions Fréquemment Posées

Comment pouvez-vous convertir HTML en PDF en C# ?

Vous pouvez utiliser la méthode RenderHtmlAsPdf d'IronPDF pour convertir des chaînes HTML en PDFs. Vous pouvez également convertir des fichiers HTML en PDFs en utilisant RenderHtmlFileAsPdf.

Quelles fonctionnalités offre IronPDF pour la création de PDF ?

IronPDF prend en charge la création de PDF à partir de HTML, CSS et JavaScript, le chargement d'URL, l'extraction de texte et de graphiques, la fusion de PDF, et plus encore. Il est compatible avec .NET Core, Azure, AWS, Docker, Linux et Windows.

Comment pouvez-vous signer numériquement un PDF en C# ?

Avec IronPDF, vous pouvez signer électroniquement des PDFs en utilisant un certificat de signature PDF, qui peut être intégré avec quelques lignes de code.

Quelles sont les options d'installation pour IronPDF ?

IronPDF peut être installé en utilisant le gestionnaire de paquets NuGet, l'invite de commande développeur, ou en téléchargeant directement le paquet NuGet ou la bibliothèque IronPDF .DLL.

Existe-t-il une version gratuite d'IronPDF ?

Oui, IronPDF propose une version de développement gratuite ainsi que des licences commerciales. Des informations détaillées sur les tarifs, y compris une garantie de remboursement de 30 jours, sont disponibles sur leur site web.

Comment Apitron PDF Kit gère-t-il la conversion de HTML en PDF ?

Apitron PDF Kit ne prend pas en charge la conversion directe de HTML en PDF mais peut convertir des fichiers XML en PDF.

Quelles sont les caractéristiques remarquables d'Apitron PDF Kit ?

Apitron PDF Kit permet une manipulation complète des PDF, y compris l'ajout d'images, de dessins, de textes, la signature de documents et la fusion ou la division de PDF. Cependant, il ne prend pas en charge la conversion directe de HTML en PDF.

Comment pouvez-vous ajouter des en-têtes et des pieds de page à un PDF en C# ?

IronPDF vous permet d'ajouter facilement des en-têtes et des pieds de page aux PDF en utilisant des méthodes comme AddTextHeader et AddTextFooter.

Quelles sont les options de licence disponibles pour Apitron PDF Kit ?

Apitron PDF Kit offre une période d'évaluation de trois mois et une licence communautaire pour les projets non commerciaux. Pour un usage commercial, vous devez les contacter directement pour obtenir des devis.

Quelle bibliothèque PDF est plus facile à utiliser pour le développement .NET ?

IronPDF est généralement plus facile à utiliser pour le développement .NET, offrant une API plus simple et nécessitant moins de lignes de code pour des tâches complexes par rapport à Apitron PDF Kit.

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