Une Comparaison entre IronPDF et Apitron PDF Kit
Travailler avec des fichiers PDF en C# peut s'avérer complexe pour les développeurs. De nombreux facteurs sont à prendre en compte lors de la création de contenu pour ces fichiers, et encore plus lors de la conversion de contenu de différents formats vers le format PDF. L'automatisation est désormais cruciale dans les processus de développement logiciel. Ces défis ont été relevés grâce au développement de bibliothèques conçues pour faciliter la lecture, l'écriture, la création et la modification de documents PDF, ainsi que l'édition de leurs attributs et leur conversion à partir d'autres formats.
Cet article de blog compare deux bibliothèques PDF pour .NET et .NET Core:
- La bibliothèque IronPDF
- Le kit PDF Apitron
IronPDF et Apitron PDF Kit sont des bibliothèques qui fournissent des fonctions de manipulation de fichiers 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. Ils permettent également la création de signets. L'étape suivante consiste à déterminer quelle bibliothèque C# PDF .NET est la mieux adaptée à nos projets .NET . Cet article de comparaison vous aidera à décider entre ces deux bibliothèques PDF.
Commençons par explorer ce que proposent les deux bibliothèques, puis passons à la comparaison proprement dite.
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 de différentes manières. 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 Apitron PDF Kit .NET 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 éléments 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 des documents PDF multicouches avec des groupes de contenu optionnels (OCG)
- Ajouter ou supprimer des champs des documents
- 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, et notamment les programmeurs C#, apprécieront la bibliothèque IronPDF .NET . Cet outil vous permet de créer facilement une application de traitement PDF .NET Core .
IronPDF utilise le moteur .NET Chromium pour convertir les pages HTML (sous forme de code ou d'URL) en fichiers PDF. Il n'est pas nécessaire d'utiliser des API complexes pour positionner les objets de navigation ou concevoir des PDF à 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 simplifie également la lecture de 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 la quasi-totalité des systèmes d'exploitation et des frameworks compatibles avec C#, notamment :
- .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 :
- Installation d'IronPDF
- Installation d'Apitron PDF Kit
- Créer un document PDF
- Créer un en-tête et un pied de page dans un PDF
- Signer numériquement un PDF
- Tarification et licences
1. Installation d'IronPDF
Il y a quatre méthodes pour télécharger et installer la bibliothèque IronPDF. Ceux-ci sont :
- Utiliser le gestionnaire de packages NuGet
- L'invite de commandes du développeur
- Télécharger le package NuGet directement
- 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.
Accès au Package Manager 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.
Installation de la bibliothèque IronPDF à l'aide du Package Manager 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, installez Apitron via NuGet ou téléchargez-le directement depuis 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.
Recherche de kit PDF Apitron
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
Examinons deux méthodes importantes. 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
Passons maintenant à la comparaison entre IronPDF et Apitron PDF.
3. Création de documents PDF
3.1. Utilisation d'IronPDF
IronPDF dispose de plusieurs méthodes pour créer des PDFs. Explorons-en 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")
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")
La sortie est la suivante :
IronPDF Generate PDF from URL and HTML CSS String (Générer un PDF à partir d'une URL et d'une chaîne de caractères HTML CSS)
3.2. Utilisation d'Apitron PDF Kit
Apitron PDF ne propose pas de méthode pour convertir une URL ou un fichier HTML en PDF. Il permet de convertir le PDF en HTML. Cependant, il convertit également les fichiers 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>
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
La sortie est la suivante :
Document PDF Apitron
Si l'on compare les résultats d' IronPDF et d'Apitron, on constate clairement IronPDF génère des documents impressionnants grâce au rendu HTML, sans même redimensionner les images. Apitron, quant à lui, offre un résultat similaire à celui IronPDF , mais uniquement si le fichier XML contient des styles définis.
4. Ajouter des en-têtes et des pieds de page aux documents PDF
4.1. Utilisation d'IronPDF
L'ajout d'en-têtes et de pieds de page est simple avec IronPDF. IronPDF vous permet d'ajouter des numéros de page et des sauts de page, d'insérer une page de couverture, des marges, 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")
La sortie est la suivante :
En-tête et pied de page d'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 ", 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 ", 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 ", 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")
La sortie est la suivante :
En-tête et pied de page d'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")
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();
}
}
}
Imports System
Imports System.IO
Imports Apitron.PDF.Rasterizer
Imports Apitron.PDF.Kit.FixedLayout
Imports Apitron.PDF.Kit
Imports Apitron.PDF.Kit.Styles
Imports Apitron.PDF.Kit.Signatures
Imports Apitron.PDF.Kit.Interactive.Annotations
Module Module1
Sub Main(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 Sub Sign(pathToDocument As String, pathToCertificate As String, password As String, pathToSignatureImage As String, 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
End Module
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");
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
Dim portfolioGallery As String = "
<!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>"
Dim pdf = renderer.RenderHtmlAsPdf(portfolioGallery)
pdf.SaveAs("portfolio-gallery.pdf")
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 forfait Lite est disponible pour $999 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.
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.
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 Package Manager 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.



