Test dans un environnement réel
Test en production sans filigrane.
Fonctionne partout où vous en avez besoin.
En C#, travailler avec des fichiers PDF peut être un défi pour les développeurs. De nombreux facteurs doivent être pris en compte lors de la création du contenu de ces fichiers, et plus encore lors de la conversion du contenu de différents formats en PDF. L'automatisation est désormais la clé des processus de développement de logiciels. Ces problèmes ont été résolus grâce à la construction de bibliothèques conçues pour aider à lire, écrire, créer et modifier des documents PDF, ainsi qu'à éditer leurs attributs et à les convertir à partir d'autres formats.
Deux bibliothèques PDF seront comparées pour .NET et .NET Core dans ce billet de blog. Ces deux bibliothèques sont :
Le kit PDF Apitron
IronPDF et Apitron PDF Kit sont deux bibliothèques qui fournissent des fonctions de manipulation de PDF pour .NET et .NET Core. Ils peuvent tous deux être utilisés pour des tâches de conversion et de manipulation de champs de documents. Tous deux peuvent également créer des signets. La question suivante est de savoir quelle bibliothèque C# PDF .NET est la plus adaptée à nos projets .NET. Cet article comparatif vous aidera à choisir entre ces deux bibliothèques PDF.
Voyons d'abord ce que les deux bibliothèques ont à offrir, puis passons à la comparaison proprement dite.
Apitron PDF Kit est un composant .NET qui vous permet de manipuler ou de convertir des fichiers PDF de la manière que vous 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 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 serez en mesure de :
Les développeurs, en particulier les programmeurs C#, adoreront la bibliothèque IronPDF .NET. Avec cet outil étonnant, vous pouvez construire une application de traitement de PDF .NET Core facilement.
IronPDF utilise le moteur Chromium de .NET pour modifier les pages HTML(en code ou sous forme d'URL) vers des fichiers PDF. Il n'est absolument pas nécessaire d'utiliser des API complexes pour positionner des objets de navigation ou pour concevoir des PDF à partir de HTML. Les documents web standard sont pris en charge par IronPDF, y compris HTML, ASPX, JS, CSS et les images.
IronPDF peut être créé à l'aide de HTML5, CSS, JS et d'images. Un PDF peut être facilement modifié, tamponné et complété par des en-têtes et des pieds de page. Il facilite également la lecture des textes PDF et l'extraction des graphiques.
Les principales caractéristiques d'IronPDF sont les suivantes :
Impression de fichiers PDF sans le logiciel Adobe Acrobat
IronPDF est disponible dans presque tous les systèmes d'exploitation et frameworks compatibles avec C#, notamment les suivants :
Azure, AWS, Docker, Linux, Windows
Le reste de l'article se lit comme suit :
Installation d'IronPDF
Installation du kit PDF Apitron
Créer un document PDF
Créer un en-tête et un pied de page dans un PDF
Signer numériquement un PDF
Prix et licences
Il existe quatre méthodes pour télécharger et installer la bibliothèque IronPDF. Il s'agit des éléments suivants :
Utilisation du gestionnaire de paquets NuGet
L'invite de commande du développeur
Télécharger directement le paquet NuGet
Pour installer IronPDF, il suffit de cliquer avec le bouton droit de la souris sur votre projet dans l'explorateur de solutions. Cela ouvrira le gestionnaire de paquets NuGet.
Une fois sélectionné, recherchez le paquet IronPDF et installez-le, comme le montre la capture d'écran ci-dessous.
Vous pouvez également installer IronPDF par l'intermédiaire de l'Invite de commande du développeur.
Install-Package IronPdf
IronPDF peut également être installé en visitant le site web de l'entreprisePaquet NuGet IronPDF vous pouvez consulter directement le site et télécharger le paquet. Les étapes sont les suivantes :
Rechargez votre projet Visual Studio et commencez à l'utiliser
IronPDF est téléchargé et prêt à l'emploi. Cependant, avant cela, nous devons installer la bibliothèque Apitron PDF.
Pour les applications .NET Core, nous pouvons installer Apitron à l'aide du gestionnaire de paquets NuGet, ou nous pouvons télécharger et installer Apitron à partir du site web de l'entrepriseApitron PDF Kit NuGet vous pouvez consulter le site web directement.
Vous pouvez également utiliser la console NuGet Package Manager pour installer Apitron. Suivez l'étape "Utiliser l'invite de commande du développeur" comme indiqué dans IronPDF et tapez la commande suivante :
Install-Package Apitron.PDF.Kit
Appuyez sur ENTER. Il téléchargera et installera Apitron.PDF.Kit.
Ajouter 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.
IronPDF dispose de plusieurs méthodes pour créer des PDF. Examinons deux d'entre elles.
IronPDF permet de convertir facilement n'importe quelle URL en PDF. Le code suivant permet de convertir une URL en PDF.
IronPdf.ChromePdfRenderer Renderer = new IronPdf.ChromePdfRenderer();
using var Pdf = Renderer.RenderUrlAsPdf("https://ironpdf.com/");
Pdf.SaveAs("url.pdf");
IronPdf.ChromePdfRenderer Renderer = new IronPdf.ChromePdfRenderer();
using var Pdf = Renderer.RenderUrlAsPdf("https://ironpdf.com/");
Pdf.SaveAs("url.pdf");
Dim Renderer As New IronPdf.ChromePdfRenderer()
Dim Pdf = Renderer.RenderUrlAsPdf("https://ironpdf.com/")
Pdf.SaveAs("url.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();
using var PDF = Renderer.RenderHtmlAsPdf("<h1>Html with CSS and Images</h1>");
PDF.SaveAs("pixel-perfect.pdf");
// Load external HTML assets: images, CSS and JavaScript.
// An optional BasePath 'C:\site\assets\' is set 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();
using var PDF = Renderer.RenderHtmlAsPdf("<h1>Html with CSS and Images</h1>");
PDF.SaveAs("pixel-perfect.pdf");
// Load external HTML assets: images, CSS and JavaScript.
// An optional BasePath 'C:\site\assets\' is set 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()
Dim PDF = Renderer.RenderHtmlAsPdf("<h1>Html with CSS and Images</h1>")
PDF.SaveAs("pixel-perfect.pdf")
' Load external HTML assets: images, CSS and JavaScript.
' An optional BasePath 'C:\site\assets\' is set 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")
Le résultat est le suivant :
Apitron PDF ne permet pas de convertir une URL ou un HTML en PDF. Il permet de convertir les PDF en HTML. Cependant, il convertit également les fichiers XML en PDF. Le fichier XML utilisé est le suivant :
<?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 :
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);
}
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);
}
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
Le résultat est le suivant :
Si nous comparons les résultats d'IronPDF et d'Apitron, nous pouvons clairement voir qu'IronPDF crée des documents étonnants en utilisant le rendu HTML et sans même redimensionner la taille de l'image. D'autre part, Apitron produit un résultat similaire à celui d'IronPDF, mais uniquement si le fichier XML contient des styles enregistrés.
L'ajout d'en-têtes et de pieds de page est assez facile avec IronPDF. IronPDF vous permet d'ajouter des numéros de page et des sauts de page, de joindre une page de couverture, des marges, etc.
Le code permettant d'ajouter des en-têtes et des pieds de page se trouve 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")
Le résultat est le suivant :
Apitron PDF Kit crée des PDF en convertissant le contenu d'un format de structure XML en PDF. Dans Apitron PDF Fit, 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 ce faire est le suivant :
// register doc's resources first
ResourceManager resourceManager = new ResourceManager();
resourceManager.RegisterResource(new Apitron.PDF.Kit.FixedLayout.Resources.XObjects.Image("logo","../../data/logo.png"));
// create 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 doc's resources first
ResourceManager resourceManager = new ResourceManager();
resourceManager.RegisterResource(new Apitron.PDF.Kit.FixedLayout.Resources.XObjects.Image("logo","../../data/logo.png"));
// create 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 doc's resources first
Dim resourceManager As New ResourceManager()
resourceManager.RegisterResource(New Apitron.PDF.Kit.FixedLayout.Resources.XObjects.Image("logo","../../data/logo.png"))
' create 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")
Le résultat est le suivant :
L'une des fonctions les plus importantes du traitement des PDF est la possibilité de signer numériquement un document PDF. IronPDF fournit tous les outils nécessaires à cet effet.
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")
L'apposition d'une signature sur un PDF à l'aide d'Apitron PDF Kit est un processus à la fois 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
Le résultat est à peu près le même pour les bibliothèques. Vous pouvez clairement constater qu'IronPDF est plus facile et plus pratique pour manipuler le contenu des PDF. Le PDF de sortie est signé avec le certificat et la signature imprimés dessus.
IronPDF est une bibliothèque C# dont l'utilisation est gratuite pour le développement et qui peut faire l'objet d'une licence pour un usage commercial à tout moment. Les licences de projet pour les développeurs individuels, les agences et les organisations multinationales, ainsi que la redistribution SaaS et OEM, sont toutes accessibles. Toutes les licences sont assorties d'une garantie de remboursement de 30 jours, d'un an d'assistance et de mises à jour, d'une validité de développement, de mise en scène et de production, et d'une licence perpétuelle(achat unique).
La version Lite est disponible pour $749 sans frais récurrents. De plus amples informations et une aide au choix de la meilleure licence sont disponibles sur le site web de la Commission européennePage de licence du produit IronPDF.
Deux systèmes de licence sont actuellement utilisés : le système moderne et le système hérité. Si vous disposez déjà d'une licence, le système de licences héritées reste actif pour vous jusqu'à l'expiration de votre licence. Ensuite, vous devez contacter le service clientèle pour la transition. Le régime de licence moderne ne s'applique à vous que si vous êtes un nouveau client.
Le régime moderne prévoit trois niveaux d'autorisation :
Commercial - tout cas d'utilisation non décrit ci-dessus. La tarification dépend du mode d'utilisation.
Pour plus de détails concernant l'achat, vous pouvezcontacter le représentant commercial d'Apitron.
La bibliothèque IronPDF crée des PDF parfaits au pixel près à partir de types de documents tels que HTML, JS, CSS, JPG, PNG, GIF et SVG. Le moteur Chromium aide à rendre les fichiers HTML ou les URL pour produire des PDF parfaits.
Apitron vous permet de créer des PDF en utilisant une API de mise en page fixe, implémentée pour être 100% compatible avec les spécifications PDF. En tant que méthode de génération de contenu axée sur le style, similaire à HTML et CSS, cette API de mise en page fixe vous permet de créer en quelques minutes des rapports, des factures, des catalogues et bien d'autres choses encore. Il prend également en charge la création de modèles XML.
Les prix des licences pour Apitron PDF ne sont pas disponibles sur leur site web. Vous devez contacter le support et obtenir un devis basé sur votre utilisation. D'autre part, IronPDF propose un ensemble de licences très clair sur son site web. Cela permet à IronPDF de se démarquer de ses concurrents et aux utilisateurs de faire un choix judicieux en fonction de 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 propose plusieurs méthodes pour produire des PDF à partir de plusieurs types de fichiers, alors qu'Apitron ne peut convertir que des documents XML en documents PDF. Il est possible d'obtenir un résultat parfait 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 leessai gratuit d'IronPDF pendant 30 jours pour tester l'ensemble de ses fonctionnalités. Acheter la suite complète des produits Iron Softwaresur IronSoftware.com.
9 produits de l'API .NET pour vos documents de bureau