Test in einer Live-Umgebung
Test in der Produktion ohne Wasserzeichen.
Funktioniert überall, wo Sie es brauchen.
Suchen Sie nach den perfekten PDF-Tools für das .NET-Framework?
In diesem Artikel werden wir einen Blick darauf werfen, wie man mit PDF-Dateien in C# arbeitet(eine der beliebtesten Programmiersprachen). Wir besprechen zwei branchenführende PDF-Tools für C# auf dem .NET-Framework und vergleichen sie anhand von Codebeispielen hinsichtlich ihrer Leistung und Funktionen. Zum Schluss werden wir die Details der Lizenzierung untersuchen und erfahren, wie man Lizenzschlüssel erhält.
Die beiden PDF-Bibliotheken sind:
IronPDF ist eine C# .NET-Bibliothek, die von Iron Software entwickelt wurde, um alle PDF-Probleme für C# .NET-Entwickler mit einer einzigen Bibliothek zu lösen. IronPDF wird von einer Chromium-Engine angetrieben und verfügt über eine Vielzahl hilfreicher und leistungsfähiger Funktionen, wie z. B. die Konvertierung von HTML5-, JavaScript-, CSS- und Bilddateien in PDF, die Erstellung benutzerdefinierter Kopf- und Fußzeilen und die Anzeige von PDFs genau so, wie sie in einem Browser erscheinen. IronPDF ermöglicht es Ihnen, Daten aus PDF-Dateien zu lesen und sie automatisch in Ihre .NET-Anwendungen und Datenspeichersysteme einzufügen. Sie können Inhalte aus alten PDF-Dokumentenspeichern in Ihre Dokumentenmanagement- und Geschäftsanwendungen importieren, verschieben und indizieren.
Mit dieser Funktion können Sie PDF-Dateien aus verschiedenen Formaten wie HTML, MVC-Ansichten, Webformulare, HTML-Strings und URLs generieren.
In vielen Fällen können Sie eingebetteten Text problemlos aus PDFs extrahieren. Sollte dies jedoch nicht gelingen, ist Ihr Text höchstwahrscheinlich in ein Bild eingebettet. Um Dokumente nach visuellem Text und nicht nach reinem Text zu scannen, verwenden Sie dieIronOCR bibliothek.
Kopf- und Fußzeilen können beim Erstellen einer PDF-Datei oder zu bestehenden PDF-Dateien hinzugefügt werden. Mit der Eigenschaft Druckoptionen können Sie für jede Dokumentseite eine Kopf- und eine Fußzeile erstellen. Diese Parameter sind für das ChromePdfRenderer-Objekt verfügbar. Dieses Beispiel wird in einer .NET Core-Konsolenanwendung ausgeführt.
Damit können Anwender sowohl Fotos aus PDFs als auch PDFs aus Fotos erzeugen. Es unterstützt die Bildextraktion, verschiedene Bilderweiterungen und den PDF-Druck.
IronPDF bietet außerdem eine 128-Bit-PDF-Verschlüsselung, passwortgeschützte PDF-Sperren und die digitale Unterzeichnung von PDFs.
Mit IronPDF können Sie Wasserzeichen hinzufügen, Seiten hinzufügen, Seiten entfernen, Hintergründe, Vordergründe und vieles mehr zu Ihren PDFs hinzufügen.
IronPDF unterstützt fast alle Betriebssysteme und Frameworks, die mit C# kompatibel sind, wie z.B.:
PDFNet .NET SDK von PDFTron bringt präzise PDF-Verarbeitung, -Anmerkungen, -Bearbeitung und -Erstellung in jedes Framework oder jede Anwendung im Web, auf dem Handy, dem Desktop oder dem Server. Es verwaltet den gesamten Dokumenten- und Informationsmanagementprozess mit Ihrer Infrastruktur und macht Abhängigkeiten von Servern Dritter überflüssig. Die Web-Plattform von PDFTron wird mit einer JS-Version mit der unterstützten Plattform und einem Demo-Lizenzschlüssel für alle PDF-SDKs geliefert.
Einer der wichtigsten Vorteile von PDFNet ist, dass es wirklich plattformübergreifend ist und es unseren Anwendern ermöglicht, ihre Workflows und Anwendungen in vielen verschiedenen mobilen und Desktop-Kontexten einfach um PDF-Kompatibilität und relevante Geschäftsfunktionen zu erweitern und dabei praktisch dieselbe Oberfläche zu verwenden.
Das PDFNet SDK ist mit vielen Plattformen und Frameworks kompatibel. Um die Plattformkonsistenz zu gewährleisten, wird die JavaScript-API auf die gleiche Weise wie die PDFNet-API verwendet. Node.js und Electron Versionen des SDK sind ebenfalls verfügbar. Dieses Paket erfordert nicht verwaltete Add-on-Binärdateien.
Sicheres, skalierbares und originalgetreues Lesen und Bearbeiten von PDFs für Benutzer auf Online-, Mobil- und Desktop-Plattformen.
Erstellen Sie angepasste Signierverfahren. Digital signierte Dokumente können zertifiziert, validiert und versiegelt werden.
Entfernen Sie sensible Daten aus Dokumenten, wie z. B. persönliche Informationen oder Informationen über den Gesundheitszustand, wobei das Dokument durchsuchbar bleibt.
Seiten können hinzugefügt, entfernt oder neu angeordnet werden. Dokumente können zusammengestellt, zusammengeführt oder in Teile aufgeteilt werden. Betrachten Sie mehrere Dokumente gleichzeitig im selben Reader oder nebeneinander.
In diesem Artikel werden wir eine Konsolenanwendung verwenden, um PDF-Dokumente zu erzeugen.
Öffnen Sie Visual Studio und wählen Sie das Menü Datei. Wählen Sie "Neues Projekt" und dann "Konsolenanwendung".
Geben Sie den Projektnamen ein und wählen Sie den Pfad in dem entsprechenden Textfeld aus. Klicken Sie dann auf die Schaltfläche Erstellen. Wählen Sie das gewünschte .NET-Framework, wie in der folgenden Abbildung dargestellt:
Das Visual Studio-Projekt wird nun die Struktur für die Konsolenanwendung generieren. Danach wird die Datei "program.cs" geöffnet, in der Sie den Quellcode schreiben und ausführen können.
Jetzt können wir die Bibliothek hinzufügen und das Programm testen.
Die IronPDF-Bibliothek kann auf vier verschiedene Arten heruntergeladen und installiert werden. Diese sind:
Die Visual Studio-Software bietet die Option NuGet Package Manager, um das Paket direkt in der Lösung zu installieren. Der folgende Screenshot zeigt, wie Sie den NuGet Package Manager öffnen.
Klicken Sie bei geöffneter Paketmanager-GUI auf die Registerkarte Durchsuchen und suchen Sie nach "IronPDF:"
In der obigen Abbildung sehen Sie die Liste der verwandten Pakete aus der Suche. Wählen Sie die Option IronPDF und installieren Sie das Paket in unserer Lösung.
Gehen Sie im Menü von Visual Studio auf Tools > NuGet-Paketmanager > Paketmanager-Konsole
Install-Package IronPdf
Das IronPDF-Paket wird nun im Projekt installiert.
Die dritte Möglichkeit besteht darin, das NuGet-Paket direkt von derNuGet Galerie IronPDF Paket.
Laden Sie das neueste Paket direkt von derIronPDF Download-Seite. Führen Sie nach dem Download die folgenden Schritte aus, um das Paket dem Projekt hinzuzufügen.
Das PDFNet SDK kann auf vier verschiedene Arten heruntergeladen und installiert werden.
Wie oben beschrieben, gehen Sie in Visual Studio zu Tools und öffnen den NuGet-Paketmanager. Es wird eine Liste angezeigt - klicken Sie auf NuGet-Paket verwalten für Lösungen.
Es erscheint ein Fenster mit einer Suchleiste. Suchen Sie nach PDFNet und installieren Sie es in Ihrem Projekt.
Install-Package PDFNet ---Version 9.2.0
Die dritte Möglichkeit besteht darin, das NuGet-Paket direkt von derNuGet Gallery PDFNet-Paket.
Sie können die PDFNet API auch mit der Datei PDFNetLoader.dll installieren. Laden Sie sie herunter vonGitHub-Veröffentlichungen für PDFNetLoader.dll.
Laden Sie das Paket herunter, legen Sie es in der bin-Datei des Projekts ab und führen Sie es aus. Fügen Sie in Ihrem Visual Studio-Projekt PDFNetLoader.dll als Referenz hinzu.
Das Drucken einer PDF-Datei ist eine unverzichtbare Funktion für moderne Anwendungen, die mit PDFs arbeiten. Im Folgenden wird erläutert, wie Sie mit beiden Werkzeugen PDF-Dateien drucken können.
IronPDF druckt eine PDF-Datei, indem es sie an den Standarddrucker des Computers sendet. Dies öffnet die Windows-Druckerschnittstelle - klicken Sie einfach auf "Drucken", um die Übersetzung zu erstellen.
using IronPdf;
// Create a new PDF and print it
var Renderer = new IronPdf.ChromePdfRenderer();
PdfDocument Pdf = Renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf");
// Send the PDF to the default printer to print
Pdf.Print(300, false);
using IronPdf;
// Create a new PDF and print it
var Renderer = new IronPdf.ChromePdfRenderer();
PdfDocument Pdf = Renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf");
// Send the PDF to the default printer to print
Pdf.Print(300, false);
Imports IronPdf
' Create a new PDF and print it
Private Renderer = New IronPdf.ChromePdfRenderer()
Private Pdf As PdfDocument = Renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf")
' Send the PDF to the default printer to print
Pdf.Print(300, False)
PDFTron's PDFNet SDK bietet auch eine Druckfunktion. Nachfolgend finden Sie den Quellcodeausschnitt zum Drucken einer PDF-Datei in PDFNet.
using System;
using System.Drawing;
using System.Drawing.Printing;
using pdftron;
using pdftron.PDF;
using pdftron.Common;
using pdftron.Filters;
namespace PDFPrintTestCS
{
Console.WriteLine("Opening the input file...");
using (pdfdoc = new PDFDoc(input_path + "tiger.pdf"))
{
pdfdoc.InitSecurityHandler();
Console.WriteLine("Printing the input file using PDF.Print.StartPrintJob...");
PrinterMode printerMode = new PrinterMode();
printerMode.SetAutoCenter(true);
printerMode.SetAutoRotate(true);
printerMode.SetCollation(true);
printerMode.SetCopyCount(1);
printerMode.SetDPI(300); // regardless of ordering, an explicit DPI setting overrides the OutputQuality setting
printerMode.SetDuplexing(PrinterMode.DuplexMode.e_Duplex_Auto);
printerMode.SetNUp(PrinterMode.NUp.e_NUp_1_1, PrinterMode.NUpPageOrder.e_PageOrder_LeftToRightThenTopToBottom);
printerMode.SetOrientation(PrinterMode.Orientation.e_Orientation_Portrait);
printerMode.SetOutputAnnot(PrinterMode.PrintContentTypes.e_PrintContent_DocumentAndAnnotations);
printerMode.SetOutputColor(PrinterMode.OutputColor.e_OutputColor_Grayscale);
printerMode.SetOutputPageBorder(false);
printerMode.SetOutputQuality(PrinterMode.OutputQuality.e_OutputQuality_Medium);
printerMode.SetPaperSize(new Rect(0, 0, 612, 792));
PageSet pagesToPrint = new PageSet(1, pdfdoc.GetPageCount(), PageSet.Filter.e_all);
Print.StartPrintJob(pdfdoc, "", pdfdoc.GetFileName(), "", pagesToPrint, printerMode, null);
}
}
using System;
using System.Drawing;
using System.Drawing.Printing;
using pdftron;
using pdftron.PDF;
using pdftron.Common;
using pdftron.Filters;
namespace PDFPrintTestCS
{
Console.WriteLine("Opening the input file...");
using (pdfdoc = new PDFDoc(input_path + "tiger.pdf"))
{
pdfdoc.InitSecurityHandler();
Console.WriteLine("Printing the input file using PDF.Print.StartPrintJob...");
PrinterMode printerMode = new PrinterMode();
printerMode.SetAutoCenter(true);
printerMode.SetAutoRotate(true);
printerMode.SetCollation(true);
printerMode.SetCopyCount(1);
printerMode.SetDPI(300); // regardless of ordering, an explicit DPI setting overrides the OutputQuality setting
printerMode.SetDuplexing(PrinterMode.DuplexMode.e_Duplex_Auto);
printerMode.SetNUp(PrinterMode.NUp.e_NUp_1_1, PrinterMode.NUpPageOrder.e_PageOrder_LeftToRightThenTopToBottom);
printerMode.SetOrientation(PrinterMode.Orientation.e_Orientation_Portrait);
printerMode.SetOutputAnnot(PrinterMode.PrintContentTypes.e_PrintContent_DocumentAndAnnotations);
printerMode.SetOutputColor(PrinterMode.OutputColor.e_OutputColor_Grayscale);
printerMode.SetOutputPageBorder(false);
printerMode.SetOutputQuality(PrinterMode.OutputQuality.e_OutputQuality_Medium);
printerMode.SetPaperSize(new Rect(0, 0, 612, 792));
PageSet pagesToPrint = new PageSet(1, pdfdoc.GetPageCount(), PageSet.Filter.e_all);
Print.StartPrintJob(pdfdoc, "", pdfdoc.GetFileName(), "", pagesToPrint, printerMode, null);
}
}
Imports System
Imports System.Drawing
Imports System.Drawing.Printing
Imports pdftron
Imports pdftron.PDF
Imports pdftron.Common
Imports pdftron.Filters
Namespace PDFPrintTestCS
Console.WriteLine("Opening the input file...")
pdfdoc = New PDFDoc(input_path & "tiger.pdf")
Using pdfdoc
pdfdoc.InitSecurityHandler()
Console.WriteLine("Printing the input file using PDF.Print.StartPrintJob...")
Dim printerMode As New PrinterMode()
printerMode.SetAutoCenter(True)
printerMode.SetAutoRotate(True)
printerMode.SetCollation(True)
printerMode.SetCopyCount(1)
printerMode.SetDPI(300) ' regardless of ordering, an explicit DPI setting overrides the OutputQuality setting
printerMode.SetDuplexing(PrinterMode.DuplexMode.e_Duplex_Auto)
printerMode.SetNUp(PrinterMode.NUp.e_NUp_1_1, PrinterMode.NUpPageOrder.e_PageOrder_LeftToRightThenTopToBottom)
printerMode.SetOrientation(PrinterMode.Orientation.e_Orientation_Portrait)
printerMode.SetOutputAnnot(PrinterMode.PrintContentTypes.e_PrintContent_DocumentAndAnnotations)
printerMode.SetOutputColor(PrinterMode.OutputColor.e_OutputColor_Grayscale)
printerMode.SetOutputPageBorder(False)
printerMode.SetOutputQuality(PrinterMode.OutputQuality.e_OutputQuality_Medium)
printerMode.SetPaperSize(New Rect(0, 0, 612, 792))
Dim pagesToPrint As New PageSet(1, pdfdoc.GetPageCount(), PageSet.Filter.e_all)
Print.StartPrintJob(pdfdoc, "", pdfdoc.GetFileName(), "", pagesToPrint, printerMode, Nothing)
End Using
End Namespace
Beide Bibliotheken verfügen über Funktionen zur Konvertierung von HTML in PDF, aber die Methoden sind leicht unterschiedlich.
IronPDF benötigt weder JSON noch Verschlüsselungsmechanismen. IronPDF unterstützt eine breite Palette von Methoden. Zum Beispiel:
using IronPdf;
var Renderer = new IronPdf.ChromePdfRenderer();
Renderer.RenderHtmlAsPdf("<h1>Html with CSS and Images</h1>").SaveAs("pixel-perfect.pdf");
using IronPdf;
var Renderer = new IronPdf.ChromePdfRenderer();
Renderer.RenderHtmlAsPdf("<h1>Html with CSS and Images</h1>").SaveAs("pixel-perfect.pdf");
Imports IronPdf
Private Renderer = New IronPdf.ChromePdfRenderer()
Renderer.RenderHtmlAsPdf("<h1>Html with CSS and Images</h1>").SaveAs("pixel-perfect.pdf")
using IronPdf;
IronPdf.ChromePdfRenderer Renderer = new IronPdf.ChromePdfRenderer();
var Pdf = Renderer.RenderUrlAsPdf("https://ironpdf.com/");
Pdf.SaveAs("url.pdf");
using IronPdf;
IronPdf.ChromePdfRenderer Renderer = new IronPdf.ChromePdfRenderer();
var Pdf = Renderer.RenderUrlAsPdf("https://ironpdf.com/");
Pdf.SaveAs("url.pdf");
Imports IronPdf
Private Renderer As New IronPdf.ChromePdfRenderer()
Private Pdf = Renderer.RenderUrlAsPdf("https://ironpdf.com/")
Pdf.SaveAs("url.pdf")
PDFNet bietet auch Funktionen zur Konvertierung von HTML in PDF, wobei sowohl die Seitenkonvertierung als auch die URL-Konvertierung genutzt werden. Da der Code sehr umfangreich ist, geben wir Ihnen hier nur ein Beispiel.
class HTML2PDFSample
{
private static pdftron.PDFNetLoader pdfNetLoader = pdftron.PDFNetLoader.Instance();
static HTML2PDFSample() {}
static void Main(string [] args)
{
string output_path = "../../../../TestFiles/Output/html2pdf_example";
string host = "https://www.pdftron.com";
string page0 = "/";
string page1 = "/support";
string page2 = "/blog";
HTML2PDF.SetModulePath("../../../../../Lib");
if (!HTML2PDF.IsModuleAvailable())
{
Console.WriteLine();
Console.WriteLine("Unable to run HTML2PDFTest: PDFTron SDK HTML2PDF module not available.");
Console.WriteLine("-------------------------------");
Console.WriteLine("The HTML2PDF module is an optional add-on, available for download");
Console.WriteLine("at http://www.pdftron.com/. If you have already downloaded this");
Console.WriteLine("module, ensure that the SDK is able to find the required files");
Console.WriteLine("using the HTML2PDF.SetModulePath() function.");
Console.WriteLine();
return;
}
try
{
using (PDFDoc doc = new PDFDoc())
{
if ( HTML2PDF.Convert(doc, host + page0) )
doc.Save(output_path + "_01.pdf", SDFDoc.SaveOptions.e_linearized);
else
Console.WriteLine("Conversion failed.");
}
}
catch (PDFNetException e)
{
Console.WriteLine(e.Message);
}
}
}
class HTML2PDFSample
{
private static pdftron.PDFNetLoader pdfNetLoader = pdftron.PDFNetLoader.Instance();
static HTML2PDFSample() {}
static void Main(string [] args)
{
string output_path = "../../../../TestFiles/Output/html2pdf_example";
string host = "https://www.pdftron.com";
string page0 = "/";
string page1 = "/support";
string page2 = "/blog";
HTML2PDF.SetModulePath("../../../../../Lib");
if (!HTML2PDF.IsModuleAvailable())
{
Console.WriteLine();
Console.WriteLine("Unable to run HTML2PDFTest: PDFTron SDK HTML2PDF module not available.");
Console.WriteLine("-------------------------------");
Console.WriteLine("The HTML2PDF module is an optional add-on, available for download");
Console.WriteLine("at http://www.pdftron.com/. If you have already downloaded this");
Console.WriteLine("module, ensure that the SDK is able to find the required files");
Console.WriteLine("using the HTML2PDF.SetModulePath() function.");
Console.WriteLine();
return;
}
try
{
using (PDFDoc doc = new PDFDoc())
{
if ( HTML2PDF.Convert(doc, host + page0) )
doc.Save(output_path + "_01.pdf", SDFDoc.SaveOptions.e_linearized);
else
Console.WriteLine("Conversion failed.");
}
}
catch (PDFNetException e)
{
Console.WriteLine(e.Message);
}
}
}
Friend Class HTML2PDFSample
Private Shared pdfNetLoader As pdftron.PDFNetLoader = pdftron.PDFNetLoader.Instance()
Shared Sub New()
End Sub
Shared Sub Main(ByVal args() As String)
Dim output_path As String = "../../../../TestFiles/Output/html2pdf_example"
Dim host As String = "https://www.pdftron.com"
Dim page0 As String = "/"
Dim page1 As String = "/support"
Dim page2 As String = "/blog"
HTML2PDF.SetModulePath("../../../../../Lib")
If Not HTML2PDF.IsModuleAvailable() Then
Console.WriteLine()
Console.WriteLine("Unable to run HTML2PDFTest: PDFTron SDK HTML2PDF module not available.")
Console.WriteLine("-------------------------------")
Console.WriteLine("The HTML2PDF module is an optional add-on, available for download")
Console.WriteLine("at http://www.pdftron.com/. If you have already downloaded this")
Console.WriteLine("module, ensure that the SDK is able to find the required files")
Console.WriteLine("using the HTML2PDF.SetModulePath() function.")
Console.WriteLine()
Return
End If
Try
Using doc As New PDFDoc()
If HTML2PDF.Convert(doc, host & page0) Then
doc.Save(output_path & "_01.pdf", SDFDoc.SaveOptions.e_linearized)
Else
Console.WriteLine("Conversion failed.")
End If
End Using
Catch e As PDFNetException
Console.WriteLine(e.Message)
End Try
End Sub
End Class
IronPDF ist eine Bibliothek, die eine kostenlose Entwicklerlizenz anbietet. IronPDF bietet auch eine besondere Preisstruktur: das Light-Paket beginnt bei $749 ohne versteckte Kosten. Es ist auch möglich, SaaS- und OEM-Produkte weiter zu vertreiben. Alle Lizenzen beinhalten eine 30-tägige Geld-zurück-Garantie, ein Jahr Software-Support und Upgrades, Gültigkeit für Entwicklung/Testing/Taging/Produktion und eine unbefristete Lizenz(einmaliger Kauf). IronPDF-Lizenzen bieten maximale Leistung für die Bedürfnisse der Benutzer. Hier geht es weiterIronPDF-Lizenzierungsseite um die gesamte Preisstruktur und Lizenz von IronPDF zu sehen.
Das PDFTron PDFNet SDK wird mit mehreren Lizenzoptionen geliefert, die auf Ihre geschäftlichen Anforderungen zugeschnitten sind. Drei Arten von Lizenzen sind in der Unternehmens- und OEM-Weiterverteilung enthalten. Unternehmenslizenzen sind nur für Unternehmen bestimmt und können nicht für die Verteilung von Apps verwendet werden. Zusätzliche APIs, die Zugriff auf das Dateisystem erfordern, sind ebenfalls in den Lizenzen enthalten. Alle Lizenzen werden mit einem Lizenzschlüssel geliefert. Die drei Arten von Lizenzen sind
Kern-SDK
Weitere Informationen zu den Lizenzstrukturen finden Sie hierPDFTron-Lizenzierungsinformationsseite.
IronPDF bietet eine Vielzahl von Funktionen für die Verarbeitung von PDF-Dateien und deren Konvertierung in verschiedene Formate. Konvertierungen von HTML in PDF werden in einem Vektorformat erstellt, das für den hochwertigen kommerziellen Druck geeignet ist. Als Ergebnis erhalten Sie eine übersichtliche, qualitativ hochwertige PDF-Datei. Lizenz- und Preisinformationen sind auf der Website zu finden.
Ähnlich wie IronPDF hilft PDFNet bei der Umwandlung, Kommentierung, Signatur, Ausfüllung, Konvertierung und Bearbeitung von PDF-Dateien. Es unterstützt mehrere Plattformen, darunter Windows, IOS, Android, WEB und Linux. Für den Produktionseinsatz benötigen die PDFNet SDKs einen Produktschlüssel.
Die Lizenzen von IronPDF sind entwicklerorientiert, d. h. Sie müssen eine Lizenz erwerben, die darauf basiert, wie viele Entwickler das Produkt verwenden werden. PDFNet-Lizenzen hingegen funktionieren nicht auf dieselbe Weise, sondern basieren auf einer funktionsbasierten Lizenz. Das bedeutet, dass Sie die Lizenz erwerben müssen, die die benötigten Funktionen unterstützt. IronPDF-Lizenzen enthalten alle Funktionen sofort nach dem Auspacken. Bei PDFNet müssen einige Funktionen, wie z. B. die Dokumentenkonvertierung, als Add-ons erworben werden.
Die IronPDF-Bibliothek bietet Funktionen in einer organisierten Art und Weise, die es einfach macht, Code zu schreiben, der große Aufgaben mit wenigen Zeilen Code ausführt. Iron Software bietet derzeit ein Paket mit fünf Werkzeugen zum Preis von nur zwei an. Die in der Iron Suite enthaltenen Tools sind:
9 .NET API-Produkte für Ihre Bürodokumente