Test dans un environnement réel
Test en production sans filigrane.
Fonctionne partout où vous en avez besoin.
Dans cet article, nous allons examiner de près deux bibliothèques C# populaires utilisées pour travailler avec des fichiers PDF :IronPDF - The .NET PDF Library for C# Developers (en anglais) etReport.NET. Ces outils sont essentiels pour les développeurs qui ont besoin de créer, de modifier ou d'interagir avec des documents PDF par le biais de leurs applications C#. Les deux bibliothèques offrent une série de fonctionnalités conçues pour faciliter la manipulation des PDF et la rendre plus efficace, mais elles le font de manière différente.
IronPDF et Report.NET permettent aux développeurs de générer dynamiquement des documents, de modifier le contenu et d'extraire du texte et des images des PDF. Ils permettent également le traitement des formulaires, l'ajout de signatures numériques et garantissent que les applications peuvent traiter les PDF sur différentes plateformes sans perdre la fidélité du document. Cela signifie que, quel que soit l'appareil ou le système d'exploitation, les PDF s'afficheront et fonctionneront comme prévu.
Tout au long de cette comparaison, nous nous pencherons sur les caractéristiques spécifiques de chaque bibliothèque, sur leur fonctionnement, nous fournirons des extraits de code pour illustrer la manière dont elles peuvent être utilisées et nous discuterons de leurs conditions de licence. Cette comparaison vise à donner aux développeurs une compréhension claire de ce que chaque bibliothèque peut faire, en les aidant à décider laquelle pourrait être la mieux adaptée aux exigences de leur projet. Décortiquons les capacités et les différences entre IronPDF et Report.NET, en nous concentrant sur la simplicité et les aspects pratiques pour les développeurs.
Report.NET est une bibliothèque C# robuste conçue pour aider les développeurs à créer, gérer et manipuler des documents PDF directement dans leurs applications .NET. Cet outil est connu pour son approche simple de la génération et de la manipulation de PDF, permettant la création de documents PDF complexes à partir de zéro ou la modification de documents existants. Ses capacités vont du simple ajout de texte à l'incorporation d'images et de formes, ce qui en fait un choix polyvalent pour les développeurs qui cherchent à mettre en œuvre des fonctionnalités PDF dans leurs projets.
Report.NET brille par sa capacité à créer de nouveaux documents PDF et à modifier des documents existants. Les développeurs peuvent facilement ajouter du texte, des images et des graphiques, ce qui permet de produire des documents détaillés et visuellement attrayants.
Cette bibliothèque permet un contrôle précis du contenu du document, y compris la mise en forme du texte, l'emplacement des images et les éléments graphiques. Ce niveau de contrôle permet de s'assurer que le PDF final ressemble exactement à ce qui était prévu.
En mettant l'accent sur la simplicité, Report.NET simplifie le processus de génération de PDF, le rendant accessible même à ceux qui n'ont pas l'habitude de travailler avec des PDF dans un contexte de programmation.
Report.NET est conçu pour fonctionner de manière transparente sur la plateforme .NET, y compris .NET Core, ce qui garantit que les applications peuvent générer et gérer des PDF quel que soit le système d'exploitation.
La bibliothèque offre des options de personnalisation étendues pour les documents PDF, permettant aux développeurs d'ajuster la mise en page, le style et l'apparence générale pour répondre à leurs besoins spécifiques.
En tant qu'outil open-source, Report.NET bénéficie des contributions de la communauté, ce qui lui permet de rester à jour et de recevoir de nouvelles fonctionnalités au fil du temps. Ce soutien de la communauté signifie également que les développeurs peuvent accéder à une mine de connaissances et de ressources.
IronPDF est une bibliothèque .NET complète conçue pour faciliter la création, la manipulation et le rendu des documents PDF dans les applications .NET. Cet outil se distingue par sa capacité à gérer à la fois la génération de PDF à partir de HTML et l'édition directe de fichiers PDF existants. Il est très utile pour créer des rapports. IronPDF s'intègre également sans problème à SQL Server Reporting Services. Nous pouvons créer un concepteur de rapports pour l'utilisateur final avec IronPDF afin de créer un outil de création de rapports et une visionneuse de rapports.
L'un des principaux atouts d'IronPDF est sa capacité à convertirHTML et CSS dans les documents PDF. Cette fonction est inestimable pour les développeurs qui cherchent à transformer un contenu web dans un format portable tout en préservant la conception et la mise en page d'origine.
IronPDF excelle à fournir aux développeurs des outils pour éditer et manipuler les documents PDF. Il s'agit notamment d'ajouter ou de supprimer des pages, de modifier le texte et deintégration d'images. Nous pouvons également extraire les données des rapports à l'aide d'IronPDF.
La bibliothèque permet de créer et d'éditer desFormulaires PDFpermettant aux utilisateurs d'interagir avec les documents de manière dynamique. Cette fonctionnalité est cruciale pour les applications qui requièrent des données de la part des utilisateurs finaux, telles que les enquêtes ou les formulaires de demande.
Avec IronPDF, la mise en œuvre de mesures de sécurité telles que le cryptage et l'encryptage est un jeu d'enfantprotection par mot de passe est simple. Ces fonctionnalités garantissent que les informations sensibles contenues dans les documents PDF restent protégées contre tout accès non autorisé.
IronPDF permet aux développeurs de rendre les PDF à la fois pour la visualisation à l'écran et pour l'affichageimpression physiquegarantissant une production de haute qualité dans les deux cas. Il est ainsi plus facile de préparer des documents pour toute une série de besoins de présentation ou de distribution.
IronPDF fonctionne sur diverses plates-formes .NET, en adhérant aux normes de code .NET et en facilitant le développement dans divers environnements sans problèmes de compatibilité.
IronPDF est soutenu parune documentation détaillée et un support dédié, aidant les développeurs à naviguer dans les fonctionnalités de la bibliothèque et à les intégrer efficacement dans leurs applications.
IronPDF offre de nombreuses fonctions d'édition avancées. Il s'agit notamment de la capacité àfusionner et scinder PDF, ce qui est particulièrement utile pour organiser de grands volumes d'informations ou pour extraire des sections spécifiques d'un document en vue d'une utilisation séparée.
La bibliothèque permet depersonnalisation des en-têtes et les pieds de page dans les documents PDF. Cette fonctionnalité est essentielle pour ajouter des marques, des numéros de page ou des titres de documents cohérents d'une page à l'autre, ce qui améliore l'aspect professionnel de la production.
La création d'une application console dans l'IDE Visual Studio est un processus simple qui comporte plusieurs étapes.
Commencez par ouvrir Microsoft Visual Studio. Si vous ne l'avez pas installé, vous devrez le télécharger et l'installer à partir du site Web de lasite officiel de Microsoft. Une fois installé, lancez le studio visuel.
Après avoir ouvert Visual Studio, vous serez accueilli par la fenêtre de démarrage. Sélectionnez l'option "Créer un nouveau projet" pour lancer le processus de création d'une nouvelle application console.
Dans la fenêtre "Créer un nouveau projet", plusieurs modèles de projets vous sont proposés. Tapez "console" dans le champ de recherche pour filtrer les options, puis sélectionnez "Console App" dans la liste. Veillez à choisir le modèle qui correspond au langage de programmation que vous souhaitez utiliser, par exemple C#.
Une fois que vous avez sélectionné le modèle d'application de la console, cliquez sur "Suivant" pour passer à l'écran de configuration du projet. Ici, vous devrez fournir quelques détails sur votre projet :
Nom du projet : Donnez à votre projet un nom significatif qui reflète son objectif.
Nom de la solution : Par défaut, ce nom est le même que celui de votre projet, mais vous pouvez le modifier si vous envisagez d'inclure plusieurs projets dans la même solution.
Après avoir rempli toutes les informations nécessaires, cliquez sur le bouton "Créer". Visual Studio va maintenant générer un nouveau projet d'application console basé sur vos spécifications. Ce processus peut prendre quelques instants.
Pour exploiter les capacités d'IronPDF dans votre projet, vous devez d'abord installer la bibliothèque. Il existe plusieurs méthodes pour y parvenir, chacune adaptée à des flux de développement ou à des préférences différents. Vous trouverez ci-dessous trois méthodes courantes pour installer la bibliothèque IronPDF dans votre projet Visual Studio.
L'interface utilisateur du gestionnaire de paquets NuGet dans Visual Studio permet de parcourir, de sélectionner et d'installer des paquets en toute simplicité.
Dans Visual Studio, naviguez jusqu'à votre projet dans l'explorateur de solutions, faites un clic droit dessus et choisissez l'option "Manage NuGet Packages...".
Cliquez sur l'onglet "Parcourir" et tapez "IronPDF" dans le champ de recherche.
Trouvez le paquet IronPDF dans les résultats de la recherche, sélectionnez-le, puis cliquez sur le bouton "Installer". Visual Studio se chargera automatiquement du téléchargement et de l'installation.
Pour ceux qui préfèrent utiliser des outils en ligne de commande, la console NuGet Package Manager est une alternative puissante.
Ouvrez la console : Allez dans le menu "Outils" de Visual Studio, puis naviguez jusqu'à "NuGet Package Manager" > "Package Manager Console".
Install-Package IronPdf
Cette commande demande à NuGet de télécharger et d'installer la dernière version d'IronPDF dans votre projet.
Si vous préférez télécharger manuellement le paquetage ou si vous avez besoin d'une version spécifique d'IronPDF, le site web NuGet est une bonne option.
Visitez le site Web de NuGet : Allez ànuget.org et recherchez "IronPDF".
Télécharger le paquet : A partir de la pagePage IronPDFsélectionnez la version dont vous avez besoin et téléchargez le fichier .nupkg.
Ouvrez votre navigateur web et rendez-vous sur le dépôt GitHub Report.NET à l'adresse https://github.com/ritchiecarroll/Report.NET/tree/master. Cette page contient la version la plus récente duReport.NET ainsi que son code source.
Sur la page du référentiel, localisez le bouton "Code" et cliquez dessus. Dans le menu déroulant, sélectionnez "Télécharger ZIP" pour télécharger l'ensemble du référentiel sous forme de fichier ZIP. Enregistrez ce fichier dans un endroit approprié de votre ordinateur et extrayez-en le contenu.
Après avoir extrait le fichier ZIP, vous trouverez le code source de la bibliothèque Report.NET parmi les fichiers extraits. Pour utiliser Report.NET dans votre projet Visual Studio, procédez comme suit :
Ouvrez votre projet : Lancez Visual Studio et ouvrez le projet auquel vous souhaitez ajouter Report.NET.
Ajouter la bibliothèque manuellement : Il existe plusieurs façons d'inclure la bibliothèque dans votre projet :
IronPDF est doté d'une série de fonctionnalités avancées conçues pour gérer facilement un large éventail de tâches liées aux PDF.
IronPDF peut prendre du contenu HTML, y compris CSS et JavaScript, et le rendre directement dans un document PDF. Cela signifie que les pages web ou les modèles HTML peuvent être convertis en PDF qui ressemblent à ce qu'ils sont dans un navigateur.
IronPDF permet la conversion directe deChaînes HTML vers PDF. Cela signifie que les développeurs peuvent prendre un code HTML stocké dans une variable de type chaîne et utiliser IronPDF pour le convertir en un fichier PDF. Cette fonction est particulièrement utile lorsque le contenu HTML est généré dynamiquement ou modifié par l'application avant la conversion.
using IronPdf;
var Renderer = new IronPdf.HtmlToPdf();
var PDF = Renderer.RenderHtmlAsPdf("<h1>Hello IronPDF</h1>");
PDF.SaveAs("HtmlStringToPdf.pdf");
using IronPdf;
var Renderer = new IronPdf.HtmlToPdf();
var PDF = Renderer.RenderHtmlAsPdf("<h1>Hello IronPDF</h1>");
PDF.SaveAs("HtmlStringToPdf.pdf");
Imports IronPdf
Private Renderer = New IronPdf.HtmlToPdf()
Private PDF = Renderer.RenderHtmlAsPdf("<h1>Hello IronPDF</h1>")
PDF.SaveAs("HtmlStringToPdf.pdf")
De la même manière, IronPDF peut convertir des fichiersTransformer des fichiers HTML en documents PDF. Pour ce faire, le fichier HTML est lu à partir du système de fichiers et IronPDF est utilisé pour créer un document PDF avec le même formatage et la même structure.
using IronPdf;
var Renderer = new ChromePdfRenderer();
var PDF = Renderer.RenderHTMLFileAsPdf("invoice.html");
PDF.SaveAs("HtmlFileToPdf.pdf");
using IronPdf;
var Renderer = new ChromePdfRenderer();
var PDF = Renderer.RenderHTMLFileAsPdf("invoice.html");
PDF.SaveAs("HtmlFileToPdf.pdf");
Imports IronPdf
Private Renderer = New ChromePdfRenderer()
Private PDF = Renderer.RenderHTMLFileAsPdf("invoice.html")
PDF.SaveAs("HtmlFileToPdf.pdf")
IronPDF est également capable de rendre unPDF à partir d'une URL en direct. Les développeurs peuvent ainsi saisir une adresse web, et IronPDF récupère le contenu HTML de l'URL et le restitue sous forme de PDF.
using IronPdf;
var Renderer = new ChromePdfRenderer();
var PDF = Renderer.RenderUrlAsPdf("http://ironpdf.com");
PDF.SaveAs("UrlToPdf.pdf");
using IronPdf;
var Renderer = new ChromePdfRenderer();
var PDF = Renderer.RenderUrlAsPdf("http://ironpdf.com");
PDF.SaveAs("UrlToPdf.pdf");
Imports IronPdf
Private Renderer = New ChromePdfRenderer()
Private PDF = Renderer.RenderUrlAsPdf("http://ironpdf.com")
PDF.SaveAs("UrlToPdf.pdf")
Avec IronPDF, vous pouvezmodifier des documents PDF existants. Il s'agit notamment d'ajouter du texte, des images et des pages ou de supprimer des pages du document. Vous pouvez égalementrechercher et remplacer du texte du document PDF.
using IronPdf;
var document = PdfDocument.FromFile("original_document.pdf");
const int targetPageIndex = 1;
const string oldString = "Hello, World!";
const string newString = "Greetings, Universe!";
document.ReplaceTextOnPage(targetPageIndex, oldString, newString);
document.SaveAs("modified_document.pdf");
using IronPdf;
var document = PdfDocument.FromFile("original_document.pdf");
const int targetPageIndex = 1;
const string oldString = "Hello, World!";
const string newString = "Greetings, Universe!";
document.ReplaceTextOnPage(targetPageIndex, oldString, newString);
document.SaveAs("modified_document.pdf");
Imports IronPdf
Private document = PdfDocument.FromFile("original_document.pdf")
Private Const targetPageIndex As Integer = 1
Private Const oldString As String = "Hello, World!"
Private Const newString As String = "Greetings, Universe!"
document.ReplaceTextOnPage(targetPageIndex, oldString, newString)
document.SaveAs("modified_document.pdf")
Cette bibliothèque peutextraire du texte et des images à partir de fichiers PDF, à l'instar de Crystal Reports, que vous pouvez utiliser pour l'indexation, la recherche ou la réaffectation de contenu.
IronPDF prend en charge la création deFormulaires PDF. Les développeurs peuvent créer par programme des formulaires dans un PDF et les utilisateurs peuvent les remplir.
using IronPdf;
using System;
const string alternativeHtmlContent = @"
<html>
<body>
<h2>Alternative PDF Form</h2>
<form>
Name: <br>
Age: <br>
<br>
<p>Select country:</p>
<select name='country'>
<option value='USA'>USA</option>
<option value='UK'>UK</option>
<option value='Canada'>Canada</option>
</select>
<br>
<p>Select interests:</p>
<label for='interest1'> Interest 1</label><br>
<label for='interest2'> Interest 2</label><br>
</form>
</body>
</html>";
var alternativePdfRenderer = new ChromePdfRenderer();
alternativePdfRenderer.RenderingOptions.CreatePdfFormsFromHtml = true;
alternativePdfRenderer.RenderHtmlAsPdf(alternativeHtmlContent).SaveAs("AlternativeForm.pdf");
using IronPdf;
using System;
const string alternativeHtmlContent = @"
<html>
<body>
<h2>Alternative PDF Form</h2>
<form>
Name: <br>
Age: <br>
<br>
<p>Select country:</p>
<select name='country'>
<option value='USA'>USA</option>
<option value='UK'>UK</option>
<option value='Canada'>Canada</option>
</select>
<br>
<p>Select interests:</p>
<label for='interest1'> Interest 1</label><br>
<label for='interest2'> Interest 2</label><br>
</form>
</body>
</html>";
var alternativePdfRenderer = new ChromePdfRenderer();
alternativePdfRenderer.RenderingOptions.CreatePdfFormsFromHtml = true;
alternativePdfRenderer.RenderHtmlAsPdf(alternativeHtmlContent).SaveAs("AlternativeForm.pdf");
Imports IronPdf
Imports System
Private Const alternativeHtmlContent As String = "
<html>
<body>
<h2>Alternative PDF Form</h2>
<form>
Name: <br>
Age: <br>
<br>
<p>Select country:</p>
<select name='country'>
<option value='USA'>USA</option>
<option value='UK'>UK</option>
<option value='Canada'>Canada</option>
</select>
<br>
<p>Select interests:</p>
<label for='interest1'> Interest 1</label><br>
<label for='interest2'> Interest 2</label><br>
</form>
</body>
</html>"
Private alternativePdfRenderer = New ChromePdfRenderer()
alternativePdfRenderer.RenderingOptions.CreatePdfFormsFromHtml = True
alternativePdfRenderer.RenderHtmlAsPdf(alternativeHtmlContent).SaveAs("AlternativeForm.pdf")
Vous pouvezcombiner plusieurs fichiers PDF en un seul document. Cette fonction est pratique pour consolider des rapports ou combiner différentes sections de documents.
using IronPdf;
var firstHtmlContent = @"<h1>Document A</h1>
<p>This is the first document.</p>
<div style='page-break-after: always;'></div>
<p>Continuation of Document A</p>";
var secondHtmlContent = @"<h1>Document B</h1>
<p>This is the second document.</p>
<div style='page-break-after: always;'></div>
<p>Continuation of Document B</p>";
var pdfRenderer = new ChromePdfRenderer();
var pdfDocA = pdfRenderer.RenderHtmlAsPdf(firstHtmlContent);
var pdfDocB = pdfRenderer.RenderHtmlAsPdf(secondHtmlContent);
var mergedPdf = PdfDocument.Merge(pdfDocA, pdfDocB);
mergedPdf.SaveAs("MergedDocuments.pdf");
using IronPdf;
var firstHtmlContent = @"<h1>Document A</h1>
<p>This is the first document.</p>
<div style='page-break-after: always;'></div>
<p>Continuation of Document A</p>";
var secondHtmlContent = @"<h1>Document B</h1>
<p>This is the second document.</p>
<div style='page-break-after: always;'></div>
<p>Continuation of Document B</p>";
var pdfRenderer = new ChromePdfRenderer();
var pdfDocA = pdfRenderer.RenderHtmlAsPdf(firstHtmlContent);
var pdfDocB = pdfRenderer.RenderHtmlAsPdf(secondHtmlContent);
var mergedPdf = PdfDocument.Merge(pdfDocA, pdfDocB);
mergedPdf.SaveAs("MergedDocuments.pdf");
Imports IronPdf
Private firstHtmlContent = "<h1>Document A</h1>
<p>This is the first document.</p>
<div style='page-break-after: always;'></div>
<p>Continuation of Document A</p>"
Private secondHtmlContent = "<h1>Document B</h1>
<p>This is the second document.</p>
<div style='page-break-after: always;'></div>
<p>Continuation of Document B</p>"
Private pdfRenderer = New ChromePdfRenderer()
Private pdfDocA = pdfRenderer.RenderHtmlAsPdf(firstHtmlContent)
Private pdfDocB = pdfRenderer.RenderHtmlAsPdf(secondHtmlContent)
Private mergedPdf = PdfDocument.Merge(pdfDocA, pdfDocB)
mergedPdf.SaveAs("MergedDocuments.pdf")
Inversement, IronPDF peutdiviser un seul PDF en plusieurs documents. Cela peut s'avérer nécessaire si vous souhaitez distribuer des pages ou des sections individuelles.
IronPDF permet dele cryptage et le décryptage des documents PDFle système d'information de la Commission européenne (CEI) permet d'ajouter une couche supplémentaire de sécurité aux informations sensibles.
using IronPdf;
using System;
var encryptedPdf = PdfDocument.FromFile("protected.pdf", "password");
encryptedPdf.SecuritySettings.RemovePasswordsAndEncryption();
encryptedPdf.SecuritySettings.MakePdfDocumentReadOnly("super-secret-key");
encryptedPdf.Password = "new-password";
encryptedPdf.SaveAs("secured.pdf");
using IronPdf;
using System;
var encryptedPdf = PdfDocument.FromFile("protected.pdf", "password");
encryptedPdf.SecuritySettings.RemovePasswordsAndEncryption();
encryptedPdf.SecuritySettings.MakePdfDocumentReadOnly("super-secret-key");
encryptedPdf.Password = "new-password";
encryptedPdf.SaveAs("secured.pdf");
Imports IronPdf
Imports System
Private encryptedPdf = PdfDocument.FromFile("protected.pdf", "password")
encryptedPdf.SecuritySettings.RemovePasswordsAndEncryption()
encryptedPdf.SecuritySettings.MakePdfDocumentReadOnly("super-secret-key")
encryptedPdf.Password = "new-password"
encryptedPdf.SaveAs("secured.pdf")
Avec cette bibliothèque, il est facile de définir les propriétés d'un document telles que le titre, l'auteur et les métadonnées. Cela facilite la gestion et l'organisation des documents.
using IronPdf;
using System;
var encryptedPdf = PdfDocument.FromFile("sample.pdf");
pdf.MetaData.Author = "Iron Developer";
pdf.MetaData.Keywords = "Confidential, Private";
pdf.MetaData.ModifiedDate = DateTime.Now;
pdf.SaveAs("modified.pdf");
using IronPdf;
using System;
var encryptedPdf = PdfDocument.FromFile("sample.pdf");
pdf.MetaData.Author = "Iron Developer";
pdf.MetaData.Keywords = "Confidential, Private";
pdf.MetaData.ModifiedDate = DateTime.Now;
pdf.SaveAs("modified.pdf");
Imports IronPdf
Imports System
Private encryptedPdf = PdfDocument.FromFile("sample.pdf")
pdf.MetaData.Author = "Iron Developer"
pdf.MetaData.Keywords = "Confidential, Private"
pdf.MetaData.ModifiedDate = DateTime.Now
pdf.SaveAs("modified.pdf")
IronPDF peutgénérer des documents conformes à la norme PDF/A les documents nécessaires à l'archivage à long terme et à la conservation des données.
La conversion directe de XML en PDF n'est pas prise en charge par IronPDF, mais une approche viable consiste à convertir d'abord les données XML au format HTML. Pour ce faire, on utilise XSLT(Transformations en langage de feuille de style extensible)xML, un puissant langage de feuille de style XML conçu pour transformer des documents XML en d'autres formats tels que HTML, texte, ou même en un nouveau document XML. Disons qu'il s'agit de notre fichier data.xml :
<?xml version="1.0" encoding="UTF-8"?>
<Library>
<Book id="1">
<Title>The Great Gatsby</Title>
<Author>F. Scott Fitzgerald</Author>
<Genre>Fiction</Genre>
<Year>1925</Year>
</Book>
<Book id="2">
<Title>To Kill a Mockingbird</Title>
<Author>Harper Lee</Author>
<Genre>Fiction</Genre>
<Year>1960</Year>
</Book>
<Book id="3">
<Title>1984</Title>
<Author>George Orwell</Author>
<Genre>Dystopian</Genre>
<Year>1949</Year>
</Book>
</Library>
<?xml version="1.0" encoding="UTF-8"?>
<Library>
<Book id="1">
<Title>The Great Gatsby</Title>
<Author>F. Scott Fitzgerald</Author>
<Genre>Fiction</Genre>
<Year>1925</Year>
</Book>
<Book id="2">
<Title>To Kill a Mockingbird</Title>
<Author>Harper Lee</Author>
<Genre>Fiction</Genre>
<Year>1960</Year>
</Book>
<Book id="3">
<Title>1984</Title>
<Author>George Orwell</Author>
<Genre>Dystopian</Genre>
<Year>1949</Year>
</Book>
</Library>
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'<?xml version="1.0" encoding="UTF-8"?> <Library> <Book id="1"> <Title> The Great Gatsby</Title> <Author> F.Scott Fitzgerald</Author> <Genre> Fiction</Genre> <Year>1925</Year> </Book> <Book id="2"> <Title> @To Kill a Mockingbird</Title> <Author> Harper Lee</Author> <Genre> Fiction</Genre> <Year>1960</Year> </Book> <Book id="3"> <Title>1984</Title> <Author> George Orwell</Author> <Genre> Dystopian</Genre> <Year>1949</Year> </Book> </Library>
Il s'agit de notre fichier style.xslt :
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" doctype-system="about:legacy-compat" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<html>
<head>
<title>Library Catalog</title>
<style>
body { font-family: Arial, sans-serif; margin: 20px; }
table { border-collapse: collapse; width: 100%; }
th, td { text-align: left; padding: 8px; }
tr:nth-child(even) { background-color: #f2f2f2; }
th { background-color: #4CAF50; color: white; }
</style>
</head>
<body>
<h2>Library Catalog</h2>
<table>
<tr>
<th>Title</th>
<th>Author</th>
<th>Genre</th>
<th>Year</th>
</tr>
<xsl:for-each select="Library/Book">
<tr>
<td><xsl:value-of select="Title"/></td>
<td><xsl:value-of select="Author"/></td>
<td><xsl:value-of select="Genre"/></td>
<td><xsl:value-of select="Year"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" doctype-system="about:legacy-compat" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<html>
<head>
<title>Library Catalog</title>
<style>
body { font-family: Arial, sans-serif; margin: 20px; }
table { border-collapse: collapse; width: 100%; }
th, td { text-align: left; padding: 8px; }
tr:nth-child(even) { background-color: #f2f2f2; }
th { background-color: #4CAF50; color: white; }
</style>
</head>
<body>
<h2>Library Catalog</h2>
<table>
<tr>
<th>Title</th>
<th>Author</th>
<th>Genre</th>
<th>Year</th>
</tr>
<xsl:for-each select="Library/Book">
<tr>
<td><xsl:value-of select="Title"/></td>
<td><xsl:value-of select="Author"/></td>
<td><xsl:value-of select="Genre"/></td>
<td><xsl:value-of select="Year"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
'INSTANT VB TODO TASK: The following line could not be converted:
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" doctype-system="about:legacy-compat" encoding="UTF-8" indent="yes"/> <xsl:template match="/"> (Of html) (Of head) (Of title) Library Catalog</title> (Of style) body
If True Then
font-family: Arial, sans-serif
margin:
20px
End If
table
If True Then
border-collapse: collapse
width:
100 Mod
End If
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
' th, td
' {
' text-align: left;
' padding:
' 8px;
' }
tr:
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
' nth-child(even)
' {
' background-color: #f2f2f2;
' }
th
If True Then
background-color: #4CAF50
color:
white
End If
'INSTANT VB TODO TASK: The following line uses invalid syntax:
' </style> </head> <body> <h2> Library Catalog</h2> <table> <tr> <th> Title</th> <th> Author</th> <th> Genre</th> <th> Year</th> </tr> <xsl:for-@each @select="Library/Book"> <tr> <td><xsl:value-@of @select="Title"/></td> <td><xsl:value-@of @select="Author"/></td> <td><xsl:value-@of @select="Genre"/></td> <td><xsl:value-@of @select="Year"/></td> </tr> </xsl:for-@each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
Voici un extrait de code qui montre comment nous pouvons aborder cette logique :
using System;
using System.Xml.Xsl;
using System.Xml;
XslCompiledTransform transform = new XslCompiledTransform();
transform.Load("style.xslt");
XmlReader reader = XmlReader.Create("data.xml");
XmlWriterSettings settings = new XmlWriterSettings { Indent = true, OmitXmlDeclaration = true };
using (XmlWriter writer = XmlWriter.Create("output.html", settings))
{
transform.Transform(reader, writer);
}
License.LicenseKey = "Liecense-Key";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlFileAsPdf("output.html");
pdf.SaveAs("Report.pdf");
using System;
using System.Xml.Xsl;
using System.Xml;
XslCompiledTransform transform = new XslCompiledTransform();
transform.Load("style.xslt");
XmlReader reader = XmlReader.Create("data.xml");
XmlWriterSettings settings = new XmlWriterSettings { Indent = true, OmitXmlDeclaration = true };
using (XmlWriter writer = XmlWriter.Create("output.html", settings))
{
transform.Transform(reader, writer);
}
License.LicenseKey = "Liecense-Key";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlFileAsPdf("output.html");
pdf.SaveAs("Report.pdf");
Imports System
Imports System.Xml.Xsl
Imports System.Xml
Private transform As New XslCompiledTransform()
transform.Load("style.xslt")
Dim reader As XmlReader = XmlReader.Create("data.xml")
Dim settings As New XmlWriterSettings With {
.Indent = True,
.OmitXmlDeclaration = True
}
Using writer As XmlWriter = XmlWriter.Create("output.html", settings)
transform.Transform(reader, writer)
End Using
License.LicenseKey = "Liecense-Key"
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlFileAsPdf("output.html")
pdf.SaveAs("Report.pdf")
Vous commencez par une feuille de style XSLT(style.xslt) qui dicte comment les données XML doivent être structurées en HTML. La classe XslCompiledTransform de .NET est utilisée pour charger votre fichier XSLT.
Utilisez XmlReader pour charger vos données XML(data.xml). XmlReader est efficace à cette fin car il fournit une vue en lecture seule des données XML.
Le code HTML transformé est écrit dans un fichier(output.html) en utilisant XmlWriter, configuré pour produire du HTML indenté pour plus de lisibilité et pour omettre la déclaration XML, qui n'est pas nécessaire dans la sortie HTML.
Une fois le fichier HTML prêt, ChromePdfRenderer d'IronPDF est utilisé pour convertir le document HTML en PDF. Ce moteur de rendu imite un moteur de rendu de haute qualité, garantissant que le PDF généré représente fidèlement le contenu HTML.
Enfin, le document PDF est enregistré dans le système de fichiers(Rapport.pdf). Cette étape conclut le processus de conversion, qui aboutit à un document PDF dérivé des données XML d'origine.
C'est ainsi que nous générons des rapports en utilisant XML et IronPDF. Le fichier PDF de sortie que nous générons :
Nous pouvons également créer des rapports interactifs SAP par programme, puis les convertir à l'aide d'IronPDF. Pour plus de détails, suivez ce guideGénération de rapports en C#.
Report.NET offre une série de fonctions avancées qui permettent de générer et de personnaliser des PDF de manière exhaustive. Les caractéristiques énumérées dans l'image reflètent certaines de ces capacités avancées. Examinons chacun d'entre eux en détail.
Cette fonction permet d'utiliser différents styles et tailles de polices dans un document PDF. Il permet aux développeurs de tester l'apparence de différentes polices, en s'assurant que le texte s'affiche correctement et conformément aux spécifications de conception.
using Root.Reports;
using System;
using System.Drawing;
namespace ReportSamples {
public class Test : Report {
private readonly FontDef fontDef;
private readonly FontProp fontProp_Title;
private readonly FontProp fontProp_Label;
public Test() {
fontDef = FontDef.FontDefFromName(this, FontDef.StandardFont.Helvetica);
fontProp_Title = new FontPropMM(fontDef, 6) { Bold = true };
fontProp_Label = new FontPropMM(fontDef, 4);
}
protected override void Create() {
FontTest();
}
private void FontTest() {
FontProp fp_Title = new FontPropMM(fontDef, 12) { Bold = true };
FontProp fp = new FontPropMM(fontDef, 6);
FontProp fp_Small = new FontPropMM(fontDef, 1.4);
FontProp fp_XSmall = new FontPropMM(fontDef, 0.8);
Page page_Cur = new Page(this);
page_Cur.AddCB_MM(30, new RepString(fontProp_Title, "Font Test"));
Double rX = 300;
Double rY = 40;
for (Int32 i = 32; i < 127; i++) {
PrintCharacter(i, fp, fp_Small, fp_XSmall, rX, rY, page_Cur);
}
for (Int32 i = 161; i < 256; i++) {
PrintCharacter(i, fp, fp_Small, fp_XSmall, rX, rY, page_Cur);
}
PrintCharacter('�', fp, fp_Small, fp_XSmall, rX, rY, page_Cur);
}
private void PrintCharacter(Int32 iChar, FontProp fp, FontProp fp_Small, FontProp fp_XSmall, Double rX, Double rY, Page page_Cur) {
if (rX > 185) {
rY += fp.rLineFeedMM;
rX = 22;
}
if (rY > 280) {
new Page(this);
rY = 40;
}
Char ch = (Char)iChar;
String s = ch.ToString();
page_Cur.AddMM(rX + 2, rY, new RepString(fp, s));
rX += 15;
}
}
}
using Root.Reports;
using System;
using System.Drawing;
namespace ReportSamples {
public class Test : Report {
private readonly FontDef fontDef;
private readonly FontProp fontProp_Title;
private readonly FontProp fontProp_Label;
public Test() {
fontDef = FontDef.FontDefFromName(this, FontDef.StandardFont.Helvetica);
fontProp_Title = new FontPropMM(fontDef, 6) { Bold = true };
fontProp_Label = new FontPropMM(fontDef, 4);
}
protected override void Create() {
FontTest();
}
private void FontTest() {
FontProp fp_Title = new FontPropMM(fontDef, 12) { Bold = true };
FontProp fp = new FontPropMM(fontDef, 6);
FontProp fp_Small = new FontPropMM(fontDef, 1.4);
FontProp fp_XSmall = new FontPropMM(fontDef, 0.8);
Page page_Cur = new Page(this);
page_Cur.AddCB_MM(30, new RepString(fontProp_Title, "Font Test"));
Double rX = 300;
Double rY = 40;
for (Int32 i = 32; i < 127; i++) {
PrintCharacter(i, fp, fp_Small, fp_XSmall, rX, rY, page_Cur);
}
for (Int32 i = 161; i < 256; i++) {
PrintCharacter(i, fp, fp_Small, fp_XSmall, rX, rY, page_Cur);
}
PrintCharacter('�', fp, fp_Small, fp_XSmall, rX, rY, page_Cur);
}
private void PrintCharacter(Int32 iChar, FontProp fp, FontProp fp_Small, FontProp fp_XSmall, Double rX, Double rY, Page page_Cur) {
if (rX > 185) {
rY += fp.rLineFeedMM;
rX = 22;
}
if (rY > 280) {
new Page(this);
rY = 40;
}
Char ch = (Char)iChar;
String s = ch.ToString();
page_Cur.AddMM(rX + 2, rY, new RepString(fp, s));
rX += 15;
}
}
}
Imports Root.Reports
Imports System
Imports System.Drawing
Namespace ReportSamples
Public Class Test
Inherits Report
Private ReadOnly fontDef As FontDef
Private ReadOnly fontProp_Title As FontProp
Private ReadOnly fontProp_Label As FontProp
Public Sub New()
fontDef = FontDef.FontDefFromName(Me, FontDef.StandardFont.Helvetica)
fontProp_Title = New FontPropMM(fontDef, 6) With {.Bold = True}
fontProp_Label = New FontPropMM(fontDef, 4)
End Sub
Protected Overrides Sub Create()
FontTest()
End Sub
Private Sub FontTest()
Dim fp_Title As FontProp = New FontPropMM(fontDef, 12) With {.Bold = True}
Dim fp As FontProp = New FontPropMM(fontDef, 6)
Dim fp_Small As FontProp = New FontPropMM(fontDef, 1.4)
Dim fp_XSmall As FontProp = New FontPropMM(fontDef, 0.8)
Dim page_Cur As New Page(Me)
page_Cur.AddCB_MM(30, New RepString(fontProp_Title, "Font Test"))
Dim rX As Double = 300
Dim rY As Double = 40
For i As Int32 = 32 To 126
PrintCharacter(i, fp, fp_Small, fp_XSmall, rX, rY, page_Cur)
Next i
For i As Int32 = 161 To 255
PrintCharacter(i, fp, fp_Small, fp_XSmall, rX, rY, page_Cur)
Next i
PrintCharacter(AscW(" "c), fp, fp_Small, fp_XSmall, rX, rY, page_Cur)
End Sub
Private Sub PrintCharacter(ByVal iChar As Int32, ByVal fp As FontProp, ByVal fp_Small As FontProp, ByVal fp_XSmall As FontProp, ByVal rX As Double, ByVal rY As Double, ByVal page_Cur As Page)
If rX > 185 Then
rY += fp.rLineFeedMM
rX = 22
End If
If rY > 280 Then
Dim tempVar As New Page(Me)
rY = 40
End If
Dim ch As Char = ChrW(iChar)
Dim s As String = ch.ToString()
page_Cur.AddMM(rX + 2, rY, New RepString(fp, s))
rX += 15
End Sub
End Class
End Namespace
Grâce à la fonction d'échantillonnage d'images, les développeurs peuvent intégrer des images dans les documents PDF. Il s'agit notamment de contrôler la taille et le positionnement des images, ainsi que de leur appliquer éventuellement des transformations ou des effets.
using Root.Reports;
using System.Drawing;
namespace ReportSamples {
public class ImageSample : Report {
protected override void Create() {
FontDef fd = new FontDef(this, FontDef.StandardFont.Helvetica);
FontProp fp_Title = new FontPropMM(fd, 15) { Bold = true };
FontProp fp_SubTitle = new FontPropMM(fd, 4) { Bold = true };
PenProp pp = new PenProp(this, 0.2, Color.FromArgb(235, 235, 235));
PenProp pp_Black = new PenProp(this, 0.2, Color.Black);
BrushProp bp = new BrushProp(this, Color.LightGray);
new Page(this);
page_Cur.AddCB_MM(40, new RepString(fp_Title, "Image Sample"));
System.IO.Stream stream = GetType().Assembly.GetManifestResourceStream("ReportSamples.Image.jpg");
page_Cur.AddMM(20, 90, new RepImageMM(stream, 40, Double.NaN));
page_Cur.AddMM(20, 95, new RepString(fp_SubTitle, "W = 40mm, H = auto."));
page_Cur.AddMM(67, 90, new RepImageMM(stream, 40, 20));
page_Cur.AddMM(67, 95, new RepString(fp_SubTitle, "W = 40mm, H = 20mm"));
page_Cur.AddMM(114, 90, new RepImageMM(stream, Double.NaN, 30));
page_Cur.AddMM(114, 95, new RepString(fp_SubTitle, "W = auto., H = 30mm"));
page_Cur.AddMM(161, 90, new RepImageMM(stream, 30, 30));
page_Cur.AddMM(161, 95, new RepString(fp_SubTitle, "W = 30mm, H = 30mm"));
}
}
}
using Root.Reports;
using System.Drawing;
namespace ReportSamples {
public class ImageSample : Report {
protected override void Create() {
FontDef fd = new FontDef(this, FontDef.StandardFont.Helvetica);
FontProp fp_Title = new FontPropMM(fd, 15) { Bold = true };
FontProp fp_SubTitle = new FontPropMM(fd, 4) { Bold = true };
PenProp pp = new PenProp(this, 0.2, Color.FromArgb(235, 235, 235));
PenProp pp_Black = new PenProp(this, 0.2, Color.Black);
BrushProp bp = new BrushProp(this, Color.LightGray);
new Page(this);
page_Cur.AddCB_MM(40, new RepString(fp_Title, "Image Sample"));
System.IO.Stream stream = GetType().Assembly.GetManifestResourceStream("ReportSamples.Image.jpg");
page_Cur.AddMM(20, 90, new RepImageMM(stream, 40, Double.NaN));
page_Cur.AddMM(20, 95, new RepString(fp_SubTitle, "W = 40mm, H = auto."));
page_Cur.AddMM(67, 90, new RepImageMM(stream, 40, 20));
page_Cur.AddMM(67, 95, new RepString(fp_SubTitle, "W = 40mm, H = 20mm"));
page_Cur.AddMM(114, 90, new RepImageMM(stream, Double.NaN, 30));
page_Cur.AddMM(114, 95, new RepString(fp_SubTitle, "W = auto., H = 30mm"));
page_Cur.AddMM(161, 90, new RepImageMM(stream, 30, 30));
page_Cur.AddMM(161, 95, new RepString(fp_SubTitle, "W = 30mm, H = 30mm"));
}
}
}
Imports Root.Reports
Imports System.Drawing
Namespace ReportSamples
Public Class ImageSample
Inherits Report
Protected Overrides Sub Create()
Dim fd As New FontDef(Me, FontDef.StandardFont.Helvetica)
Dim fp_Title As FontProp = New FontPropMM(fd, 15) With {.Bold = True}
Dim fp_SubTitle As FontProp = New FontPropMM(fd, 4) With {.Bold = True}
Dim pp As New PenProp(Me, 0.2, Color.FromArgb(235, 235, 235))
Dim pp_Black As New PenProp(Me, 0.2, Color.Black)
Dim bp As New BrushProp(Me, Color.LightGray)
Dim tempVar As New Page(Me)
page_Cur.AddCB_MM(40, New RepString(fp_Title, "Image Sample"))
Dim stream As System.IO.Stream = Me.GetType().Assembly.GetManifestResourceStream("Image.jpg")
page_Cur.AddMM(20, 90, New RepImageMM(stream, 40, Double.NaN))
page_Cur.AddMM(20, 95, New RepString(fp_SubTitle, "W = 40mm, H = auto."))
page_Cur.AddMM(67, 90, New RepImageMM(stream, 40, 20))
page_Cur.AddMM(67, 95, New RepString(fp_SubTitle, "W = 40mm, H = 20mm"))
page_Cur.AddMM(114, 90, New RepImageMM(stream, Double.NaN, 30))
page_Cur.AddMM(114, 95, New RepString(fp_SubTitle, "W = auto., H = 30mm"))
page_Cur.AddMM(161, 90, New RepImageMM(stream, 30, 30))
page_Cur.AddMM(161, 95, New RepString(fp_SubTitle, "W = 30mm, H = 30mm"))
End Sub
End Class
End Namespace
Le gestionnaire de mise en page de listes permet d'ajouter des listes à un document PDF. Cette fonction est utile pour créer des listes ordonnées ou non, personnaliser l'indentation des listes, les styles de puces et gérer la présentation générale des éléments de liste dans le document.
using Root.Reports;
using System.Drawing;
namespace ReportSamples {
public class ListLayoutManagerSample : Report {
private Double rMarginLeft = 20; // millimeters
private Double rWidth = 175; // millimeters
protected override void Create() {
FontDef fd = new FontDef(this, FontDef.StandardFont.Helvetica);
FontProp fp = new FontPropMM(fd, 1.9);
Double rY = 40; // vertical position in millimeters
new Page(this);
FontProp fp_Title = new FontPropMM(fd, 8);
page_Cur.AddCB_MM(rY, new RepString(fp_Title, "List Layout Manager Sample"));
rY += 18;
ListLayoutManager llm = null;
using (llm = new ListLayoutManager(this)) {
PenProp pp_BorderLine = new PenPropMM(this, 0.4, Color.Blue);
PenProp pp_GridLine = new PenPropMM(this, 0.1, Color.Blue);
// Configuration for columns
TlmColumn col_Number = new TlmColumnMM(llm, 10);
col_Number.tlmCellDef_Default.rAlignH = RepObj.rAlignCenter;
col_Number.tlmCellDef_Default.rAlignV = RepObj.rAlignCenter;
col_Number.tlmCellDef_Default.penProp_LineLeft = pp_BorderLine;
TlmColumn col_Text = new TlmColumnMM(llm, 100);
col_Text.tlmCellDef_Default.tlmTextMode = TlmTextMode.MultiLine;
TlmColumn col_Author = new TlmColumnMM(llm, rWidth - llm.rWidthMM);
col_Author.tlmCellDef_Default.penProp_LineRight = pp_BorderLine;
col_Author.tlmCellDef_Default.brushProp_Back = new BrushProp(this, Color.FromArgb(255, 210, 210));
llm.container_CreateMM(page_Cur, rMarginLeft, rY); // immediately creates a container
// Adding rows and content
// ...
// Rows and content omitted for brevity
// ...
}
rY += llm.rCurY_MM + 1.5;
fp.rSizeMM = 1.5;
page_Cur.AddRT_MM(rMarginLeft + rWidth, rY, new RepString(fp, "End of list"));
}
}
}
using Root.Reports;
using System.Drawing;
namespace ReportSamples {
public class ListLayoutManagerSample : Report {
private Double rMarginLeft = 20; // millimeters
private Double rWidth = 175; // millimeters
protected override void Create() {
FontDef fd = new FontDef(this, FontDef.StandardFont.Helvetica);
FontProp fp = new FontPropMM(fd, 1.9);
Double rY = 40; // vertical position in millimeters
new Page(this);
FontProp fp_Title = new FontPropMM(fd, 8);
page_Cur.AddCB_MM(rY, new RepString(fp_Title, "List Layout Manager Sample"));
rY += 18;
ListLayoutManager llm = null;
using (llm = new ListLayoutManager(this)) {
PenProp pp_BorderLine = new PenPropMM(this, 0.4, Color.Blue);
PenProp pp_GridLine = new PenPropMM(this, 0.1, Color.Blue);
// Configuration for columns
TlmColumn col_Number = new TlmColumnMM(llm, 10);
col_Number.tlmCellDef_Default.rAlignH = RepObj.rAlignCenter;
col_Number.tlmCellDef_Default.rAlignV = RepObj.rAlignCenter;
col_Number.tlmCellDef_Default.penProp_LineLeft = pp_BorderLine;
TlmColumn col_Text = new TlmColumnMM(llm, 100);
col_Text.tlmCellDef_Default.tlmTextMode = TlmTextMode.MultiLine;
TlmColumn col_Author = new TlmColumnMM(llm, rWidth - llm.rWidthMM);
col_Author.tlmCellDef_Default.penProp_LineRight = pp_BorderLine;
col_Author.tlmCellDef_Default.brushProp_Back = new BrushProp(this, Color.FromArgb(255, 210, 210));
llm.container_CreateMM(page_Cur, rMarginLeft, rY); // immediately creates a container
// Adding rows and content
// ...
// Rows and content omitted for brevity
// ...
}
rY += llm.rCurY_MM + 1.5;
fp.rSizeMM = 1.5;
page_Cur.AddRT_MM(rMarginLeft + rWidth, rY, new RepString(fp, "End of list"));
}
}
}
Imports Root.Reports
Imports System.Drawing
Namespace ReportSamples
Public Class ListLayoutManagerSample
Inherits Report
Private rMarginLeft As Double = 20 ' millimeters
Private rWidth As Double = 175 ' millimeters
Protected Overrides Sub Create()
Dim fd As New FontDef(Me, FontDef.StandardFont.Helvetica)
Dim fp As FontProp = New FontPropMM(fd, 1.9)
Dim rY As Double = 40 ' vertical position in millimeters
Dim tempVar As New Page(Me)
Dim fp_Title As FontProp = New FontPropMM(fd, 8)
page_Cur.AddCB_MM(rY, New RepString(fp_Title, "List Layout Manager Sample"))
rY += 18
Dim llm As ListLayoutManager = Nothing
llm = New ListLayoutManager(Me)
Using llm
Dim pp_BorderLine As PenProp = New PenPropMM(Me, 0.4, Color.Blue)
Dim pp_GridLine As PenProp = New PenPropMM(Me, 0.1, Color.Blue)
' Configuration for columns
Dim col_Number As TlmColumn = New TlmColumnMM(llm, 10)
col_Number.tlmCellDef_Default.rAlignH = RepObj.rAlignCenter
col_Number.tlmCellDef_Default.rAlignV = RepObj.rAlignCenter
col_Number.tlmCellDef_Default.penProp_LineLeft = pp_BorderLine
Dim col_Text As TlmColumn = New TlmColumnMM(llm, 100)
col_Text.tlmCellDef_Default.tlmTextMode = TlmTextMode.MultiLine
Dim col_Author As TlmColumn = New TlmColumnMM(llm, rWidth - llm.rWidthMM)
col_Author.tlmCellDef_Default.penProp_LineRight = pp_BorderLine
col_Author.tlmCellDef_Default.brushProp_Back = New BrushProp(Me, Color.FromArgb(255, 210, 210))
llm.container_CreateMM(page_Cur, rMarginLeft, rY) ' immediately creates a container
' Adding rows and content
' ...
' Rows and content omitted for brevity
' ...
End Using
rY += llm.rCurY_MM + 1.5
fp.rSizeMM = 1.5
page_Cur.AddRT_MM(rMarginLeft + rWidth, rY, New RepString(fp, "End of list"))
End Sub
End Class
End Namespace
Il s'agit de la possibilité de définir et de modifier diverses propriétés du document PDF lui-même, telles que les métadonnées(auteur, titre, sujet)les préférences d'affichage et les paramètres de sécurité tels que le cryptage et les autorisations d'accès.
using Root.Reports;
using System;
namespace ReportSamples {
public class PdfPropertiesSample : Report {
public PdfPropertiesSample() {
PdfFormatter pf = (PdfFormatter)formatter;
pf.sTitle = "PDF Sample";
pf.sAuthor = "Otto Mayer, mot@root.ch";
pf.sSubject = "Sample of some PDF features";
pf.sKeywords = "Sample PDF RSF";
pf.sCreator = "RSF Sample Application";
pf.dt_CreationDate = new DateTime(2002, 8, 15, 0, 0, 0, 0);
pf.pageLayout = PageLayout.TwoColumnLeft;
pf.bHideToolBar = true;
pf.bHideMenubar = false;
pf.bHideWindowUI = true;
pf.bFitWindow = true;
pf.bCenterWindow = true;
pf.bDisplayDocTitle = true;
}
protected override void Create() {
FontDef fd = new FontDef(this, FontDef.StandardFont.Helvetica);
FontProp fp = new FontPropMM(fd, 4);
FontProp fp_Title = new FontPropMM(fd, 11);
fp_Title.bBold = true;
Page page = new Page(this);
page.AddCB_MM(40, new RepString(fp_Title, "PDF Properties Sample"));
fp_Title.rSizeMM = 8;
page.AddCB_MM(100, new RepString(fp_Title, "First Page"));
page.AddCB_MM(120, new RepString(fp, "Choose <Document Properties, Summary> from the"));
page.AddCB_MM(126, new RepString(fp, "File menu to display the document properties"));
page = new Page(this);
page.AddCB_MM(100, new RepString(fp_Title, "Second Page"));
}
}
}
using Root.Reports;
using System;
namespace ReportSamples {
public class PdfPropertiesSample : Report {
public PdfPropertiesSample() {
PdfFormatter pf = (PdfFormatter)formatter;
pf.sTitle = "PDF Sample";
pf.sAuthor = "Otto Mayer, mot@root.ch";
pf.sSubject = "Sample of some PDF features";
pf.sKeywords = "Sample PDF RSF";
pf.sCreator = "RSF Sample Application";
pf.dt_CreationDate = new DateTime(2002, 8, 15, 0, 0, 0, 0);
pf.pageLayout = PageLayout.TwoColumnLeft;
pf.bHideToolBar = true;
pf.bHideMenubar = false;
pf.bHideWindowUI = true;
pf.bFitWindow = true;
pf.bCenterWindow = true;
pf.bDisplayDocTitle = true;
}
protected override void Create() {
FontDef fd = new FontDef(this, FontDef.StandardFont.Helvetica);
FontProp fp = new FontPropMM(fd, 4);
FontProp fp_Title = new FontPropMM(fd, 11);
fp_Title.bBold = true;
Page page = new Page(this);
page.AddCB_MM(40, new RepString(fp_Title, "PDF Properties Sample"));
fp_Title.rSizeMM = 8;
page.AddCB_MM(100, new RepString(fp_Title, "First Page"));
page.AddCB_MM(120, new RepString(fp, "Choose <Document Properties, Summary> from the"));
page.AddCB_MM(126, new RepString(fp, "File menu to display the document properties"));
page = new Page(this);
page.AddCB_MM(100, new RepString(fp_Title, "Second Page"));
}
}
}
Imports Root.Reports
Imports System
Namespace ReportSamples
Public Class PdfPropertiesSample
Inherits Report
Public Sub New()
Dim pf As PdfFormatter = CType(formatter, PdfFormatter)
pf.sTitle = "PDF Sample"
pf.sAuthor = "Otto Mayer, mot@root.ch"
pf.sSubject = "Sample of some PDF features"
pf.sKeywords = "Sample PDF RSF"
pf.sCreator = "RSF Sample Application"
pf.dt_CreationDate = New DateTime(2002, 8, 15, 0, 0, 0, 0)
pf.pageLayout = PageLayout.TwoColumnLeft
pf.bHideToolBar = True
pf.bHideMenubar = False
pf.bHideWindowUI = True
pf.bFitWindow = True
pf.bCenterWindow = True
pf.bDisplayDocTitle = True
End Sub
Protected Overrides Sub Create()
Dim fd As New FontDef(Me, FontDef.StandardFont.Helvetica)
Dim fp As FontProp = New FontPropMM(fd, 4)
Dim fp_Title As FontProp = New FontPropMM(fd, 11)
fp_Title.bBold = True
Dim page As New Page(Me)
page.AddCB_MM(40, New RepString(fp_Title, "PDF Properties Sample"))
fp_Title.rSizeMM = 8
page.AddCB_MM(100, New RepString(fp_Title, "First Page"))
page.AddCB_MM(120, New RepString(fp, "Choose <Document Properties, Summary> from the"))
page.AddCB_MM(126, New RepString(fp, "File menu to display the document properties"))
page = New Page(Me)
page.AddCB_MM(100, New RepString(fp_Title, "Second Page"))
End Sub
End Class
End Namespace
La fonction PDF à partir d'un texte présente les capacités de la bibliothèque à ajouter et à personnaliser le contenu textuel d'un PDF. Il s'agit notamment de définir l'alignement du texte, l'espacement des lignes, la couleur et d'appliquer des effets de texte tels que le gras ou l'italique.
IronPDF est connue pour son vaste programme d'éducation et de formation à l'environnementune documentation détaillée. IronPDF propose une section de documentation bien organisée qui comprend des instructions d'installation, des tutoriels et des références d'API. Les guides sont structurés de manière à aider les débutants et les développeurs expérimentés à trouver rapidement les informations dont ils ont besoin. Pour obtenir un soutien de la part de la communauté, les développeurs peuvent se tourner vers les forums et les discussions communautaires. Ils peuvent y poser des questions, partager leurs expériences et trouver des réponses auprès d'autres utilisateurs.
IronPDF offre également une assistance professionnelle par le biais d'un système de ticketing où les ingénieurs peuvent obtenir de l'aide directement auprès de l'équipe IronPDF. Ce service peut faire partie de la licence payante, qui offre une assistance plus directe et plus immédiate.
Report.NETétant une bibliothèque open-source, son approche de la documentation et de l'assistance est différente. La documentation n'est peut-être pas aussi complète que celle des bibliothèques commerciales, mais elle est suffisante pour démarrer et effectuer les tâches courantes. La documentation de la bibliothèque se trouve dans le dépôt GitHub ou sous forme de commentaires en ligne dans le code source. Elle a tendance à être plus technique et peut nécessiter quelques recherches pour trouver les informations nécessaires.
Report.NET étant une bibliothèque libre et gratuite, elle n'offre pas d'assistance professionnelle formelle. Les développeurs s'appuient sur la communauté pour obtenir de l'aide ou peuvent avoir besoin d'engager un spécialiste pour des questions plus approfondies.
IronPDF offre une variété demodèles de licence pour répondre aux différents besoins en matière de développement et de déploiement, ce qui permet de s'assurer que les projets et les organisations de toutes tailles sont adaptés. En voici un aperçu :
License Lite(749 USD) : Il s'agit de l'option la plus basique, qui convient aux développeurs individuels travaillant sur un seul projet à un seul endroit. Il est accompagné d'une assistance par courrier électronique mais ne couvre pas la redistribution libre de droits.
License Plus(1 499 $US) : Destinée aux petites équipes, cette licence prend en charge jusqu'à trois développeurs travaillant sur trois projets répartis sur trois sites. Il améliore l'assistance en y ajoutant un service de messagerie électronique et de chat 24 heures sur 24, ainsi qu'un service d'assistance téléphonique.
Licence professionnelle(2,999 USD) : Cette solution est conçue pour les équipes et les projets de plus grande envergure, pouvant accueillir jusqu'à 10 développeurs répartis sur 10 sites et travaillant sur 10 projets. Il inclut toutes les options de soutien Plus et ajoute le partage d'écran pour une résolution plus interactive des problèmes.
Licence d'essai gratuite : Idéale à des fins d'évaluation, cettelicence d'essai vous permet d'essayer IronPDF gratuitement. Cependant, il est destiné à un usage privé et les PDF générés ne doivent pas être publiés sur des projets Internet ou intranet publics ou d'entreprise.
En plus des licences de base, il existe des options pour une couverture étendue :
Report.NET est distribué gratuitement sous licence LGPL. La LGPL(Licence publique générale restreinte) est une licence de logiciel libre qui permet aux utilisateurs d'exécuter, d'étudier, de partager et de modifier le logiciel. La licence garantit que la bibliothèque Report.NET peut être utilisée librement dans les logiciels libres et propriétaires, tant que les parties du code sous licence LGPL ne sont pas modifiées. S'ils sont modifiés, ces modifications doivent être partagées sous la même licence.
Lors de l'examen desIronPDF etReport.NETnous avons examiné divers éléments tels que leurs capacités, la gamme de fonctionnalités qu'ils offrent, la facilité d'utilisation, les services d'assistance et la manière dont ils sont licenciés.
IronPDF offre un riche ensemble de fonctionnalités qui permettent aux développeurs non seulement de créer et d'éditer des fichiers PDF à partir de HTML, d'images et de texte, mais aussi de mettre en œuvre des fonctionnalités avancées telles que le cryptage, les signatures numériques et des en-têtes/pieds de page personnalisés. La prise en charge de différentes licences signifie qu'il peut convenir à des projets de différentes tailles, qu'il s'agisse de développeurs solitaires ou de grandes entreprises. Sa documentation complète et sa structure d'assistance professionnelle en font un outil adapté aux projets pour lesquels des mises à jour régulières et une assistance directe sont importantes. IronPDF propose également un service deessai gratuit d'IronPDF commence à partir de 749 $.
Report.NET, en revanche, est un outil simple qui permet de générer des documents PDF. Sa licence LGPL signifie qu'il est tout à fait accessible aux développeurs qui peuvent l'utiliser dans des projets personnels et commerciaux sans restrictions importantes. Bien qu'il n'offre pas le même niveau d'assistance structurée qu'IronPDF, la nature open-source de Report.NET encourage la contribution et l'aide de la communauté.
Votre décision entre IronPDF et Report.NET dépendra des exigences spécifiques de votre projet. Si votre projet nécessite la création et la manipulation détaillées de PDF avec l'appui d'un support professionnel, IronPDF pourrait être le choix idéal.
9 produits de l'API .NET pour vos documents de bureau