Test in einer Live-Umgebung
Test in der Produktion ohne Wasserzeichen.
Funktioniert überall, wo Sie es brauchen.
Als C#-Entwickler bin ich häufig auf Herausforderungen gestoßen, wenn es darum ging, Generierung und Manipulation vonPDFsin meinen Projekten. Der Bedarf an effizienten, zuverlässigen und leicht zu integrierenden PDF-Lösungen ist ein häufiges Problem in unserem Bereich. Deshalb habe ich mich entschieden, zu erkundenAPITemplate undIronPDF, zwei beliebte Tools, die versprechen, PDF-bezogene Aufgaben in C#-Anwendungen zu optimieren.
In diesem Artikel teile ich meine praktischen Erfahrungen mit APITemplate und IronPDF, indem ich ihre Funktionen, Leistung und Integrationsmöglichkeiten vergleiche. Ich möchte Ihnen eine klare, unverzerrte Analyse bieten, um Ihnen bei der Entscheidungsfindung für Ihr nächstes Projekt zu helfen. Als ich erstmals auf APITemplate und IronPDF stieß, war ich von ihrem Potenzial fasziniert, um PDF-bezogene Herausforderungen in der C#-Entwicklung zu lösen. Lassen Sie uns aufschlüsseln, was jedes dieser Werkzeuge bietet.
APITemplate ist ein cloudbasierter Dienst, der sich auf die Erstellung von PDFs und Bildern aus Vorlagen konzentriert. Es bietet eine API, die es Entwicklern ermöglicht, Dokumente und Grafiken zu erstellen, indem sie JSON-Daten an vordefinierte Vorlagen senden. In meinen ersten Tests fand ich APITemplate einfach zu verwenden. Ich konnte eine Vorlage über deren Weboberfläche erstellen und dann deren API verwenden, um sie mit Daten aus meiner C#-Anwendung zu füllen.
Die Kernstärke von APITemplate liegt in seinem vorlagenbasierten Ansatz. Ich kann wiederverwendbare Vorlagen für Dokumente und Bilder erstellen, was mir viel Zeit bei sich wiederholenden Aufgaben spart. Es bietet auch einen Markdown-Vorlageneditor zur Erstellung von PDFs Sync. Sie können PDFs aus wiederverwendbaren Vorlagen erstellen, die in Zapier und andere Drittanbieter integriert sind.
JSON-Datenintegration ist eine Funktion, die ich häufig nutze. Es bietet Ihnen die Möglichkeit, Vorlagen mit JSON-Daten zu befüllen. Dadurch wird die Integration in meine C#-Anwendungen unglaublich einfach, da ich meine Objekte in JSON serialisieren und an die API senden kann.
Das API-Konsolen-Feature hat mir viel Zeit gespart. Damit kann ich API-Aufrufe direkt von ihrer Website aus vorab anzeigen und testen, was mir hilft, meine Anfragen vor der Implementierung in meinem C#-Code zu debuggen und zu optimieren.
Die Möglichkeit, benutzerdefinierte Kopf- und Fußzeilen zu meinen PDFs hinzuzufügen, war besonders wertvoll, wenn es darum ging, professionelle Berichte oder Rechnungen zu erstellen. Ich kann problemlos Seitenzahlen, Datumsangaben oder Firmenlogos einfügen.
IronPDFhingegen ist eine .NET-Bibliothek, die speziell für die PDF-Bearbeitung in C#-Anwendungen entwickelt wurde. Es bietet eine breite Palette von Funktionen, darunter die Erstellung, Bearbeitung und Konvertierung von PDFs. Eine seiner herausragenden Funktionen ist die Fähigkeit, PDFs aus HTML zu erstellen, was für webbasierte Anwendungen äußerst nützlich sein kann.
Meine erste Erfahrung mit IronPDF bestand darin, es über NuGet zu installieren und direkt in mein C#-Projekt zu integrieren. Der API-Integrationsprozess ist sehr reibungslos, was bedeutet, dass ich es in kürzester Zeit in meinen Projekten betriebsbereit hatte. Ich war beeindruckt davon, wie einfach ich programmatisch PDFs erstellen konnte, ohne auf externe Dienste angewiesen zu sein.
Der Hauptunterschied, den ich bemerkt habe, ist, dass APITemplate darin glänzt, Dokumente aus vordefinierten Vorlagen zu erstellen, während IronPDF mehr Flexibilität für die benutzerdefinierte PDF-Manipulation innerhalb Ihres C#-Codes bietet. Die cloudbasierte Natur von APITemplate bedeutet, dass Sie sich keine Sorgen über Serverressourcen für die PDF-Erstellung machen müssen, es jedoch eine Internetverbindung erfordert. IronPDF, als lokale Bibliothek, kann offline arbeiten, nutzt jedoch die Ressourcen Ihres Servers.
IronPDF zeichnet sich aus beiErzeugen von PDFs aus HTML-Inhalten. Ich habe diese Funktion intensiv genutzt, um Berichte und Dokumente dynamisch zu erstellen. Es ist so einfach, HTML-Strings oder sogar URLs an die Bibliothek zu übergeben. Die umfassende Unterstützung von IronPDF für moderne Webstandards bedeutete, dass jedes PDF, das ich aus HTML-Inhalt erzeugte, als hochwertiges Dokument herauskam.
Dieses Feature ermöglicht es mir,bearbeitenVorhandene PDFs programmatisch. Ich kann Text, Bilder oder sogar neue Seiten zu PDF-Dokumenten hinzufügen, was äußerst nützlich für die Aktualisierung von Berichten oder Formularen ist.
Ich habe diese Funktion besonders nützlich gefunden, wenn ich mit großen Dokumenten arbeite. IronPDF macht es einfachkombinierenmehrere PDFs in eine odergeteiltein einzelnes PDF in mehrere Dateien.
Wenn ich Textinhalte aus PDFs für Analysen oder Indizierungen extrahieren muss, sind die Textextraktionsfunktionen von IronPDF hilfreich. Es verarbeitet verschiedene PDF-Layouts gut, was die Datenextraktion zum Kinderspiel macht.
Für Projekte, die die automatisierte Formularausfüllung betreffen, ist das IronPDFFormularausfüllungFunktion ist sehr nützlich. Ich kann PDF-Formulare programmatisch ausfüllen und Zeit bei der manuellen Dateneingabe sparen.
Sicherheit ist in vielen meiner Projekte entscheidend. IronPDF ermöglicht es mir, hinzuzufügendigitale Signaturenzu PDFs, die die Dokumentauthentizität und -sicherheit verbessern.
Beim Umgang mit sensiblen Dokumenten verwende ich IronPDF, um hinzuzufügenpasswortschutz zu PDFs. Dies ist äußerst hilfreich, um sicherzustellen, dass meine vertraulichen Informationen sicher bleiben.
Es gibt Zeiten, in denen ich konvertieren mussPDF-Seiten in Bilder umwandelnfür Vorschauen oder Miniaturansichten. IronPDF macht diesen Prozess unkompliziert, es benötigt nur wenige Codezeilen von mir und unterstützt verschiedene Bildformate.
Als .NET-Entwickler, der an plattformübergreifenden Projekten arbeitet, schätze ich, dass IronPDF dank seiner .NET-Standard-Unterstützung nahtlos über verschiedene Betriebssysteme hinweg funktioniert.
Die Einrichtung dieser Tools in einem C#-Projekt ist ziemlich unkompliziert. Ich werde Sie basierend auf meinen Erfahrungen durch den Prozess für sowohl IronPDF als auch APITemplate führen.
Um IronPDF in meinen C#-Projekten einzurichten, folge ich diesen Schritten:
Öffnen Sie mein Projekt in Visual Studio.
Verwenden Sie den NuGet-Paket-Manager, um IronPDF zu installieren. Ich benutze entweder den NuGet-Paket-Manager oder die Paket-Manager-Konsole.
Install-Package IronPdf
Install-Package IronPdf
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'Install-Package IronPdf
using IronPdf;
using IronPdf;
Imports IronPdf
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY-HERE";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY-HERE";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY-HERE"
Das war's! Jetzt kann ich IronPDF in meinem Code verwenden.
Für APITemplate ist der Einrichtungsprozess etwas anders, da es sich um eine webbasierte API handelt:
Zuerst registriere ich mich für ein APITemplate-Konto auf ihrer Website.
Nach der Anmeldung navigiere ich zum API-Bereich, um meinen API-Schlüssel zu erhalten.
In meinem C#-Projekt muss ich kein bestimmtes Paket installieren. Ich verwende normalerweise den eingebauten HttpClient, um API-Aufrufe zu tätigen.
dotnet user-secrets set "APITemplate:ApiKey" "YOUR-API-KEY-HERE"
dotnet user-secrets set "APITemplate:ApiKey" "YOUR-API-KEY-HERE"
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'dotnet user-secrets @set "APITemplate:ApiKey" "YOUR-API-KEY-HERE"
using System.Net.Http;
using System.Net.Http.Headers;
var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-KEY", Configuration["APITemplate:ApiKey"]);
using System.Net.Http;
using System.Net.Http.Headers;
var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-KEY", Configuration["APITemplate:ApiKey"]);
Imports System.Net.Http
Imports System.Net.Http.Headers
Private client = New HttpClient()
client.DefaultRequestHeaders.Add("X-API-KEY", Configuration("APITemplate:ApiKey"))
Nun bin ich bereit, API-Aufrufe an APITemplate zu machen.
Für dieses Projekt werde ich dieoffizielles Beispiel-GitHub-Projekt von APITemplatewelches bereits konfiguriert ist und Sie müssen nur den Vorlage-Schlüssel hinzufügen. Mit diesen Setups abgeschlossen, kann ich sowohl IronPDF als auch APITemplate in meinen C#-Projekten verwenden. IronPDF arbeitet lokal innerhalb meiner Anwendung, während APITemplate eine Internetverbindung benötigt, um mit seinen Servern zu kommunizieren.
Als C#-Entwickler hatte ich die Gelegenheit, sowohl IronPDF als auch APITemplate eingehend zu erforschen. Lassen Sie uns einige ihrer fortschrittlichen Funktionen erkunden, die mich beeindruckt haben.
IronPDF'sHTML zu PDFDie Umwandlung ist wirklich erstaunlich. Es rendert nicht nur statisches HTML - es kann auch JavaScript verarbeiten. Dies war ein echter Wendepunkt für mich bei der Arbeit mit dynamischen Webinhalten.
Hier ist ein schnelles Beispiel, wie ich es benutze:
var Renderer = new ChromePdfRenderer();
string htmlContent = @"
<html>
<body>
<h1>Dynamic Chart</h1>
<canvas id='myChart'></canvas>
<script src='https://cdn.jsdelivr.net/npm/chart.js'></script>
<script>
var ctx = document.getElementById('myChart').getContext('2d');
new Chart(ctx, {
type: 'bar',
data: {
labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
datasets: [{
label: '# of Votes',
data: [12, 19, 3, 5, 2, 3],
backgroundColor: [
'rgba(255, 99, 132, 0.2)',
'rgba(54, 162, 235, 0.2)',
'rgba(255, 206, 86, 0.2)',
'rgba(75, 192, 192, 0.2)',
'rgba(153, 102, 255, 0.2)',
'rgba(255, 159, 64, 0.2)'
],
borderColor: [
'rgba(255, 99, 132, 1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)',
'rgba(75, 192, 192, 1)',
'rgba(153, 102, 255, 1)',
'rgba(255, 159, 64, 1)'
],
borderWidth: 1
}]
},
options: {
scales: {
y: {
beginAtZero: true
}
}
}
});
</script>
</body>
</html>";
var PDF = Renderer.RenderHtmlAsPdf(htmlContent);
PDF.SaveAs("dynamic_chart.pdf");
var Renderer = new ChromePdfRenderer();
string htmlContent = @"
<html>
<body>
<h1>Dynamic Chart</h1>
<canvas id='myChart'></canvas>
<script src='https://cdn.jsdelivr.net/npm/chart.js'></script>
<script>
var ctx = document.getElementById('myChart').getContext('2d');
new Chart(ctx, {
type: 'bar',
data: {
labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
datasets: [{
label: '# of Votes',
data: [12, 19, 3, 5, 2, 3],
backgroundColor: [
'rgba(255, 99, 132, 0.2)',
'rgba(54, 162, 235, 0.2)',
'rgba(255, 206, 86, 0.2)',
'rgba(75, 192, 192, 0.2)',
'rgba(153, 102, 255, 0.2)',
'rgba(255, 159, 64, 0.2)'
],
borderColor: [
'rgba(255, 99, 132, 1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)',
'rgba(75, 192, 192, 1)',
'rgba(153, 102, 255, 1)',
'rgba(255, 159, 64, 1)'
],
borderWidth: 1
}]
},
options: {
scales: {
y: {
beginAtZero: true
}
}
}
});
</script>
</body>
</html>";
var PDF = Renderer.RenderHtmlAsPdf(htmlContent);
PDF.SaveAs("dynamic_chart.pdf");
Dim Renderer = New ChromePdfRenderer()
Dim htmlContent As String = "
<html>
<body>
<h1>Dynamic Chart</h1>
<canvas id='myChart'></canvas>
<script src='https://cdn.jsdelivr.net/npm/chart.js'></script>
<script>
var ctx = document.getElementById('myChart').getContext('2d');
new Chart(ctx, {
type: 'bar',
data: {
labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
datasets: [{
label: '# of Votes',
data: [12, 19, 3, 5, 2, 3],
backgroundColor: [
'rgba(255, 99, 132, 0.2)',
'rgba(54, 162, 235, 0.2)',
'rgba(255, 206, 86, 0.2)',
'rgba(75, 192, 192, 0.2)',
'rgba(153, 102, 255, 0.2)',
'rgba(255, 159, 64, 0.2)'
],
borderColor: [
'rgba(255, 99, 132, 1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)',
'rgba(75, 192, 192, 1)',
'rgba(153, 102, 255, 1)',
'rgba(255, 159, 64, 1)'
],
borderWidth: 1
}]
},
options: {
scales: {
y: {
beginAtZero: true
}
}
}
});
</script>
</body>
</html>"
Dim PDF = Renderer.RenderHtmlAsPdf(htmlContent)
PDF.SaveAs("dynamic_chart.pdf")
Dieser Code erstellt ein PDF mit einem dynamischen Diagramm unter Verwendung von Chart.js. Das JavaScript wird während des PDF-Erstellungsprozesses ausgeführt, wodurch ein PDF entsteht, das das gerenderte Diagramm enthält. Ich habe dies verwendet, um dynamische Berichte zu erstellen, bei denen sich die Daten häufig ändern, sodass ich Diagramme und Grafiken nicht manuell aktualisieren muss.
Die Möglichkeit, externe Skripte wie Chart.js in diesem Beispiel einzubinden, bedeutet, dass ich leistungsstarke JavaScript-Bibliotheken nutzen kann, um reichhaltige, dynamische Inhalte in meinen PDFs zu erstellen. Darüber hinaus ermöglicht mir diese Funktion die Verwendung von CSS und responsiven Designtechniken in meinem HTML, wodurch sichergestellt wird, dass das resultierende PDF auf verschiedenen Geräten und Druckformaten großartig aussieht. Ich habe sogar Media Queries verwendet, um PDFs zu erstellen, die sowohl für die Bildschirmansicht als auch für das Drucken aus derselben HTML-Quelle optimiert sind.
Sicherheit hat bei vielen meiner Projekte oberste Priorität, insbesondere wenn es um den Umgang mit sensiblen Informationen geht. Die Verschlüsselungs- und Entschlüsselungsfunktionen von IronPDF waren in diesen Szenarien von unschätzbarem Wert.
var pdf = PdfDocument.FromFile("input.pdf");
// Set user password (for opening the document)
pdf.Password = "user_password";
// Set owner password (for editing, printing, etc.)
pdf.OwnerPassword = "owner_password";
// Set specific permissions
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.NoPrint;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserEdits = IronPdf.Security.PdfEditSecurity.NoEdit;
pdf.SaveAs("highly_secured.pdf");
var pdf = PdfDocument.FromFile("input.pdf");
// Set user password (for opening the document)
pdf.Password = "user_password";
// Set owner password (for editing, printing, etc.)
pdf.OwnerPassword = "owner_password";
// Set specific permissions
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.NoPrint;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserEdits = IronPdf.Security.PdfEditSecurity.NoEdit;
pdf.SaveAs("highly_secured.pdf");
Dim pdf = PdfDocument.FromFile("input.pdf")
' Set user password (for opening the document)
pdf.Password = "user_password"
' Set owner password (for editing, printing, etc.)
pdf.OwnerPassword = "owner_password"
' Set specific permissions
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.NoPrint
pdf.SecuritySettings.AllowUserCopyPasteContent = False
pdf.SecuritySettings.AllowUserEdits = IronPdf.Security.PdfEditSecurity.NoEdit
pdf.SaveAs("highly_secured.pdf")
Dieser Code verschlüsselt nicht nur das PDF mit einem Benutzerkennwort, sondern legt auch ein Besitzerkennwort mit granularer Kontrolle über fest.Berechtigungen. Ich kann genau festlegen, was Benutzer mit dem PDF tun können und was nicht, wie zum Beispiel das Drucken oder Kopieren von Inhalten.
Für die Entschlüsselung verwende ich häufig diesen Ansatz:
try
{
var pdf = PdfDocument.FromFile("encrypted.pdf", "user_password");
pdf.SecuritySettings.RemovePasswordsAndEncryption();
pdf.SaveAs("decrypted.pdf");
Console.WriteLine("PDF decrypted successfully!");
}
catch (Exception ex)
{
Console.WriteLine($"Decryption failed: {ex.Message}");
}
try
{
var pdf = PdfDocument.FromFile("encrypted.pdf", "user_password");
pdf.SecuritySettings.RemovePasswordsAndEncryption();
pdf.SaveAs("decrypted.pdf");
Console.WriteLine("PDF decrypted successfully!");
}
catch (Exception ex)
{
Console.WriteLine($"Decryption failed: {ex.Message}");
}
Try
Dim pdf = PdfDocument.FromFile("encrypted.pdf", "user_password")
pdf.SecuritySettings.RemovePasswordsAndEncryption()
pdf.SaveAs("decrypted.pdf")
Console.WriteLine("PDF decrypted successfully!")
Catch ex As Exception
Console.WriteLine($"Decryption failed: {ex.Message}")
End Try
Dieser Code versucht, eine verschlüsselte PDF-Datei mit einem Benutzerpasswort zu öffnen, entfernt alle Sicherheitsbeschränkungen und speichert sie als neue, unverschlüsselte Datei. Der Try-Catch-Block hilft, Fälle zu behandeln, in denen das Passwort möglicherweise falsch ist.
Ich habe diese Funktionen in verschiedenen Szenarien genutzt, wie zum Beispiel beim Erstellen von sicheren Dokumentenverwaltungssystemen, bei denen unterschiedliche Benutzer unterschiedliche Zugriffslevel auf PDFs haben. Zum Beispiel habe ich in einem medizinischen Aufzeichnungssystem sichergestellt, dass sensible Patientendaten verschlüsselt wurden und nur von autorisiertem Personal abgerufen werden konnten.
Beim Umgang mit großen Mengen an PDFs wird die Dateigröße zu einem entscheidenden Faktor. IronPDF'sKomprimierungsfunktionwar eine Rettung bei der Verwaltung von Speicher- und Bandbreitenbeschränkungen.
Hier ist ein fortgeschritteneres Beispiel dafür, wie ich Kompression verwende:
using IronPdf;
using IronSoftware.Drawing;
using PdfToSvg;
using System;
using PdfDocument = IronPdf.PdfDocument;
#region LicenseKey
License.LicenseKey = "License-Key";
#endregion
var PDF = PdfDocument.FromFile(@"F:/Test.pdf");
// Compress images
PDF.CompressImages(80); // 80% quality
// Compress fonts
PDF.CompressStructTree();
// Save the compressed PDF
PDF.SaveAs(@"F:/highly_compressed.pdf");
// Compare file sizes
var originalSize = new FileInfo(@"F:/Test.pdf").Length;
var compressedSize = new FileInfo(@"F:/highly_compressed.pdf").Length;
var compressionRatio = (1 - (double)compressedSize / originalSize) * 100;
Console.WriteLine($"Original size: {originalSize / 1024} KB");
Console.WriteLine($"Compressed size: {compressedSize / 1024} KB");
Console.WriteLine($"Compression ratio: {compressionRatio:F2}%");
using IronPdf;
using IronSoftware.Drawing;
using PdfToSvg;
using System;
using PdfDocument = IronPdf.PdfDocument;
#region LicenseKey
License.LicenseKey = "License-Key";
#endregion
var PDF = PdfDocument.FromFile(@"F:/Test.pdf");
// Compress images
PDF.CompressImages(80); // 80% quality
// Compress fonts
PDF.CompressStructTree();
// Save the compressed PDF
PDF.SaveAs(@"F:/highly_compressed.pdf");
// Compare file sizes
var originalSize = new FileInfo(@"F:/Test.pdf").Length;
var compressedSize = new FileInfo(@"F:/highly_compressed.pdf").Length;
var compressionRatio = (1 - (double)compressedSize / originalSize) * 100;
Console.WriteLine($"Original size: {originalSize / 1024} KB");
Console.WriteLine($"Compressed size: {compressedSize / 1024} KB");
Console.WriteLine($"Compression ratio: {compressionRatio:F2}%");
Imports IronPdf
Imports IronSoftware.Drawing
Imports PdfToSvg
Imports System
Imports PdfDocument = IronPdf.PdfDocument
#Region "LicenseKey"
License.LicenseKey = "License-Key"
'#End Region
Dim PDF = PdfDocument.FromFile("F:/Test.pdf")
' Compress images
PDF.CompressImages(80) ' 80% quality
' Compress fonts
PDF.CompressStructTree()
' Save the compressed PDF
PDF.SaveAs("F:/highly_compressed.pdf")
' Compare file sizes
Dim originalSize = (New FileInfo("F:/Test.pdf")).Length
Dim compressedSize = (New FileInfo("F:/highly_compressed.pdf")).Length
Dim compressionRatio = (1 - CDbl(compressedSize) / originalSize) * 100
Console.WriteLine($"Original size: {originalSize \ 1024} KB")
Console.WriteLine($"Compressed size: {compressedSize \ 1024} KB")
Console.WriteLine($"Compression ratio: {compressionRatio:F2}%")
Hier ist das Ergebnis:
Ich habe festgestellt, dass diese Kombination von Techniken sehr effektiv ist, um Dateigrößen zu reduzieren, ohne die Qualität signifikant zu beeinträchtigen.
Ich habe diese Funktion in verschiedenen Szenarien verwendet:
E-Mail-Anhänge: Beim Versenden von PDFs per E-Mail komprimiere ich sie, um sicherzustellen, dass sie die Größenbeschränkungen für Anhänge nicht überschreiten.
Webanwendungen: Für PDFs, die von Benutzern heruntergeladen werden müssen, hilft die Komprimierung, die Ladezeiten und die Bandbreitennutzung zu reduzieren.
Archivierung: Beim Speichern großer Mengen von PDFs zur Langzeitaufbewahrung reduziert die Kompression die Speicherkosten erheblich.
In einem Projekt arbeitete ich an einem Dokumentenverwaltungssystem für eine Anwaltskanzlei. Sie hatten Tausende von Akten im PDF-Format, von denen viele gescannte Dokumente mit großen Dateigrößen waren. Durch die Implementierung dieser Komprimierungstechnik konnten wir ihren Speicherbedarf um über 60 % reduzieren, was zu erheblichen Kosteneinsparungen bei ihren Cloud-Speicherrechnungen führte.
Hinzufügendigitale Signaturenzu PDFs ist eine unverzichtbare Funktion für viele Geschäftsprozesse, um die Echtheit von Dokumenten und die Nichtabstreitbarkeit zu gewährleisten. IronPDF macht diese komplexe Aufgabe überraschend einfach. Hier ist ein detaillierteres Beispiel, wie ich digitale Signaturen implementiere:
using IronPdf;
using IronPdf.Signing;
var renderer = new ChromePdfRenderer();
var pdf = PdfDocument.FromFile(@"F:/Contract.pdf");
var signature = new IronPdf.Signing.PdfSignature(@"F:/Iron.pfx", "123")
{
// Step 3. Optional signing options and a handwritten signature graphic
SigningContact = "support@ironsoftware.com",
SigningLocation = "New York, USA",
SigningReason = "Signing PDF"
};
pdf.Sign(signature);
pdf.SaveAs(@"F:/signed.pdf");
using IronPdf;
using IronPdf.Signing;
var renderer = new ChromePdfRenderer();
var pdf = PdfDocument.FromFile(@"F:/Contract.pdf");
var signature = new IronPdf.Signing.PdfSignature(@"F:/Iron.pfx", "123")
{
// Step 3. Optional signing options and a handwritten signature graphic
SigningContact = "support@ironsoftware.com",
SigningLocation = "New York, USA",
SigningReason = "Signing PDF"
};
pdf.Sign(signature);
pdf.SaveAs(@"F:/signed.pdf");
Imports IronPdf
Imports IronPdf.Signing
Private renderer = New ChromePdfRenderer()
Private pdf = PdfDocument.FromFile("F:/Contract.pdf")
Private signature = New IronPdf.Signing.PdfSignature("F:/Iron.pfx", "123") With {
.SigningContact = "support@ironsoftware.com",
.SigningLocation = "New York, USA",
.SigningReason = "Signing PDF"
}
pdf.Sign(signature)
pdf.SaveAs("F:/signed.pdf")
Ich habe diese Funktion in mehreren realen Anwendungen verwendet:
Vertragsverwaltungssystem: Wir haben dies für ein Unternehmen implementiert, das elektronische Signaturen von Verträgen versenden und empfangen musste. Die digitalen Signaturen gewährleisteten die rechtliche Gültigkeit der Verträge.
Medizinisches Aufzeichnungssystem: In einer Gesundheitsanwendung verwendeten wir digitale Signaturen, um Ärzten zu ermöglichen, Patientenakten und Rezepte zu unterzeichnen.
Die Fähigkeit zupDFs teilen und zusammenführenist eine grundlegende Funktion, die ich häufig in Dokumentenverwaltungssystemen verwende. Die Implementierung dieser Funktionen durch IronPDF ist sowohl leistungsstark als auch flexibel. Hier ist ein fortgeschritteneres Beispiel für das Aufteilen und Zusammenführen von PDFs:
using IronPdf;
class Program
{
static void Main(string[] args)
{
// Create first PDF with three pages
const string html_a = @"
<h1>Document A</h1>
<p>This is the first page of Document A.</p>
<div style='page-break-after: always;'></div>
<h2>Document A - Page 2</h2>
<p>This is the second page of Document A.</p>
<div style='page-break-after: always;'></div>
<h2>Document A - Page 3</h2>
<p>This is the third and final page of Document A.</p>";
// Create second PDF with two pages
const string html_b = @"
<h1>Document B</h1>
<p>Welcome to the first page of Document B.</p>
<div style='page-break-after: always;'></div>
<h2>Document B - Page 2</h2>
<p>This is the second and last page of Document B.</p>";
// Render HTML to PDF
var renderer = new ChromePdfRenderer();
var pdfdoc_a = renderer.RenderHtmlAsPdf(html_a);
var pdfdoc_b = renderer.RenderHtmlAsPdf(html_b);
// Merge PDFs
var merged = PdfDocument.Merge(pdfdoc_a, pdfdoc_b);
merged.SaveAs(@"F:/IronPdf/MergedDocument.pdf");
Console.WriteLine("Merged PDF created: MergedDocument.pdf");
// Load the merged PDF
var pdf = PdfDocument.FromFile(@"F:/IronPdf/MergedDocument.pdf");
// Extract the first page
var firstPage = pdf.CopyPage(0);
firstPage.SaveAs(@"F:/IronPdf/FirstPageOnly.pdf");
Console.WriteLine("First page extracted: FirstPageOnly.pdf");
// Extract pages 2 to 4 (note: index starts at 0)
var middlePages = pdf.CopyPages(1, 3);
middlePages.SaveAs(@"F:/IronPdf/Pages2to4.pdf");
Console.WriteLine("Pages 2 to 4 extracted: Pages2to4.pdf");
Console.WriteLine("Process completed. Press any key to exit.");
Console.ReadKey();
}
}
using IronPdf;
class Program
{
static void Main(string[] args)
{
// Create first PDF with three pages
const string html_a = @"
<h1>Document A</h1>
<p>This is the first page of Document A.</p>
<div style='page-break-after: always;'></div>
<h2>Document A - Page 2</h2>
<p>This is the second page of Document A.</p>
<div style='page-break-after: always;'></div>
<h2>Document A - Page 3</h2>
<p>This is the third and final page of Document A.</p>";
// Create second PDF with two pages
const string html_b = @"
<h1>Document B</h1>
<p>Welcome to the first page of Document B.</p>
<div style='page-break-after: always;'></div>
<h2>Document B - Page 2</h2>
<p>This is the second and last page of Document B.</p>";
// Render HTML to PDF
var renderer = new ChromePdfRenderer();
var pdfdoc_a = renderer.RenderHtmlAsPdf(html_a);
var pdfdoc_b = renderer.RenderHtmlAsPdf(html_b);
// Merge PDFs
var merged = PdfDocument.Merge(pdfdoc_a, pdfdoc_b);
merged.SaveAs(@"F:/IronPdf/MergedDocument.pdf");
Console.WriteLine("Merged PDF created: MergedDocument.pdf");
// Load the merged PDF
var pdf = PdfDocument.FromFile(@"F:/IronPdf/MergedDocument.pdf");
// Extract the first page
var firstPage = pdf.CopyPage(0);
firstPage.SaveAs(@"F:/IronPdf/FirstPageOnly.pdf");
Console.WriteLine("First page extracted: FirstPageOnly.pdf");
// Extract pages 2 to 4 (note: index starts at 0)
var middlePages = pdf.CopyPages(1, 3);
middlePages.SaveAs(@"F:/IronPdf/Pages2to4.pdf");
Console.WriteLine("Pages 2 to 4 extracted: Pages2to4.pdf");
Console.WriteLine("Process completed. Press any key to exit.");
Console.ReadKey();
}
}
Imports IronPdf
Friend Class Program
Shared Sub Main(ByVal args() As String)
' Create first PDF with three pages
Const html_a As String = "
<h1>Document A</h1>
<p>This is the first page of Document A.</p>
<div style='page-break-after: always;'></div>
<h2>Document A - Page 2</h2>
<p>This is the second page of Document A.</p>
<div style='page-break-after: always;'></div>
<h2>Document A - Page 3</h2>
<p>This is the third and final page of Document A.</p>"
' Create second PDF with two pages
Const html_b As String = "
<h1>Document B</h1>
<p>Welcome to the first page of Document B.</p>
<div style='page-break-after: always;'></div>
<h2>Document B - Page 2</h2>
<p>This is the second and last page of Document B.</p>"
' Render HTML to PDF
Dim renderer = New ChromePdfRenderer()
Dim pdfdoc_a = renderer.RenderHtmlAsPdf(html_a)
Dim pdfdoc_b = renderer.RenderHtmlAsPdf(html_b)
' Merge PDFs
Dim merged = PdfDocument.Merge(pdfdoc_a, pdfdoc_b)
merged.SaveAs("F:/IronPdf/MergedDocument.pdf")
Console.WriteLine("Merged PDF created: MergedDocument.pdf")
' Load the merged PDF
Dim pdf = PdfDocument.FromFile("F:/IronPdf/MergedDocument.pdf")
' Extract the first page
Dim firstPage = pdf.CopyPage(0)
firstPage.SaveAs("F:/IronPdf/FirstPageOnly.pdf")
Console.WriteLine("First page extracted: FirstPageOnly.pdf")
' Extract pages 2 to 4 (note: index starts at 0)
Dim middlePages = pdf.CopyPages(1, 3)
middlePages.SaveAs("F:/IronPdf/Pages2to4.pdf")
Console.WriteLine("Pages 2 to 4 extracted: Pages2to4.pdf")
Console.WriteLine("Process completed. Press any key to exit.")
Console.ReadKey()
End Sub
End Class
Hier ist das zusammengeführte Dokument, das durch den Code erzeugt wurde:
Automatisierungausfüllen von Formularenwar ein großer Zeitersparer in vielen meiner Projekte. IronPDF ermöglicht es mir, PDF-Formulare programmgesteuert auszufüllen, was bei der Verarbeitung großer Formvolumen oder der Erstellung personalisierter Dokumente von unschätzbarem Wert ist. Hier ist ein umfassenderes Beispiel für das Ausfüllen eines Formulars:
using IronPdf;
using System;
// Load the combined form
PdfDocument pdf = PdfDocument.FromFile(@"F:/completeForm.pdf");
// Handle radio buttons
var radioForm = pdf.Form.FindFormField("traveltype");
radioForm.Value = "Airplane";
// Handle checkbox
var checkboxForm = pdf.Form.FindFormField("taskCompleted");
checkboxForm.Value = "Yes";
// Handle combobox
var comboboxForm = pdf.Form.FindFormField("priority");
comboboxForm.Value = "Low";
// Print out all the available choices for combobox
foreach (var choice in comboboxForm.Choices)
{
Console.WriteLine(choice);
}
// Handle text inputs
pdf.Form.FindFormField("firstname").Value = "John";
pdf.Form.FindFormField("lastname").Value = "Smith";
// Handle text area
pdf.Form.FindFormField("address").Value = "Iron Software LLC\r\n205 N. Michigan Ave.";
// Save the edited PDF
pdf.SaveAs(@"F:/completeFormEdited.pdf");
using IronPdf;
using System;
// Load the combined form
PdfDocument pdf = PdfDocument.FromFile(@"F:/completeForm.pdf");
// Handle radio buttons
var radioForm = pdf.Form.FindFormField("traveltype");
radioForm.Value = "Airplane";
// Handle checkbox
var checkboxForm = pdf.Form.FindFormField("taskCompleted");
checkboxForm.Value = "Yes";
// Handle combobox
var comboboxForm = pdf.Form.FindFormField("priority");
comboboxForm.Value = "Low";
// Print out all the available choices for combobox
foreach (var choice in comboboxForm.Choices)
{
Console.WriteLine(choice);
}
// Handle text inputs
pdf.Form.FindFormField("firstname").Value = "John";
pdf.Form.FindFormField("lastname").Value = "Smith";
// Handle text area
pdf.Form.FindFormField("address").Value = "Iron Software LLC\r\n205 N. Michigan Ave.";
// Save the edited PDF
pdf.SaveAs(@"F:/completeFormEdited.pdf");
Imports Microsoft.VisualBasic
Imports IronPdf
Imports System
' Load the combined form
Private pdf As PdfDocument = PdfDocument.FromFile("F:/completeForm.pdf")
' Handle radio buttons
Private radioForm = pdf.Form.FindFormField("traveltype")
radioForm.Value = "Airplane"
' Handle checkbox
Dim checkboxForm = pdf.Form.FindFormField("taskCompleted")
checkboxForm.Value = "Yes"
' Handle combobox
Dim comboboxForm = pdf.Form.FindFormField("priority")
comboboxForm.Value = "Low"
' Print out all the available choices for combobox
For Each choice In comboboxForm.Choices
Console.WriteLine(choice)
Next choice
' Handle text inputs
pdf.Form.FindFormField("firstname").Value = "John"
pdf.Form.FindFormField("lastname").Value = "Smith"
' Handle text area
pdf.Form.FindFormField("address").Value = "Iron Software LLC" & vbCrLf & "205 N. Michigan Ave."
' Save the edited PDF
pdf.SaveAs("F:/completeFormEdited.pdf")
Ich habe diese Funktion in mehreren realen Anwendungen verwendet:
HR-Einarbeitungssystem: Wir haben ein System entwickelt, das automatisch die Unterlagen für neue Mitarbeiter basierend auf Informationen aus der HR-Datenbank ausfüllt und so stundenlange manuelle Dateneingabe spart.
Versicherungsanspruchsbearbeitung: Für eine Versicherungsgesellschaft haben wir ein System entwickelt, das Schadensformulare mit Informationen des Versicherungsnehmers vorausfüllte, wodurch der Einreichungsprozess erheblich beschleunigt wurde.
Schulbewerbungssystem: In einem Bildungsprojekt haben wir ein System implementiert, das Schulbewerbungsformulare basierend auf Schülerdaten ausfüllt, wodurch der Bewerbungsprozess sowohl für Schüler als auch für das Verwaltungspersonal erleichtert wird.
Erstellung von Steuerformularen: Für ein Buchhaltungsunternehmen haben wir ein System erstellt, das Steuerformulare automatisch basierend auf den Finanzdaten der Kunden ausfüllt, wodurch Fehler reduziert und Zeit während der Steuersaison gespart wird.
Die Fähigkeit, Formulare programmatisch auszufüllen, war ein entscheidender Faktor bei der Automatisierung vieler Geschäftsprozesse, was zu erheblichen Zeitersparnissen und einer Reduzierung von Fehlern bei der manuellen Dateneingabe geführt hat.
Hinzufügenwasserzeichenzu PDFs ist oft notwendig für Branding, Sicherheit oder Statusanzeige. IronPDF bietet flexible Wasserzeichenfunktionen, die ich in vielen Projekten als nützlich empfunden habe. Hier ist ein detaillierteres Beispiel dafür, wie ich Wasserzeichen verwende:
using IronPdf;
using IronSoftware.Drawing;
string watermarkHtml = @"
<img style='width: 250px;' src='https://ironsoftware.com/img/products/ironpdf-logo-text-dotnet.svg'>
<h1>Iron Software</h1>";
ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Watermark</h1>");
// Apply watermark with 45 degrees rotation and 70% opacity
pdf.ApplyWatermark(watermarkHtml, rotation: 30, opacity: 90);
pdf.SaveAs("watermarkOpacity&Rotation.pdf");
using IronPdf;
using IronSoftware.Drawing;
string watermarkHtml = @"
<img style='width: 250px;' src='https://ironsoftware.com/img/products/ironpdf-logo-text-dotnet.svg'>
<h1>Iron Software</h1>";
ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Watermark</h1>");
// Apply watermark with 45 degrees rotation and 70% opacity
pdf.ApplyWatermark(watermarkHtml, rotation: 30, opacity: 90);
pdf.SaveAs("watermarkOpacity&Rotation.pdf");
Imports IronPdf
Imports IronSoftware.Drawing
Private watermarkHtml As String = "
<img style='width: 250px;' src='https://ironsoftware.com/img/products/ironpdf-logo-text-dotnet.svg'>
<h1>Iron Software</h1>"
Private renderer As New ChromePdfRenderer()
Private pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>Watermark</h1>")
' Apply watermark with 45 degrees rotation and 70% opacity
pdf.ApplyWatermark(watermarkHtml, rotation:= 30, opacity:= 90)
pdf.SaveAs("watermarkOpacity&Rotation.pdf")
Die dynamische Vorlagenerstellung von APITemplate ist eine leistungsstarke Funktion, die die Erstellung hochgradig anpassbarer Dokumente unter Verwendung angepasster JSON-Daten ermöglicht. APITemplate's API unterstützt dynamische Komponenten. Sie können sowohl PDF- als auch Bildausgaben Ihres Codes erhalten. In der API-Konsole konnte ich den WYSIWYG-Editor verwenden, um PDF-Dokumente problemlos zu erstellen.
Lassen Sie uns tiefer darauf eingehen, wie ich dies in meinen Projekten verwendet habe.
using System;
using System.IO;
using System.Net.Http;
using System.Text.Json;
using System.Threading.Tasks;
namespace csharp
{
class ReturnContent
{
public string download_url
{
get;
set;
}
public string status
{
get;
set;
}
}
class Program
{
static async Task Main(string[] args)
{
var api_key = "a9e4MjA2NTg6MTc3Njk6Uk1ZSzVjTWs1T3d6VE9Mdw=";
var template_id = "bf077b23b4a407ae";
var url = $"https://rest.apitemplate.io/v2/create-pdf?template_id={template_id}";
var data = new
{
date = "15/05/2022",
invoice_no = "435568799",
sender_address1 = "3244 Jurong Drive",
sender_address2 = "Falmouth Maine 1703",
sender_phone = "255-781-6789",
sender_email = "dev@ironsoftware.com",
rece_addess1 = "2354 Lakeside Drive",
rece_addess2 = "New York 234562 ",
rece_phone = "34333-84-223",
rece_email = "info@ironsoftware.com",
items = new[] {
new {
item_name = "Oil",
unit = 1,
unit_price = 100,
total = 100
},
new {
item_name = "Rice",
unit = 2,
unit_price = 200,
total = 400
},
new {
item_name = "Orange",
unit = 7,
unit_price = 20,
total = 1400
}
},
total = "total",
footer_email = "info@ironsoftware.com"
};
var json_content = JsonSerializer.Serialize(data);
var buffer = System.Text.Encoding.UTF8.GetBytes(json_content);
var byteContent = new ByteArrayContent(buffer);
Console.WriteLine(json_content);
var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-KEY", api_key);
var response = await client.PostAsync(url, byteContent);
var ret = await response.Content.ReadAsStringAsync();
var returnContent = JsonSerializer.Deserialize<ReturnContent>(ret);
if (returnContent.status == "success")
{
Console.WriteLine($"Downloading {returnContent.download_url}...");
var download_response = await client.GetAsync(returnContent.download_url);
using (var stream = await download_response.Content.ReadAsStreamAsync())
{
var fileInfo = new FileInfo(@"F:/generated_document.pdf");
using (var fileStream = fileInfo.OpenWrite())
{
await stream.CopyToAsync(fileStream);
}
}
Console.WriteLine("PDF file has been downloaded and saved as 'generated_document.pdf'");
}
}
}
}
using System;
using System.IO;
using System.Net.Http;
using System.Text.Json;
using System.Threading.Tasks;
namespace csharp
{
class ReturnContent
{
public string download_url
{
get;
set;
}
public string status
{
get;
set;
}
}
class Program
{
static async Task Main(string[] args)
{
var api_key = "a9e4MjA2NTg6MTc3Njk6Uk1ZSzVjTWs1T3d6VE9Mdw=";
var template_id = "bf077b23b4a407ae";
var url = $"https://rest.apitemplate.io/v2/create-pdf?template_id={template_id}";
var data = new
{
date = "15/05/2022",
invoice_no = "435568799",
sender_address1 = "3244 Jurong Drive",
sender_address2 = "Falmouth Maine 1703",
sender_phone = "255-781-6789",
sender_email = "dev@ironsoftware.com",
rece_addess1 = "2354 Lakeside Drive",
rece_addess2 = "New York 234562 ",
rece_phone = "34333-84-223",
rece_email = "info@ironsoftware.com",
items = new[] {
new {
item_name = "Oil",
unit = 1,
unit_price = 100,
total = 100
},
new {
item_name = "Rice",
unit = 2,
unit_price = 200,
total = 400
},
new {
item_name = "Orange",
unit = 7,
unit_price = 20,
total = 1400
}
},
total = "total",
footer_email = "info@ironsoftware.com"
};
var json_content = JsonSerializer.Serialize(data);
var buffer = System.Text.Encoding.UTF8.GetBytes(json_content);
var byteContent = new ByteArrayContent(buffer);
Console.WriteLine(json_content);
var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-KEY", api_key);
var response = await client.PostAsync(url, byteContent);
var ret = await response.Content.ReadAsStringAsync();
var returnContent = JsonSerializer.Deserialize<ReturnContent>(ret);
if (returnContent.status == "success")
{
Console.WriteLine($"Downloading {returnContent.download_url}...");
var download_response = await client.GetAsync(returnContent.download_url);
using (var stream = await download_response.Content.ReadAsStreamAsync())
{
var fileInfo = new FileInfo(@"F:/generated_document.pdf");
using (var fileStream = fileInfo.OpenWrite())
{
await stream.CopyToAsync(fileStream);
}
}
Console.WriteLine("PDF file has been downloaded and saved as 'generated_document.pdf'");
}
}
}
}
Imports System
Imports System.IO
Imports System.Net.Http
Imports System.Text.Json
Imports System.Threading.Tasks
Namespace csharp
Friend Class ReturnContent
Public Property download_url() As String
Public Property status() As String
End Class
Friend Class Program
Shared Async Function Main(ByVal args() As String) As Task
Dim api_key = "a9e4MjA2NTg6MTc3Njk6Uk1ZSzVjTWs1T3d6VE9Mdw="
Dim template_id = "bf077b23b4a407ae"
Dim url = $"https://rest.apitemplate.io/v2/create-pdf?template_id={template_id}"
Dim data = New With {
Key .date = "15/05/2022",
Key .invoice_no = "435568799",
Key .sender_address1 = "3244 Jurong Drive",
Key .sender_address2 = "Falmouth Maine 1703",
Key .sender_phone = "255-781-6789",
Key .sender_email = "dev@ironsoftware.com",
Key .rece_addess1 = "2354 Lakeside Drive",
Key .rece_addess2 = "New York 234562 ",
Key .rece_phone = "34333-84-223",
Key .rece_email = "info@ironsoftware.com",
Key .items = {
New With {
Key .item_name = "Oil",
Key .unit = 1,
Key .unit_price = 100,
Key .total = 100
},
New With {
Key .item_name = "Rice",
Key .unit = 2,
Key .unit_price = 200,
Key .total = 400
},
New With {
Key .item_name = "Orange",
Key .unit = 7,
Key .unit_price = 20,
Key .total = 1400
}
},
Key .total = "total",
Key .footer_email = "info@ironsoftware.com"
}
Dim json_content = JsonSerializer.Serialize(data)
Dim buffer = System.Text.Encoding.UTF8.GetBytes(json_content)
Dim byteContent = New ByteArrayContent(buffer)
Console.WriteLine(json_content)
Dim client = New HttpClient()
client.DefaultRequestHeaders.Add("X-API-KEY", api_key)
Dim response = Await client.PostAsync(url, byteContent)
Dim ret = Await response.Content.ReadAsStringAsync()
Dim returnContent = JsonSerializer.Deserialize(Of ReturnContent)(ret)
If returnContent.status = "success" Then
Console.WriteLine($"Downloading {returnContent.download_url}...")
Dim download_response = Await client.GetAsync(returnContent.download_url)
Using stream = Await download_response.Content.ReadAsStreamAsync()
Dim fileInfo As New FileInfo("F:/generated_document.pdf")
Using fileStream = fileInfo.OpenWrite()
Await stream.CopyToAsync(fileStream)
End Using
End Using
Console.WriteLine("PDF file has been downloaded and saved as 'generated_document.pdf'")
End If
End Function
End Class
End Namespace
Dies ist das erzeugte PDF-Dokument:
Die Massen-PDF-Generierungsfunktion von APITemplate ist ein Wendepunkt, wenn es darum geht, mehrere Dokumente mit einem einzigen API-Aufruf zu erstellen. Hier ist ein detaillierteres Beispiel dafür, wie ich es verwendet habe:
using System;
using System.IO;
using System.Net.Http;
using System.Text.Json;
using System.Threading.Tasks;
using System.Collections.Generic;
namespace csharp
{
class ReturnContent
{
public string download_url { get; set; }
public string status { get; set; }
}
class Program
{
static async Task Main(string[] args)
{
var api_key = "a9e4MjA2NTg6MTc3Njk6Uk1ZSzVjTWs1T3d6VE9Mdw=";
var template_id = "d4f77b23b4ab09fa";
var url = $"https://rest.apitemplate.io/v2/create-pdf?template_id={template_id}";
var membershipCards = new List<object>
{
new
{
name = "Iron Dev 1",
email = "dev1@ironsoftware.com",
membership_id = "M001",
expiry_date = "2024-12-31"
},
new
{
name = "Iron Dev 2",
email = "dev2@ironsoftware.com",
membership_id = "M002",
expiry_date = "2025-06-30"
},
new
{
name = "Iron Dev 3",
email = "dev3@ironsoftware.com",
membership_id = "M003",
expiry_date = "2024-09-15"
}
};
var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-KEY", api_key);
for (int i = 0; i < membershipCards.Count; i++)
{
var json_content = JsonSerializer.Serialize(membershipCards[i]);
var buffer = System.Text.Encoding.UTF8.GetBytes(json_content);
var byteContent = new ByteArrayContent(buffer);
Console.WriteLine($"Creating PDF for {((dynamic)membershipCards[i]).name}...");
var response = await client.PostAsync(url, byteContent);
var ret = await response.Content.ReadAsStringAsync();
var returnContent = JsonSerializer.Deserialize<ReturnContent>(ret);
if (returnContent.status == "success")
{
Console.WriteLine($"Downloading {returnContent.download_url}...");
var download_response = await client.GetAsync(returnContent.download_url);
using (var stream = await download_response.Content.ReadAsStreamAsync())
{
var fileInfo = new FileInfo($"F:/membership_card_{i + 1}.pdf");
using (var fileStream = fileInfo.OpenWrite())
{
await stream.CopyToAsync(fileStream);
}
}
Console.WriteLine($"PDF file has been downloaded and saved as 'membership_card_{i + 1}.pdf'");
}
else
{
Console.WriteLine($"Failed to create PDF for {((dynamic)membershipCards[i]).name}. Status: {returnContent.status}");
}
}
}
}
}
using System;
using System.IO;
using System.Net.Http;
using System.Text.Json;
using System.Threading.Tasks;
using System.Collections.Generic;
namespace csharp
{
class ReturnContent
{
public string download_url { get; set; }
public string status { get; set; }
}
class Program
{
static async Task Main(string[] args)
{
var api_key = "a9e4MjA2NTg6MTc3Njk6Uk1ZSzVjTWs1T3d6VE9Mdw=";
var template_id = "d4f77b23b4ab09fa";
var url = $"https://rest.apitemplate.io/v2/create-pdf?template_id={template_id}";
var membershipCards = new List<object>
{
new
{
name = "Iron Dev 1",
email = "dev1@ironsoftware.com",
membership_id = "M001",
expiry_date = "2024-12-31"
},
new
{
name = "Iron Dev 2",
email = "dev2@ironsoftware.com",
membership_id = "M002",
expiry_date = "2025-06-30"
},
new
{
name = "Iron Dev 3",
email = "dev3@ironsoftware.com",
membership_id = "M003",
expiry_date = "2024-09-15"
}
};
var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-KEY", api_key);
for (int i = 0; i < membershipCards.Count; i++)
{
var json_content = JsonSerializer.Serialize(membershipCards[i]);
var buffer = System.Text.Encoding.UTF8.GetBytes(json_content);
var byteContent = new ByteArrayContent(buffer);
Console.WriteLine($"Creating PDF for {((dynamic)membershipCards[i]).name}...");
var response = await client.PostAsync(url, byteContent);
var ret = await response.Content.ReadAsStringAsync();
var returnContent = JsonSerializer.Deserialize<ReturnContent>(ret);
if (returnContent.status == "success")
{
Console.WriteLine($"Downloading {returnContent.download_url}...");
var download_response = await client.GetAsync(returnContent.download_url);
using (var stream = await download_response.Content.ReadAsStreamAsync())
{
var fileInfo = new FileInfo($"F:/membership_card_{i + 1}.pdf");
using (var fileStream = fileInfo.OpenWrite())
{
await stream.CopyToAsync(fileStream);
}
}
Console.WriteLine($"PDF file has been downloaded and saved as 'membership_card_{i + 1}.pdf'");
}
else
{
Console.WriteLine($"Failed to create PDF for {((dynamic)membershipCards[i]).name}. Status: {returnContent.status}");
}
}
}
}
}
'INSTANT VB NOTE: 'Option Strict Off' is used here since dynamic typing is used:
Option Strict Off
Imports System
Imports System.IO
Imports System.Net.Http
Imports System.Text.Json
Imports System.Threading.Tasks
Imports System.Collections.Generic
Namespace csharp
Friend Class ReturnContent
Public Property download_url() As String
Public Property status() As String
End Class
Friend Class Program
Shared Async Function Main(ByVal args() As String) As Task
Dim api_key = "a9e4MjA2NTg6MTc3Njk6Uk1ZSzVjTWs1T3d6VE9Mdw="
Dim template_id = "d4f77b23b4ab09fa"
Dim url = $"https://rest.apitemplate.io/v2/create-pdf?template_id={template_id}"
Dim membershipCards = New List(Of Object) From {
New With {
Key .name = "Iron Dev 1",
Key .email = "dev1@ironsoftware.com",
Key .membership_id = "M001",
Key .expiry_date = "2024-12-31"
},
New With {
Key .name = "Iron Dev 2",
Key .email = "dev2@ironsoftware.com",
Key .membership_id = "M002",
Key .expiry_date = "2025-06-30"
},
New With {
Key .name = "Iron Dev 3",
Key .email = "dev3@ironsoftware.com",
Key .membership_id = "M003",
Key .expiry_date = "2024-09-15"
}
}
Dim client = New HttpClient()
client.DefaultRequestHeaders.Add("X-API-KEY", api_key)
For i As Integer = 0 To membershipCards.Count - 1
Dim json_content = JsonSerializer.Serialize(membershipCards(i))
Dim buffer = System.Text.Encoding.UTF8.GetBytes(json_content)
Dim byteContent = New ByteArrayContent(buffer)
'INSTANT VB NOTE: In the following line, Instant VB substituted 'Object' for 'dynamic' - this will work in VB with Option Strict Off:
Console.WriteLine($"Creating PDF for {CType(membershipCards(i), Object).name}...")
Dim response = Await client.PostAsync(url, byteContent)
Dim ret = Await response.Content.ReadAsStringAsync()
Dim returnContent = JsonSerializer.Deserialize(Of ReturnContent)(ret)
If returnContent.status = "success" Then
Console.WriteLine($"Downloading {returnContent.download_url}...")
Dim download_response = Await client.GetAsync(returnContent.download_url)
Using stream = Await download_response.Content.ReadAsStreamAsync()
Dim fileInfo As New FileInfo($"F:/membership_card_{i + 1}.pdf")
Using fileStream = fileInfo.OpenWrite()
Await stream.CopyToAsync(fileStream)
End Using
End Using
Console.WriteLine($"PDF file has been downloaded and saved as 'membership_card_{i + 1}.pdf'")
Else
'INSTANT VB NOTE: In the following line, Instant VB substituted 'Object' for 'dynamic' - this will work in VB with Option Strict Off:
Console.WriteLine($"Failed to create PDF for {CType(membershipCards(i), Object).name}. Status: {returnContent.status}")
End If
Next i
End Function
End Class
End Namespace
Dieser Code erzeugt mehrere Mitgliedskarten in einem einzelnen API-Aufruf. Jede Karte wird mit individuellen Mitgliedsinformationen angepasst. Hier ist die eine Karte, die von diesem Code erzeugt wird:
Obwohl die PDF-Generierung der primäre Schwerpunkt von APITemplate ist, sind seine Fähigkeiten zur Bildgenerierung ebenso beeindruckend. Sie können soziale Medienbilder mithilfe von Bildvorlagen in der Konsole erstellen. Es bietet auch einen intelligenten Zuschnitt für reaktionsfähige Bilder. Die Banner-Generierungs-API ist dieselbe wie die Bild-API. Hier ist ein komplexeres Beispiel dafür, wie ich es verwendet habe:
using System;
using System.IO;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
namespace csharp
{
class ReturnContent
{
public string download_url { get; set; }
public string status { get; set; }
}
class Program
{
static async Task Main(string[] args)
{
var api_key = "a9e4MjA2NTg6MTc3Njk6Uk1ZSzVjTWs1T3d6VE9Mdw=";
var template_id = "f4377b23b4aeeed0";
var url = $"https://rest.apitemplate.io/v2/create-image?template_id={template_id}";
var json_content = @"{
""overrides"": [
{
""name"": ""rect_image_bg"",
""stroke"": ""grey"",
""src"": ""https://images.unsplash.com/photo-1542401886-65d6c61db217?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxOTc1MDZ8MHwxfHNlYXJjaHwzfHxkZXNlcnR8ZW58MHwwfHx8MTYyMTUxOTI2OA&ixlib=rb-1.2.1&q=80&w=1080""
},
{
""name"": ""rect_container"",
""stroke"": ""grey"",
""backgroundColor"": ""rgba(255, 255, 255, 0.62)""
},
{
""name"": ""text_quote"",
""text"": ""Just witnessed the most breathtaking sunset over the Sahara. The way the light dances on the dunes, painting the sky in shades of orange and purple, is truly magical. Nature's artistry at its finest! 🌅🐫 #DesertAdventures #SaharaSkies"",
""textBackgroundColor"": ""rgba(246, 243, 243, 0)"",
""color"": ""#414141""
},
{
""name"": ""text_footer"",
""text"": ""2024-07-30 - Twitter - iPhone 16 Pro"",
""textBackgroundColor"": ""rgba(246, 243, 243, 0)"",
""color"": ""#666666""
},
{
""name"": ""circle_profile"",
""stroke"": ""grey"",
""src"": ""https://images.unsplash.com/photo-1520998116484-6eeb2f72b5b9?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxOTc1MDZ8MHwxfHNlYXJjaHw2Mnx8aGFwcHl8ZW58MHwwfHx8MTYyMTY5MjkwNw&ixlib=rb-1.2.1&q=80&w=1080""
},
{
""name"": ""text_name"",
""text"": ""Sarah Wanderlust"",
""textBackgroundColor"": ""rgba(246, 243, 243, 0)"",
""color"": ""#4E4E4E""
},
{
""name"": ""text_twitter"",
""text"": ""@sarahexplores"",
""textBackgroundColor"": ""rgba(246, 243, 243, 0)"",
""color"": ""#4E4E4E""
}
]
}";
var buffer = System.Text.Encoding.UTF8.GetBytes(json_content);
var byteContent = new ByteArrayContent(buffer);
Console.WriteLine(json_content);
var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-KEY", api_key);
var response = await client.PostAsync(url, byteContent);
var ret = await response.Content.ReadAsStringAsync();
var returnContent = JsonSerializer.Deserialize<ReturnContent>(ret);
if (returnContent.status == "success")
{
Console.WriteLine($"Downloading {returnContent.download_url}...");
var download_response = await client.GetAsync(returnContent.download_url);
using (var stream = await download_response.Content.ReadAsStreamAsync())
{
var fileInfo = new FileInfo("image.jpeg");
using (var fileStream = fileInfo.OpenWrite())
{
await stream.CopyToAsync(fileStream);
}
}
}
}
}
}
using System;
using System.IO;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
namespace csharp
{
class ReturnContent
{
public string download_url { get; set; }
public string status { get; set; }
}
class Program
{
static async Task Main(string[] args)
{
var api_key = "a9e4MjA2NTg6MTc3Njk6Uk1ZSzVjTWs1T3d6VE9Mdw=";
var template_id = "f4377b23b4aeeed0";
var url = $"https://rest.apitemplate.io/v2/create-image?template_id={template_id}";
var json_content = @"{
""overrides"": [
{
""name"": ""rect_image_bg"",
""stroke"": ""grey"",
""src"": ""https://images.unsplash.com/photo-1542401886-65d6c61db217?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxOTc1MDZ8MHwxfHNlYXJjaHwzfHxkZXNlcnR8ZW58MHwwfHx8MTYyMTUxOTI2OA&ixlib=rb-1.2.1&q=80&w=1080""
},
{
""name"": ""rect_container"",
""stroke"": ""grey"",
""backgroundColor"": ""rgba(255, 255, 255, 0.62)""
},
{
""name"": ""text_quote"",
""text"": ""Just witnessed the most breathtaking sunset over the Sahara. The way the light dances on the dunes, painting the sky in shades of orange and purple, is truly magical. Nature's artistry at its finest! 🌅🐫 #DesertAdventures #SaharaSkies"",
""textBackgroundColor"": ""rgba(246, 243, 243, 0)"",
""color"": ""#414141""
},
{
""name"": ""text_footer"",
""text"": ""2024-07-30 - Twitter - iPhone 16 Pro"",
""textBackgroundColor"": ""rgba(246, 243, 243, 0)"",
""color"": ""#666666""
},
{
""name"": ""circle_profile"",
""stroke"": ""grey"",
""src"": ""https://images.unsplash.com/photo-1520998116484-6eeb2f72b5b9?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxOTc1MDZ8MHwxfHNlYXJjaHw2Mnx8aGFwcHl8ZW58MHwwfHx8MTYyMTY5MjkwNw&ixlib=rb-1.2.1&q=80&w=1080""
},
{
""name"": ""text_name"",
""text"": ""Sarah Wanderlust"",
""textBackgroundColor"": ""rgba(246, 243, 243, 0)"",
""color"": ""#4E4E4E""
},
{
""name"": ""text_twitter"",
""text"": ""@sarahexplores"",
""textBackgroundColor"": ""rgba(246, 243, 243, 0)"",
""color"": ""#4E4E4E""
}
]
}";
var buffer = System.Text.Encoding.UTF8.GetBytes(json_content);
var byteContent = new ByteArrayContent(buffer);
Console.WriteLine(json_content);
var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-KEY", api_key);
var response = await client.PostAsync(url, byteContent);
var ret = await response.Content.ReadAsStringAsync();
var returnContent = JsonSerializer.Deserialize<ReturnContent>(ret);
if (returnContent.status == "success")
{
Console.WriteLine($"Downloading {returnContent.download_url}...");
var download_response = await client.GetAsync(returnContent.download_url);
using (var stream = await download_response.Content.ReadAsStreamAsync())
{
var fileInfo = new FileInfo("image.jpeg");
using (var fileStream = fileInfo.OpenWrite())
{
await stream.CopyToAsync(fileStream);
}
}
}
}
}
}
Imports System
Imports System.IO
Imports System.Net.Http
Imports System.Text
Imports System.Text.Json
Imports System.Threading.Tasks
Namespace csharp
Friend Class ReturnContent
Public Property download_url() As String
Public Property status() As String
End Class
Friend Class Program
Shared Async Function Main(ByVal args() As String) As Task
Dim api_key = "a9e4MjA2NTg6MTc3Njk6Uk1ZSzVjTWs1T3d6VE9Mdw="
Dim template_id = "f4377b23b4aeeed0"
Dim url = $"https://rest.apitemplate.io/v2/create-image?template_id={template_id}"
Dim json_content = "{
""overrides"": [
{
""name"": ""rect_image_bg"",
""stroke"": ""grey"",
""src"": ""https://images.unsplash.com/photo-1542401886-65d6c61db217?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxOTc1MDZ8MHwxfHNlYXJjaHwzfHxkZXNlcnR8ZW58MHwwfHx8MTYyMTUxOTI2OA&ixlib=rb-1.2.1&q=80&w=1080""
},
{
""name"": ""rect_container"",
""stroke"": ""grey"",
""backgroundColor"": ""rgba(255, 255, 255, 0.62)""
},
{
""name"": ""text_quote"",
""text"": ""Just witnessed the most breathtaking sunset over the Sahara. The way the light dances on the dunes, painting the sky in shades of orange and purple, is truly magical. Nature's artistry at its finest! 🌅🐫 #DesertAdventures #SaharaSkies"",
""textBackgroundColor"": ""rgba(246, 243, 243, 0)"",
""color"": ""#414141""
},
{
""name"": ""text_footer"",
""text"": ""2024-07-30 - Twitter - iPhone 16 Pro"",
""textBackgroundColor"": ""rgba(246, 243, 243, 0)"",
""color"": ""#666666""
},
{
""name"": ""circle_profile"",
""stroke"": ""grey"",
""src"": ""https://images.unsplash.com/photo-1520998116484-6eeb2f72b5b9?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxOTc1MDZ8MHwxfHNlYXJjaHw2Mnx8aGFwcHl8ZW58MHwwfHx8MTYyMTY5MjkwNw&ixlib=rb-1.2.1&q=80&w=1080""
},
{
""name"": ""text_name"",
""text"": ""Sarah Wanderlust"",
""textBackgroundColor"": ""rgba(246, 243, 243, 0)"",
""color"": ""#4E4E4E""
},
{
""name"": ""text_twitter"",
""text"": ""@sarahexplores"",
""textBackgroundColor"": ""rgba(246, 243, 243, 0)"",
""color"": ""#4E4E4E""
}
]
}"
Dim buffer = System.Text.Encoding.UTF8.GetBytes(json_content)
Dim byteContent = New ByteArrayContent(buffer)
Console.WriteLine(json_content)
Dim client = New HttpClient()
client.DefaultRequestHeaders.Add("X-API-KEY", api_key)
Dim response = Await client.PostAsync(url, byteContent)
Dim ret = Await response.Content.ReadAsStringAsync()
Dim returnContent = JsonSerializer.Deserialize(Of ReturnContent)(ret)
If returnContent.status = "success" Then
Console.WriteLine($"Downloading {returnContent.download_url}...")
Dim download_response = Await client.GetAsync(returnContent.download_url)
Using stream = Await download_response.Content.ReadAsStreamAsync()
Dim fileInfo As New FileInfo("image.jpeg")
Using fileStream = fileInfo.OpenWrite()
Await stream.CopyToAsync(fileStream)
End Using
End Using
End If
End Function
End Class
End Namespace
Dieses Beispiel erzeugt ein Produktwerbebild mit dynamischen Inhalten, benutzerdefinierter Hintergrundfarbe und einem eingebetteten Produktbild.
Die integrierte QR-Code-Generator-Funktion von APITemplate hat viele meiner Projekte erheblich bereichert. Sie können Daten-URLs anstelle von Inhalten für QR-Codes verwenden. Hier ist ein komplexeres Beispiel dafür, wie ich es verwendet habe:
using System;
using System.IO;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
namespace csharp
{
class ReturnContent
{
public string download_url { get; set; }
public string status { get; set; }
}
class Program
{
static async Task Main(string[] args)
{
var api_key = "API-Key";
var template_id = "Template-Key";
var url = $"https://rest.apitemplate.io/v2/create-image?template_id={template_id}";
var json_content = @"{
""overrides"": [
{
""name"": ""background-color"",
""stroke"": ""grey"",
""backgroundColor"": ""#FFFFFF""
},
{
""name"": ""qr_1"",
""content"": ""http://ironpdf.com/"",
""backgroundColor"": ""white"",
""color"": ""#000000""
}
]
}";
var buffer = System.Text.Encoding.UTF8.GetBytes(json_content);
var byteContent = new ByteArrayContent(buffer);
//Console.WriteLine(json_content);
var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-KEY", api_key);
var response = await client.PostAsync(url, byteContent);
var ret = await response.Content.ReadAsStringAsync();
var returnContent = JsonSerializer.Deserialize<ReturnContent>(ret);
Console.WriteLine(returnContent.status);
if (returnContent.status == "success")
{
Console.WriteLine($"Downloading {returnContent.download_url}...");
var download_response = await client.GetAsync(returnContent.download_url);
using (var stream = await download_response.Content.ReadAsStreamAsync())
{
var fileInfo = new FileInfo(@"F:/QRimage.jpeg");
using (var fileStream = fileInfo.OpenWrite())
{
await stream.CopyToAsync(fileStream);
}
}
}
}
}
}
using System;
using System.IO;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
namespace csharp
{
class ReturnContent
{
public string download_url { get; set; }
public string status { get; set; }
}
class Program
{
static async Task Main(string[] args)
{
var api_key = "API-Key";
var template_id = "Template-Key";
var url = $"https://rest.apitemplate.io/v2/create-image?template_id={template_id}";
var json_content = @"{
""overrides"": [
{
""name"": ""background-color"",
""stroke"": ""grey"",
""backgroundColor"": ""#FFFFFF""
},
{
""name"": ""qr_1"",
""content"": ""http://ironpdf.com/"",
""backgroundColor"": ""white"",
""color"": ""#000000""
}
]
}";
var buffer = System.Text.Encoding.UTF8.GetBytes(json_content);
var byteContent = new ByteArrayContent(buffer);
//Console.WriteLine(json_content);
var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-KEY", api_key);
var response = await client.PostAsync(url, byteContent);
var ret = await response.Content.ReadAsStringAsync();
var returnContent = JsonSerializer.Deserialize<ReturnContent>(ret);
Console.WriteLine(returnContent.status);
if (returnContent.status == "success")
{
Console.WriteLine($"Downloading {returnContent.download_url}...");
var download_response = await client.GetAsync(returnContent.download_url);
using (var stream = await download_response.Content.ReadAsStreamAsync())
{
var fileInfo = new FileInfo(@"F:/QRimage.jpeg");
using (var fileStream = fileInfo.OpenWrite())
{
await stream.CopyToAsync(fileStream);
}
}
}
}
}
}
Imports System
Imports System.IO
Imports System.Net.Http
Imports System.Text
Imports System.Text.Json
Imports System.Threading.Tasks
Namespace csharp
Friend Class ReturnContent
Public Property download_url() As String
Public Property status() As String
End Class
Friend Class Program
Shared Async Function Main(ByVal args() As String) As Task
Dim api_key = "API-Key"
Dim template_id = "Template-Key"
Dim url = $"https://rest.apitemplate.io/v2/create-image?template_id={template_id}"
Dim json_content = "{
""overrides"": [
{
""name"": ""background-color"",
""stroke"": ""grey"",
""backgroundColor"": ""#FFFFFF""
},
{
""name"": ""qr_1"",
""content"": ""http://ironpdf.com/"",
""backgroundColor"": ""white"",
""color"": ""#000000""
}
]
}"
Dim buffer = System.Text.Encoding.UTF8.GetBytes(json_content)
Dim byteContent = New ByteArrayContent(buffer)
'Console.WriteLine(json_content);
Dim client = New HttpClient()
client.DefaultRequestHeaders.Add("X-API-KEY", api_key)
Dim response = Await client.PostAsync(url, byteContent)
Dim ret = Await response.Content.ReadAsStringAsync()
Dim returnContent = JsonSerializer.Deserialize(Of ReturnContent)(ret)
Console.WriteLine(returnContent.status)
If returnContent.status = "success" Then
Console.WriteLine($"Downloading {returnContent.download_url}...")
Dim download_response = Await client.GetAsync(returnContent.download_url)
Using stream = Await download_response.Content.ReadAsStreamAsync()
Dim fileInfo As New FileInfo("F:/QRimage.jpeg")
Using fileStream = fileInfo.OpenWrite()
Await stream.CopyToAsync(fileStream)
End Using
End Using
End If
End Function
End Class
End Namespace
Als C#-Entwickler, der häufig mit der Erstellung und Bearbeitung von PDFs arbeitet, habe ich festgestellt, dass die Qualität der Dokumentation und des Supports ein Projekt entscheidend beeinflussen kann. Lassen Sie uns in meine Erfahrungen mit der Dokumentation und Unterstützung für IronPDF und APITemplate eintauchen.
Die Dokumentation von IronPDF ist umfassend und gut strukturiert, was eine beträchtliche Hilfe bei meinen Projekten war. Hier ist eine detaillierte Übersicht über meine Erfahrung: Die IronPDF-Dokumentation ist unter https://ironpdf.com/docs/ verfügbar und ziemlich umfangreich. Hier sind einige wichtige Aspekte, die ich geschätzt habe:
Erste Schritte Leitfaden: Die Dokumentation beginnt mit einer klaren, schrittweisen Anleitung zur Installation von IronPDF über NuGet und zur Erstellung Ihres ersten PDFs. Das hat mir geholfen, schnell in meinen ersten Projekten loszulegen.
API-Referenz: Die API-Referenz ist umfassend und deckt alle Klassen und Methoden ab. Jeder Eintrag enthält C#-Beispiele, die ich beim Implementieren spezieller Funktionen als äußerst wertvoll empfunden habe.
Codebeispiele: In der gesamten Dokumentation gibt es zahlreiche Code-Snippets und vollständige Beispiele. Diese waren besonders hilfreich, als ich komplexere PDF-Operationen implementieren musste.
Tutorials und Anleitungen: IronPDF bietet detaillierte Tutorials für gängige Aufgaben wie das Erstellen von PDFs aus HTML, das Hinzufügen von Wasserzeichen oder das Arbeiten mit Formularen. Diese leiteten mich durch fortgeschrittenere Anwendungsfälle.
IronPDF'skontaktwar reaktionsschnell und die Supportkanäle waren in meiner Erfahrung äußerst hilfreich:
E-Mail-Support: Wenn ich komplexe Probleme hatte, habe ich ihren E-Mail-Support genutzt. Die Reaktionszeiten lagen typischerweise bei 24 Stunden, und das Support-Team war sachkundig über das Produkt.
Community-Forum: IronPDF betreibt ein Community-Forum, in dem Entwickler Fragen stellen und Lösungen teilen können. Ich habe sowohl Antworten auf meine Fragen gefunden als auch Lösungen auf der Grundlage meiner Erfahrungen beigetragen.
Stack Overflow: Das IronPDF-Team überwacht aktiv den[ironPDF]Tagauf Stack Overflow. Ich habe hilfreiche Antworten auf die dort gestellten Fragen erhalten.
Regelmäßige Updates: IronPDF veröffentlicht häufig Updates mit Fehlerbehebungen und neuen Funktionen. Das Änderungsprotokoll ist detailliert und hilft mir zu verstehen, was in jeder Version neu oder geändert wurde.
Die Dokumentation und Unterstützungsstruktur von APITemplate unterscheidet sich von der von IronPDF und spiegelt seine Natur als cloud-basierter Dienst wider. Hier ist meine Erfahrung:
Die Dokumentation von APITemplate ist unter https://docs.apitemplate.io/reference/api-reference.html verfügbar und konzentriert sich auf die Nutzung der API. Hier sind die wichtigsten Punkte:
API-Referenz: Die Dokumentation bietet eine klare API-Referenz mit einer detaillierten Beschreibung aller verfügbaren Endpunkte, erforderlichen Parameter und Antwortformate. Dies war meine bevorzugte Ressource bei der Integration von APITemplate in meine C#-Anwendungen.
Der Support von APITemplate ist stärker auf E-Mail-Support ausgerichtet:
E-Mail-Support: Wenn ich Probleme oder Fragen hatte, habe ich ihren E-Mail-Support genutzt. Antwortzeiten lagen allgemein innerhalb von 1-2 Geschäftstagen.
IronPDF bietet verschiedene Preisklassen an, um unterschiedlichen Bedürfnissen gerecht zu werden:
Lite: Zum Preis von $749 ist diese Stufe für einen einzelnen Entwickler geeignet, der an einem einzigen Projekt arbeitet. Es ist eine einmalige Gebühr, was es zu einer erschwinglichen Option für kleine Projekte oder einzelne Entwickler macht.
Professional: Für 1.499 $ unterstützt diese Option bis zu 10 Entwickler, 10 Standorte und 10 Projekte. Diese Stufe umfasst auch eine einmalige Gebühr und bietet mehr Flexibilität für kleine bis mittelgroße Teams.
Unlimited: Für 2.999 $, bietet diese Stufe unbegrenzte Entwickler, Standorte und Projekte. Dies ist ideal für größere Teams und Unternehmen, die umfangreiche Nutzung ohne Einschränkungen benötigen.
IronPDF bietet außerdem Unternehmens- und OEM-Weiterverteilungslizenzen für größere Organisationen und diejenigen an, die PDF-Funktionalitäten in kommerzielle Produkte integrieren müssen. Sie bietet auch einekostenloser Testtesten.
APITemplate bietet einen anderen Ansatz mit seinem API-basierten PDF-Generierungsdienst. Die Preisgestaltung basiert typischerweise auf der Anzahl der API-Aufrufe, was es flexibler für unterschiedliche Nutzungsmuster macht:
Grundplan: Beginnt oft zu einem niedrigeren Preis mit einer begrenzten Anzahl von API-Aufrufen pro Monat. Dies ist geeignet für kleine Projekte oder Unternehmen mit geringen Anforderungen an die PDF-Erzeugung.
Standardplan: Dieser Plan beinhaltet mehr API-Aufrufe und zusätzliche Funktionen, die auf mittelständische Unternehmen abgestimmt sind.
Enterprise-Plan: Maßgeschneidert für Benutzer mit hohem Volumen bietet dieser Plan die meisten API-Aufrufe und Premiumfunktionen wie Prioritätsunterstützung und benutzerdefinierte Integrationen.
Die Lizenzierung von APITemplate ist einfach und in der Regel an ein monatliches oder jährliches Abonnementmodell gebunden.
Preisgestaltung: IronPDF verwendet ein Einmalgebührenmodell, das auf lange Sicht kosteneffektiv sein kann, insbesondere bei kontinuierlicher, intensiver Nutzung. APITemplate verwendet hingegen ein abonnementbasiertes Modell, das sich mit der Nutzung flexibler und skalierbarer gestalten lässt.
Sowohl IronPDF als auch APITemplate bieten die Möglichkeit, PDFs aus HTML-Inhalten zu erstellen, aber die Implementierung von IronPDF ist robuster und flexibler. Hier ist ein Vergleich:
using IronPdf;
var renderer = new ChromePdfRenderer();
var html = @"
<html>
<head>
<style>
body { font-family: Arial, sans-serif; }
.header { color: #0066cc; font-size: 24px; }
.content { margin-top: 20px; }
</style>
</head>
<body>
<div class='header'>Dynamic Report</div>
<div class='content'>
<p>This report was generated on: <script>document.write(new Date().toLocaleString());</script></p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
</div>
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("IronPDF_report.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
var html = @"
<html>
<head>
<style>
body { font-family: Arial, sans-serif; }
.header { color: #0066cc; font-size: 24px; }
.content { margin-top: 20px; }
</style>
</head>
<body>
<div class='header'>Dynamic Report</div>
<div class='content'>
<p>This report was generated on: <script>document.write(new Date().toLocaleString());</script></p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
</div>
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("IronPDF_report.pdf");
Imports IronPdf
Private renderer = New ChromePdfRenderer()
Private html = "
<html>
<head>
<style>
body { font-family: Arial, sans-serif; }
.header { color: #0066cc; font-size: 24px; }
.content { margin-top: 20px; }
</style>
</head>
<body>
<div class='header'>Dynamic Report</div>
<div class='content'>
<p>This report was generated on: <script>document.write(new Date().toLocaleString());</script></p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
</div>
</body>
</html>"
Private pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("IronPDF_report.pdf")
using System.Net.Http;
using System.Text.Json;
var apiKey = "your_api_key";
var templateId = "your_template_id";
var url = $"https://rest.apitemplate.io/v2/create-pdf?template_id={templateId}";
var data = new
{
header = "Dynamic Report",
content = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
date = DateTime.Now.ToShortDateString()
};
var json = JsonSerializer.Serialize(data);
var content = new StringContent(json, System.Text.Encoding.UTF8, "application/json");
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-KEY", apiKey);
var response = await client.PostAsync(url, content);
var pdfBytes = await response.Content.ReadAsByteArrayAsync();
File.WriteAllBytes("APITemplate_report.pdf", pdfBytes);
using System.Net.Http;
using System.Text.Json;
var apiKey = "your_api_key";
var templateId = "your_template_id";
var url = $"https://rest.apitemplate.io/v2/create-pdf?template_id={templateId}";
var data = new
{
header = "Dynamic Report",
content = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
date = DateTime.Now.ToShortDateString()
};
var json = JsonSerializer.Serialize(data);
var content = new StringContent(json, System.Text.Encoding.UTF8, "application/json");
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-KEY", apiKey);
var response = await client.PostAsync(url, content);
var pdfBytes = await response.Content.ReadAsByteArrayAsync();
File.WriteAllBytes("APITemplate_report.pdf", pdfBytes);
Imports System.Net.Http
Imports System.Text.Json
Private apiKey = "your_api_key"
Private templateId = "your_template_id"
Private url = $"https://rest.apitemplate.io/v2/create-pdf?template_id={templateId}"
Private data = New With {
Key .header = "Dynamic Report",
Key .content = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
Key .date = DateTime.Now.ToShortDateString()
}
Private json = JsonSerializer.Serialize(data)
Private content = New StringContent(json, System.Text.Encoding.UTF8, "application/json")
Private client = New HttpClient()
client.DefaultRequestHeaders.Add("X-API-KEY", apiKey)
Dim response = Await client.PostAsync(url, content)
Dim pdfBytes = Await response.Content.ReadAsByteArrayAsync()
File.WriteAllBytes("APITemplate_report.pdf", pdfBytes)
JavaScript-Unterstützung: IronPDF unterstützt die Ausführung von JavaScript innerhalb des HTML vollständig, was die Erstellung dynamischer Inhalte ermöglicht.(wie das aktuelle Datum im Beispiel). APITemplate erfordert in der Regel, dass alle Daten im Voraus bereitgestellt werden.
CSS-Flexibilität: Mit IronPDF haben Sie die volle Kontrolle über das CSS-Styling direkt in Ihrem HTML. APITemplate erfordert oft vordefinierte Vorlagen mit begrenzten Anpassungsmöglichkeiten.
Leistung: IronPDF verarbeitet das HTML lokal, was zu einer schnelleren PDF-Erstellung führt, insbesondere bei komplexen Dokumenten. Der cloudbasierte Ansatz von APITemplate kann Latenzzeiten einführen.
Offline-Fähigkeit: IronPDF funktioniert offline, was für Anwendungen mit eingeschränkter Internetverbindung oder hohen Sicherheitsanforderungen nützlich ist. APITemplate erfordert immer eine Internetverbindung.
Dynamischer Inhalt: IronPDF ermöglicht eine dynamischere Inhaltserstellung in Echtzeit, während APITemplate normalerweise eine vordefinierte Vorlagenstruktur erfordert.
Anpassung: IronPDF bietet eine feinere Kontrolle über den PDF-Generierungsprozess, einschließlich Optionen für Seitengröße, Ränder und andere PDF-spezifische Einstellungen.
Nach umfangreicher Arbeit mit sowohl IronPDF als auch APITemplate in verschiedenen C#-Projekten habe ich die einzigartigen Stärken jedes Tools schätzen gelernt. Für die meisten meiner PDF-bezogenen Aufgaben hat sich jedoch IronPDF als die überlegene Wahl erwiesen. Während APITemplate seine Vorzüge hat, insbesondere für die einfache, vorlagenbasierte Dokumentenerstellung, habe ich festgestellt, dass die Vielseitigkeit von IronPDF es ermöglicht, diese Aufgaben genauso effektiv zu bewältigen, während es auch die Fähigkeit bietet, bei Bedarf komplexere PDF-Operationen durchzuführen.
Zusammenfassend lässt sich sagen, dass beide Werkzeuge ihren Platz haben, aber IronPDF sich konsequent als die leistungsfähigere, flexiblere und kosteneffektivere Lösung für die PDF-Bearbeitung in der C#-Entwicklung erwiesen hat. Sein robustes Funktionsset, die ausgezeichnete Leistung und der umfassende Support machen es zu meiner bevorzugten Wahl für jede PDF-bezogene Aufgabe, von der einfachsten Dokumenterstellung bis hin zu den komplexesten PDF-Manipulationen.
9 .NET API-Produkte für Ihre Bürodokumente