VERGLEICH MIT ANDEREN KOMPONENTEN

Ein Vergleich zwischen IronOCR und PDFTRON OCR

Veröffentlicht 5. September 2022
Teilen Sie:

OCR steht für "Optical Character Recognition" (optische Zeichenerkennung). Dies ist der Prozess der Umwandlung von Papierdokumenten oder Bildern in lesbaren Text. Hierfür gibt es verschiedene Methoden, wie z. B. das Scannen oder die manuelle Eingabe über eine Tastatur. Dies geschieht, um gescannte Dateien, PDFs oder handschriftliche Dokumente in ihr ursprüngliches Textformat zu konvertieren. Dieses Verfahren hat sich in Strafsachen als unschätzbar wertvoll erwiesen, wenn Dokumente zu beschädigt für eine manuelle Transkription sind, aber mit OCR-Software gescannt und interpretiert werden können.

Mit dem technologischen Fortschritt und dem allgegenwärtigen Einsatz digitaler Werkzeuge wurde OCR auch in anderen Bereichen eingesetzt, z. B. bei der Dokumentenkonvertierung in Anwendungen wie Google Docs, in der Wissenschaft und in der Geschäftswelt. Es gibt zwei Haupttypen von OCR, "statisch" und "dynamisch". Der häufigste Typ ist die statische OCR, bei der das gesamte Dokument auf einmal gescannt wird. Die dynamische OCR hingegen scannt eine Zeile nach der anderen und kann auch anspruchsvollere Layouts wie z. B. Tabellendaten verarbeiten.

In diesem Artikel wird der Vergleich zwischen zwei der gängigsten Anwendungen und Dokumentenbibliotheken für OCR und PDF diskutiert. Diese sind:

  • PDFTron OCR
  • IronOCR

1.0 Einführung

1.1 PDFTron OCR Einführung und Funktionen

Um OCR mit PDFTron SDK zu verwenden, müssen wir ein separates OCR-Modul als Zusatzprogramm installieren. Dies hilft dem SDK bei der Erkennung von Text in Dokumenten. Es kann Text auswählbar und durchsuchbar machen. Das PDFTron SDK unterstützt bis zu 100 Sprachen. Die OCR-Engine von PDFTron wird von einem quelloffenen neuronalen LSTM-Netzwerk von Tesseract unterstützt. PDFTron OCR unterstützt mehrere Bildtypen und Formate für die Texterkennung. PDF-Dateien mit reinen Rasterbildern werden ebenfalls für OCR akzeptiert, wobei die Ausgabequalität vom Eingangsbild abhängt. Die besten Bilder für OCR sind Graustufenbilder mit einer Auflösung von 300 DPI.

Die Funktionen von PDFTron OCR

  • Bilder in gedruckten Dokumenten durchsuchbar machen.
  • Konvertierung einer einfachen PDF-Datei in eine durchsuchbare PDF-Datei.
  • Aufspüren wichtiger Informationen aus Geschäftsdokumenten.
  • Das Scannen von Büchern wird einfacher.
  • Erkennung von Fahrzeugnummern auf Bildern von Fahrzeugen.
  • Hilfe für sehbehinderte Nutzer.
  • Mit OCR wird die Dateneingabe in mehrere Dokumente aus Dateien einfach.
  • Übertragen Sie Informationen von Visitenkarten auf einfache Weise in Kontaktdatenlisten.

1.2 IronOCR — Einführung und Funktionen

Iron Software stellt Softwareentwicklern IronOCR for .NET zur Verfügung, um Textinhalte aus Fotos und PDFs in .NET-Anwendungen und Websites zu lesen. Die Software hilft beim Scannen von Fotos nach Text und Barcodes, unterstützt zahlreiche Sprachen weltweit und gibt die Daten als einfachen Text oder strukturierte Daten aus. Die OCR-Bibliothek von Iron Software kann in Web-, Konsolen-, MVC- und zahlreichen .NET-Desktop-Anwendungen eingesetzt werden. Beim kommerziellen Einsatz wird neben den erworbenen Lizenzen auch direkte Unterstützung durch das Entwicklungsteam angeboten.

  • IronOCR verwendet die neueste Tesseract 5-Engine, die Text, QR-Codes und Barcodes aus beliebigen PDF-Formaten oder anderen Formaten liest. Das Hinzufügen von OCR zu Desktop-, Web- und Konsolenanwendungen mit dieser Bibliothek gewährleistet eine schnelle Integration.
  • IronOCR unterstützt 127 internationale Sprachen. Es unterstützt auch benutzerdefinierte Sprachen und Wortlisten.
  • IronOCR kann mehr als 20 Barcode- und QR-Code-Formate lesen.
  • Unterstützt die mehrseitigen Bildformate GIF und TIFF.
  • Korrigiert Scans und Bilder von schlechter Qualität.
  • Unterstützt Multithreading. Er kann einen oder mehrere Prozesse gleichzeitig ausführen.
  • IronOCR kann strukturierte Daten auf Seiten, Absätzen, Zeilen, Wörtern, Zeichen usw. ausgeben.
  • IronOCR unterstützt Betriebssysteme wie Windows, Linux, macOS, etc.

2. Erstellen eines neuen Projekts in Visual Studio

Öffnen Sie Visual Studio und rufen Sie das Menü Datei auf. Wählen Sie ein neues Projekt und dann die Konsolenanwendung. Um PDF-Dokumente zu erzeugen, werden wir in diesem Artikel die Konsolenanwendung verwenden.

Geben Sie den Projektnamen ein und wählen Sie den Dateipfad in dem entsprechenden Textfeld aus. Klicken Sie dann auf die Schaltfläche Erstellen. Wählen Sie außerdem das gewünschte .NET-Framework aus.

Das Visual Studio-Projekt wird nun die Struktur für die ausgewählte Anwendung generieren.

Die Struktur des Projekts wird nun von Visual Studio generiert. Die Datei program.cs wird geöffnet, wenn Sie Windows-, Konsolen- und Webanwendung ausgewählt haben, damit Sie den Code eingeben und Ihre Anwendung erstellen/ausführen können.

Im nächsten Schritt müssen wir die Bibliothek hinzufügen, um den Code zu testen.

3.0 Installieren

3.1 PDFtron OCR installieren

Die PDFTron OCR-Installation wird manuell durchgeführt und kann als Zip-Datei von der angegebenen Adresse heruntergeladen werden link. Entpacken und konfigurieren Sie es mit dem Projekt. Der Leitfaden hilft Ihnen dabei, PDFTron-Beispiele mit der kostenlosen integrierten Testversion des PDFTron SDK in einer .NET-Framework-Anwendung unter Windows auszuführen. In der kostenlosen Testversion sind Support durch Lösungsingenieure und eine unbegrenzte Nutzung enthalten.

Voraussetzungen

Visual Studio: Stellen Sie sicher, dass die Workloads .NET Desktop Development und .NET-Framework 4.5.1+ Entwicklungswerkzeuge Teil Ihrer Installation sind. Diese Anleitung verwendet Visual Studio 2017 und PDFTrons C# .NET PDF Library für Windows. Laden Sie die Bibliothek über diesen Link herunter, .NET PDF SDK herunterladen.

Ersteinrichtung

Extrahieren Sie den Ordner aus der .zip-Datei. PDFNET_BASE wird in dieser Anleitung verwendet, um den Pfad zu dem entpackten Ordner auszuwählen.

PDFNET_BASE = path/to/extraction/folder/PDFNetDotNet4/
PDFNET_BASE = path/to/extraction/folder/PDFNetDotNet4/
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'PDFNET_BASE = path/@to/extraction/folder/PDFNetDotNet4/
VB   C#

Ausführen der Proben

Navigieren Sie zum Speicherort der extrahierten Inhalte. Suchen und öffnen Sie den Ordner Samples (PDFNET_BASE/Beispiele). Dieser Ordner enthält zahlreiche Beispielcodes für Funktionen, die vom PDFTron SDK unterstützt werden.

  1. Öffnen Sie Samples_20XX.sln in Visual Studio. Wählen Sie eine geeignete Version für Ihre Visual Studio-Installation.

  2. Wählen Sie den Beispielcode und es als Startup-Projekt festlegen für die Lösung.

  3. Führen Sie das Projekt aus.

Integrieren Sie in Ihre Anwendung

Dies ist die Anwendung "PDFTron Hello World". Es ist einfach, den Rest des PDFTron SDKs zu integrieren, wenn Sie ein PDF-Dokument öffnen, speichern und schließen können.

  1. Erstellen Sie in Visual Studio ein .NET-Framework-Konsolenanwendungsprojekt in Ihrer bevorzugten Sprache. Sie finden sie in der Kategorie Visual C# oder Visual Basic.

  2. Navigieren Sie in den Ordner Ihres Projekts. Standardmäßig sollte der Pfad in etwa so lauten: C:/Benutzer/Benutzername/source/repos/myApp

  3. Von PDFNET_BASE zu Ihrem Projektordner (dieser Ordner enthält Ihre .csproj- oder .vbproj-Datei)kopieren Sie den Ordner Lib.

  4. Suchen Sie den Projektmappen-Explorer auf der rechten Seite. Wählen Sie die Option Verweis hinzufügen, indem Sie mit der rechten Maustaste auf Verweise klicken. Dies öffnet ein Dialogfeld Referenzmanager.

  5. Wählen Sie im unteren Teil des Dialogfelds die Option Durchsuchen. Gehen Sie in den kopierten Lib-Ordner, um PDFNetLoader.dll zu den Referenzen hinzuzufügen

  6. Fügen Sie außerdem im x86-Ordner die passende Version von PDFNet.dll als weitere Referenz hinzu (path/to/your/project/folder/Lib/PDFNet/x86/PDFNet.dll). Dadurch wird sichergestellt, dass die Anwendung sowohl auf 32-Bit- als auch auf 64-Bit-Betriebssystemen ausgeführt werden kann.

  7. Klicken Sie auf PDFNet.dll. Stellen Sie sicher, dass Sie die Eigenschaft Lokal kopieren auf False setzen.

3.2 IronOCR installieren

Die IronOCR-Bibliothek kann auf vier Arten installiert werden.

Diese sind:

  • Visual Studio verwenden.
  • Verwendung der Visual Studio-Befehlszeile.
  • Direkter Download von der NuGet-Website.
  • Direktes Herunterladen von der IronPDF-Website.

3.2.1 Verwendung von Visual Studio

Visual Studio bietet die Option NuGet Package Manager, um das Paket direkt in der Lösung zu installieren. Der Screenshot zeigt, wie Sie den NuGet Package Manager öffnen.

Dadurch wird ein Suchfeld angezeigt, das die Liste der Pakete von der NuGet-Website enthält. In der Paketverwaltung müssen wir nach dem Schlüsselwort "IronOCR" suchen, wie im folgenden Screenshot dargestellt:

In der obigen Abbildung sehen Sie die Liste der verwandten Suchergebnisse. Um das Paket in der Lösung zu installieren, müssen wir die gewünschte Option auswählen.

3.2.2 Verwendung der Visual Studio-Befehlszeile

  • In Visual Studio: Gehen Sie zu Werkzeuge-> NuGet Paketmanager -> Paketmanager-Konsole
  • Geben Sie den folgenden Codeschnipsel in die Registerkarte der Paketmanager-Konsole ein.

Installieren-Paket IronOcr


Das Paket wird nun direkt in das aktuelle Projekt installiert und ist dann einsatzbereit.

### 3.2.3 Direkter Download von der NuGet-Website

Bei der dritten Methode können wir das NuGet-Paket direkt von der Website herunterladen
* Navigieren Sie zu diesem [Link](https://www.nuget.org/packages/Ironocr).
* Vergewissern Sie sich, dass Sie im Menü auf der rechten Seite die Option "Paket herunterladen" auswählen.
* Doppelklicken Sie auf das heruntergeladene Paket. Sie wird automatisch installiert.
* Laden Sie dann die Lösung neu und verwenden Sie sie im Projekt.

### 3.2.4 Direkter Download von der IronOCR-Website

Sie können das neueste Paket direkt von der Website herunterladen, indem Sie hier klicken [link](https://ironsoftware.com/csharp/ocr/packages/IronOcr.zip). Folgen Sie den Anweisungen, um das Paket dem Projekt hinzuzufügen, sobald das neueste Paket heruntergeladen ist.
* Klicken Sie mit der rechten Maustaste auf das Projekt im Lösungsfenster.
* Wählen Sie Option Referenz, um den Speicherort der heruntergeladenen Referenz zu suchen.
* Klicken Sie dann auf OK, um die Referenz hinzuzufügen.

### 4.0 OCR-Bild

IronOCR und **PDFtron OCR** verfügen beide über eine OCR-Technologie, mit der Bilder in Text umgewandelt werden können.

### 4.1 Verwendung von **PDFTron**

Konvertieren Sie PDF in DOCX, DOC, HTML, SVG, TIFF, PNG, JPEG, XPS, EPUB, TXT und viele andere Formate.

`` cs

PDFDoc doc = new PDFDoc(dateiname);

// PDF-Dokument in SVG umwandeln

Convert.ToSvg(doc, output_filename + ".svg");

// PDF-Dokument in XPS konvertieren

Convert.ToXps(dateiname, output_filename + ".xps");

// PDF-Dokument in mehrseitiges TIFF konvertieren

Convert.TiffOutputOptions tiff_options = new Convert.TiffOutputOptions();

tiff_options.SetDPI(200);

tiff_options.SetDither(wahr);

tiff_options.SetMono(wahr);

Convert.ToTiff(filename, output_filename + ".tiff", tiff_options);

// PDF in XOD konvertieren

Convert.ToXod(dateiname, output_filename + ".xod");

// PDF in HTML umwandeln

Convert.ToHtml(dateiname, output_filename + ".html");

4.2 Verwendung von IronOCR

var Ocr = new IronTesseract(); // nothing to configure
Ocr.Language = OcrLanguage.EnglishBest;
Ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5;
using (var Input = new OcrInput())
{
    Input.AddImage(@"3.png");
    var Result = Ocr.Read(Input);
    Console.WriteLine(Result.Text);
    Console.ReadKey();
}
var Ocr = new IronTesseract(); // nothing to configure
Ocr.Language = OcrLanguage.EnglishBest;
Ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5;
using (var Input = new OcrInput())
{
    Input.AddImage(@"3.png");
    var Result = Ocr.Read(Input);
    Console.WriteLine(Result.Text);
    Console.ReadKey();
}
Dim Ocr = New IronTesseract() ' nothing to configure
Ocr.Language = OcrLanguage.EnglishBest
Ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5
Using Input = New OcrInput()
	Input.AddImage("3.png")
	Dim Result = Ocr.Read(Input)
	Console.WriteLine(Result.Text)
	Console.ReadKey()
End Using
VB   C#

Die obige Abbildung zeigt den Prozess der Konvertierung von Bilddateien in Text mit der Tesseract 5 API. Die obige Codezeile wurde verwendet, um ein Objekt für Iron Tesseract zu erstellen. Um sicherzustellen, dass wir eine oder mehrere Bilddateien hinzufügen können, haben wir außerdem ein OcrInput-Objekt erzeugt, das den verfügbaren Bildpfad benötigt. Im Iron Tesseract-Objekt kann die Funktion "Lesen" verwendet werden, um die Bilder zu erhalten, indem die Bilddatei geparst und das erzeugte Ergebnis in das OCR-Ergebnis extrahiert wird. Es kann Text aus Fotos extrahieren und in eine Zeichenkette umwandeln.

Tesseract kann zum Hinzufügen von Bildern mit mehreren Frames verwendet werden, indem die Methode "AddMultiFrameTiff" für diesen Prozess verwendet wird. Jedes Einzelbild des Bildes wird von der Tesseract-Bibliothek als eine eigene Seite gelesen und behandelt. Jedes Einzelbild des Bildes wird gelesen, bevor mit dem nächsten Bild fortgefahren wird, bis jedes Bild erfolgreich gescannt wurde. Das TIFF-Bildformat ist das einzige unterstützte Format bei dieser Methode.

Die erfolgreiche Umwandlung der Daten in bearbeitbaren Text ist in der obigen Abbildung zu sehen, ein Ergebnis der IronOCR-Genauigkeit.

5.0 OCR-PDF-Datei

IronOCR und PDFTron OCR konvertieren PDF-Dateien in bearbeitbaren Text. **PDFTron OCR bietet dem Benutzer eine Reihe von Optionen, wie z. B. Speichern der Seite, Bearbeiten des Bildes, Erkennen der Seite usw. Außerdem kann es Speicheroptionen wie Dokument, Text, HTML-Format usw. anbieten. IronOCR ermöglicht es uns auch, eine konvertierte OCR-Datei in HTML, Text, PDF usw. zu speichern.

5.1 PDFTron OCR verwenden

Der vollständige Beispielcode zeigt, wie Sie PDFTron OCR für die direkte, qualitativ hochwertige Konvertierung zwischen PDF, XPS, EMF, SVG, TIFF, PNG, JPEG und anderen Bildformaten verwenden.

// Copyright (c) 2001-2021 by PDFTron Systems Inc. All Rights Reserved.

using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using pdftron;
using pdftron.Common;
using pdftron.Filters;
using pdftron.SDF;
using pdftron.PDF;

// The following code showcases the conversion of documents to formats // such as SVG, PDF, EMF, or XPS.

namespace ConvertTestCS
{
    class Testfile
    {
        public string inputFile, outputFile;
        public bool requiresWindowsPlatform;
        public Testfile(string inFile, string outFile, bool requiresWindowsPlatform_)
        {
            inputFile = inFile;
            outputFile = outFile;
            requiresWindowsPlatform = requiresWindowsPlatform_;
        }
    };

    class Class1
    {
        private static pdftron.PDFNetLoader pdfNetLoader = pdftron.PDFNetLoader.Instance();
        static Class1() {}

        // Relative path to the folder containing test files.
        const string inputPath = "../../../../TestFiles/";
        const string outputPath = "../../../../TestFiles/Output/";

        static bool ConvertSpecificFormats()
        {
            bool err = false;
            try
            {
                using (PDFDoc pdfdoc = new PDFDoc())
                {
                    Console.WriteLine("Converting from XPS");
                    pdftron.PDF.Convert.FromXps(pdfdoc, inputPath + "simple-xps.xps");
                    pdfdoc.Save(outputPath + "xps2pdf v2.pdf", SDFDoc.SaveOptions.e_remove_unused);
                    Console.WriteLine("Saved xps2pdf v2.pdf");
                }
            }
            catch (PDFNetException e)
            {
                Console.WriteLine(e.Message);
                err = true;
            }

    /////////////////////////////////////////////
    if (Environment.OSVersion.Platform == PlatformID.Win32NT) {
                try
                {
                    using (PDFDoc pdfdoc = new PDFDoc())
                    {
                        Console.WriteLine("Converting from EMF");
                        pdftron.PDF.Convert.FromEmf(pdfdoc, inputPath + "simple-emf.emf");
                        pdfdoc.Save(outputPath + "emf2pdf v2.pdf", SDFDoc.SaveOptions.e_remove_unused);
                        Console.WriteLine("Saved emf2pdf v2.pdf");
                    }
                }
                catch (PDFNetException e)
                {
                    Console.WriteLine(e.Message);
                    err = true;
                }
            }

        ///////////////////////////////////////////
            try
            {
                using (PDFDoc pdfdoc = new PDFDoc())
                {
                    // Add a dictionary
                    ObjSet set = new ObjSet();
                    Obj options = set.CreateDict();

                    // Put options
                    options.PutNumber("FontSize", 15);
                    options.PutBool("UseSourceCodeFormatting", true);
                    options.PutNumber("PageWidth", 12);
                    options.PutNumber("PageHeight", 6);

                    // Convert from .txt file
                    Console.WriteLine("Converting from txt");
                    pdftron.PDF.Convert.FromText(pdfdoc, inputPath + "simple-text.txt", options);
                    pdfdoc.Save(outputPath + "simple-text.pdf", SDFDoc.SaveOptions.e_remove_unused);
                    Console.WriteLine("Saved simple-text.pdf");
                }
            }
            catch (PDFNetException e)
            {
                Console.WriteLine(e.Message);
                err = true;
            }

    ///////////////////////////////////////////
            try
            {
                using (PDFDoc pdfdoc = new PDFDoc(inputPath + "newsletter.pdf"))
                {
                    // Convert PDF document to SVG
                    Console.WriteLine("Converting pdfdoc to SVG");
                    pdftron.PDF.Convert.ToSvg(pdfdoc, outputPath + "pdf2svg v2.svg");
                    Console.WriteLine("Saved pdf2svg v2.svg");
                }
            }
            catch (PDFNetException e)
            {
                Console.WriteLine(e.Message);
                err = true;
            }

    /////////////////////////////////////////////////
            try
            {
                // Convert PNG image to XPS
                Console.WriteLine("Converting PNG to XPS");
                pdftron.PDF.Convert.ToXps(inputPath + "butterfly.png", outputPath + "butterfly.xps");
                Console.WriteLine("Saved butterfly.xps");
            }
            catch (PDFNetException e)
            {
                Console.WriteLine(e.Message);
                err = true;
            }
    ///////////////////////////////////////////
            if (Environment.OSVersion.Platform == PlatformID.Win32NT)
            {
                try
                {
                    // Convert MSWord document to XPS
                    Console.WriteLine("Converting DOCX to XPS");
                    pdftron.PDF.Convert.ToXps(inputPath + "simple-word_2007.docx", outputPath + "simple-word_2007.xps");
                    Console.WriteLine("Saved simple-word_2007.xps");
                }
                catch (PDFNetException e)
                {
                    Console.WriteLine(e.Message);
                    err = true;
                }
            }
            ////////////////////////////////////////////////////////////////////
            try
            {
                // Convert PDF document to XPS
                Console.WriteLine("Converting PDF to XPS");
                pdftron.PDF.Convert.ToXps(inputPath + "newsletter.pdf", outputPath + "newsletter.xps");
                Console.WriteLine("Saved newsletter.xps");
            }
            catch (PDFNetException e)
            {
                Console.WriteLine(e.Message);
                err = true;
            }

            //////////////////////////////////////////////////////////////////////
            try
            {
                // Convert PDF document to HTML
                Console.WriteLine("Converting PDF to HTML");
                pdftron.PDF.Convert.ToHtml(inputPath + "newsletter.pdf", outputPath + "newsletter");
                Console.WriteLine("Saved newsletter as HTML");
            }
            catch (PDFNetException e)
            {
                Console.WriteLine(e.Message);
                err = true;
            }

            //////////////////////////////////////////////////////////////////////
            try
            {
                // Convert PDF document to EPUB
                Console.WriteLine("Converting PDF to EPUB");
                pdftron.PDF.Convert.ToEpub(inputPath + "newsletter.pdf", outputPath + "newsletter.epub");
                Console.WriteLine("Saved newsletter.epub");
            }
            catch (PDFNetException e)
            {
                Console.WriteLine(e.Message);
                err = true;
            }

            /////////////////////////////////////////////////////////////////////
            try
            {
                // Convert PDF document to multipage TIFF
                Console.WriteLine("Converting PDF to multipage TIFF");
                pdftron.PDF.Convert.TiffOutputOptions tiff_options = new pdftron.PDF.Convert.TiffOutputOptions();
                tiff_options.SetDPI(200);
                tiff_options.SetDither(true);
                tiff_options.SetMono(true);
                pdftron.PDF.Convert.ToTiff(inputPath + "newsletter.pdf", outputPath + "newsletter.tiff", tiff_options);
                Console.WriteLine("Saved newsletter.tiff");
            }
            catch (PDFNetException e)
            {
                Console.WriteLine(e.Message);
                err = true;
            }

            return err;
        }

        static Boolean ConvertToPdfFromFile()
        {
            System.Collections.ArrayList testfiles = new System.Collections.ArrayList();
            testfiles.Add(new ConvertTestCS.Testfile("simple-word_2007.docx", "docx2pdf.pdf", false));
            testfiles.Add(new ConvertTestCS.Testfile("simple-powerpoint_2007.pptx", "pptx2pdf.pdf", false));
            testfiles.Add(new ConvertTestCS.Testfile("simple-excel_2007.xlsx", "xlsx2pdf.pdf", false));
            testfiles.Add(new ConvertTestCS.Testfile("simple-publisher.pub", "pub2pdf.pdf", true));
            testfiles.Add(new ConvertTestCS.Testfile("simple-text.txt", "txt2pdf.pdf", false));
            testfiles.Add(new ConvertTestCS.Testfile("simple-rtf.rtf", "rtf2pdf.pdf", true));
            testfiles.Add(new ConvertTestCS.Testfile("butterfly.png", "png2pdf.pdf", false));
            testfiles.Add(new ConvertTestCS.Testfile("simple-emf.emf", "emf2pdf.pdf", true));
            testfiles.Add(new ConvertTestCS.Testfile("simple-xps.xps", "xps2pdf.pdf", false));
            // testfiles.Add(new ConvertTestCS.Testfile("simple-webpage.mht", "mht2pdf.pdf", true));
            testfiles.Add(new ConvertTestCS.Testfile("simple-webpage.html", "html2pdf.pdf", true));

            bool err = false;
            if (Environment.OSVersion.Platform == PlatformID.Win32NT)
            {
                try
                {
                    if (pdftron.PDF.Convert.Printer.IsInstalled("PDFTron PDFNet"))
                    {
                        pdftron.PDF.Convert.Printer.SetPrinterName("PDFTron PDFNet");
                    }
                    else if (!pdftron.PDF.Convert.Printer.IsInstalled())
                    {
                        try
                        {
                            Console.WriteLine("Installing printer (requires Windows platform and administrator)");
                            pdftron.PDF.Convert.Printer.Install();
                            Console.WriteLine("Installed printer " + pdftron.PDF.Convert.Printer.GetPrinterName());
                            // the function ConvertToXpsFromFile may require the printer so leave it installed
                            // uninstallPrinterWhenDone = true;
                        }
                        catch (PDFNetException e)
                        {
                            Console.WriteLine("ERROR: Unable to install printer.");
                            Console.WriteLine(e.Message);
                            err = true;
                        }
                        catch
                        {
                            Console.WriteLine("ERROR: Unable to install printer. Make sure that the package's bitness matches your operating system's bitness and that you are running with administrator privileges.");
                        }
                    }
                }
                catch (PDFNetException e)
                {
                    Console.WriteLine("ERROR: Unable to install printer.");
                    Console.WriteLine(e.Message);
                    err = true;
                }
            }
            foreach (Testfile file in testfiles)
            {
                if ( Environment.OSVersion.Platform != PlatformID.Win32NT)
                {
                    if (file.requiresWindowsPlatform)
                    {
                        continue;
                    }
                }
                try
                {
                    using (pdftron.PDF.PDFDoc pdfdoc = new PDFDoc())
                    {

                        if (pdftron.PDF.Convert.RequiresPrinter(inputPath + file.inputFile))
                        {
                            Console.WriteLine("Using PDFNet printer to convert file " + file.inputFile);
                        }
                        pdftron.PDF.Convert.ToPdf(pdfdoc, inputPath + file.inputFile);
                        pdfdoc.Save(outputPath + file.outputFile, SDFDoc.SaveOptions.e_linearized);
                        Console.WriteLine("Converted file: " + file.inputFile);
                        Console.WriteLine("to: " + file.outputFile);
                    }
                }
                catch (PDFNetException e)
                {
                    Console.WriteLine("ERROR: on input file " + file.inputFile);
                    Console.WriteLine(e.Message);
                    err = true;
                }
            }

            return err;
        }
        [STAThread]
        static void Main(string [] args)
        {
            PDFNet.Initialize(PDFTronLicense.Key);
            bool err = false;

            err = ConvertToPdfFromFile();
            if (err)
            {
                Console.WriteLine("ConvertFile failed");
            }
            else
            {
                Console.WriteLine("ConvertFile succeeded");
            }

            err = ConvertSpecificFormats();
            if (err)
            {
                Console.WriteLine("ConvertSpecificFormats failed");
            }
            else
            {
                Console.WriteLine("ConvertSpecificFormats succeeded");
            }

            if (Environment.OSVersion.Platform == PlatformID.Win32NT)
            {
                if (pdftron.PDF.Convert.Printer.IsInstalled())
                {
                    try
                    {
                        Console.WriteLine("Uninstalling printer (requires Windows platform and administrator)");
                        pdftron.PDF.Convert.Printer.Uninstall();
                        Console.WriteLine("Uninstalled Printer " + pdftron.PDF.Convert.Printer.GetPrinterName());
                    }
                    catch
                    {
                        Console.WriteLine("Unable to uninstall printer");
                    }
                }
            }
            PDFNet.Terminate();
            Console.WriteLine("Done.");
        }
    }
}
// Copyright (c) 2001-2021 by PDFTron Systems Inc. All Rights Reserved.

using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using pdftron;
using pdftron.Common;
using pdftron.Filters;
using pdftron.SDF;
using pdftron.PDF;

// The following code showcases the conversion of documents to formats // such as SVG, PDF, EMF, or XPS.

namespace ConvertTestCS
{
    class Testfile
    {
        public string inputFile, outputFile;
        public bool requiresWindowsPlatform;
        public Testfile(string inFile, string outFile, bool requiresWindowsPlatform_)
        {
            inputFile = inFile;
            outputFile = outFile;
            requiresWindowsPlatform = requiresWindowsPlatform_;
        }
    };

    class Class1
    {
        private static pdftron.PDFNetLoader pdfNetLoader = pdftron.PDFNetLoader.Instance();
        static Class1() {}

        // Relative path to the folder containing test files.
        const string inputPath = "../../../../TestFiles/";
        const string outputPath = "../../../../TestFiles/Output/";

        static bool ConvertSpecificFormats()
        {
            bool err = false;
            try
            {
                using (PDFDoc pdfdoc = new PDFDoc())
                {
                    Console.WriteLine("Converting from XPS");
                    pdftron.PDF.Convert.FromXps(pdfdoc, inputPath + "simple-xps.xps");
                    pdfdoc.Save(outputPath + "xps2pdf v2.pdf", SDFDoc.SaveOptions.e_remove_unused);
                    Console.WriteLine("Saved xps2pdf v2.pdf");
                }
            }
            catch (PDFNetException e)
            {
                Console.WriteLine(e.Message);
                err = true;
            }

    /////////////////////////////////////////////
    if (Environment.OSVersion.Platform == PlatformID.Win32NT) {
                try
                {
                    using (PDFDoc pdfdoc = new PDFDoc())
                    {
                        Console.WriteLine("Converting from EMF");
                        pdftron.PDF.Convert.FromEmf(pdfdoc, inputPath + "simple-emf.emf");
                        pdfdoc.Save(outputPath + "emf2pdf v2.pdf", SDFDoc.SaveOptions.e_remove_unused);
                        Console.WriteLine("Saved emf2pdf v2.pdf");
                    }
                }
                catch (PDFNetException e)
                {
                    Console.WriteLine(e.Message);
                    err = true;
                }
            }

        ///////////////////////////////////////////
            try
            {
                using (PDFDoc pdfdoc = new PDFDoc())
                {
                    // Add a dictionary
                    ObjSet set = new ObjSet();
                    Obj options = set.CreateDict();

                    // Put options
                    options.PutNumber("FontSize", 15);
                    options.PutBool("UseSourceCodeFormatting", true);
                    options.PutNumber("PageWidth", 12);
                    options.PutNumber("PageHeight", 6);

                    // Convert from .txt file
                    Console.WriteLine("Converting from txt");
                    pdftron.PDF.Convert.FromText(pdfdoc, inputPath + "simple-text.txt", options);
                    pdfdoc.Save(outputPath + "simple-text.pdf", SDFDoc.SaveOptions.e_remove_unused);
                    Console.WriteLine("Saved simple-text.pdf");
                }
            }
            catch (PDFNetException e)
            {
                Console.WriteLine(e.Message);
                err = true;
            }

    ///////////////////////////////////////////
            try
            {
                using (PDFDoc pdfdoc = new PDFDoc(inputPath + "newsletter.pdf"))
                {
                    // Convert PDF document to SVG
                    Console.WriteLine("Converting pdfdoc to SVG");
                    pdftron.PDF.Convert.ToSvg(pdfdoc, outputPath + "pdf2svg v2.svg");
                    Console.WriteLine("Saved pdf2svg v2.svg");
                }
            }
            catch (PDFNetException e)
            {
                Console.WriteLine(e.Message);
                err = true;
            }

    /////////////////////////////////////////////////
            try
            {
                // Convert PNG image to XPS
                Console.WriteLine("Converting PNG to XPS");
                pdftron.PDF.Convert.ToXps(inputPath + "butterfly.png", outputPath + "butterfly.xps");
                Console.WriteLine("Saved butterfly.xps");
            }
            catch (PDFNetException e)
            {
                Console.WriteLine(e.Message);
                err = true;
            }
    ///////////////////////////////////////////
            if (Environment.OSVersion.Platform == PlatformID.Win32NT)
            {
                try
                {
                    // Convert MSWord document to XPS
                    Console.WriteLine("Converting DOCX to XPS");
                    pdftron.PDF.Convert.ToXps(inputPath + "simple-word_2007.docx", outputPath + "simple-word_2007.xps");
                    Console.WriteLine("Saved simple-word_2007.xps");
                }
                catch (PDFNetException e)
                {
                    Console.WriteLine(e.Message);
                    err = true;
                }
            }
            ////////////////////////////////////////////////////////////////////
            try
            {
                // Convert PDF document to XPS
                Console.WriteLine("Converting PDF to XPS");
                pdftron.PDF.Convert.ToXps(inputPath + "newsletter.pdf", outputPath + "newsletter.xps");
                Console.WriteLine("Saved newsletter.xps");
            }
            catch (PDFNetException e)
            {
                Console.WriteLine(e.Message);
                err = true;
            }

            //////////////////////////////////////////////////////////////////////
            try
            {
                // Convert PDF document to HTML
                Console.WriteLine("Converting PDF to HTML");
                pdftron.PDF.Convert.ToHtml(inputPath + "newsletter.pdf", outputPath + "newsletter");
                Console.WriteLine("Saved newsletter as HTML");
            }
            catch (PDFNetException e)
            {
                Console.WriteLine(e.Message);
                err = true;
            }

            //////////////////////////////////////////////////////////////////////
            try
            {
                // Convert PDF document to EPUB
                Console.WriteLine("Converting PDF to EPUB");
                pdftron.PDF.Convert.ToEpub(inputPath + "newsletter.pdf", outputPath + "newsletter.epub");
                Console.WriteLine("Saved newsletter.epub");
            }
            catch (PDFNetException e)
            {
                Console.WriteLine(e.Message);
                err = true;
            }

            /////////////////////////////////////////////////////////////////////
            try
            {
                // Convert PDF document to multipage TIFF
                Console.WriteLine("Converting PDF to multipage TIFF");
                pdftron.PDF.Convert.TiffOutputOptions tiff_options = new pdftron.PDF.Convert.TiffOutputOptions();
                tiff_options.SetDPI(200);
                tiff_options.SetDither(true);
                tiff_options.SetMono(true);
                pdftron.PDF.Convert.ToTiff(inputPath + "newsletter.pdf", outputPath + "newsletter.tiff", tiff_options);
                Console.WriteLine("Saved newsletter.tiff");
            }
            catch (PDFNetException e)
            {
                Console.WriteLine(e.Message);
                err = true;
            }

            return err;
        }

        static Boolean ConvertToPdfFromFile()
        {
            System.Collections.ArrayList testfiles = new System.Collections.ArrayList();
            testfiles.Add(new ConvertTestCS.Testfile("simple-word_2007.docx", "docx2pdf.pdf", false));
            testfiles.Add(new ConvertTestCS.Testfile("simple-powerpoint_2007.pptx", "pptx2pdf.pdf", false));
            testfiles.Add(new ConvertTestCS.Testfile("simple-excel_2007.xlsx", "xlsx2pdf.pdf", false));
            testfiles.Add(new ConvertTestCS.Testfile("simple-publisher.pub", "pub2pdf.pdf", true));
            testfiles.Add(new ConvertTestCS.Testfile("simple-text.txt", "txt2pdf.pdf", false));
            testfiles.Add(new ConvertTestCS.Testfile("simple-rtf.rtf", "rtf2pdf.pdf", true));
            testfiles.Add(new ConvertTestCS.Testfile("butterfly.png", "png2pdf.pdf", false));
            testfiles.Add(new ConvertTestCS.Testfile("simple-emf.emf", "emf2pdf.pdf", true));
            testfiles.Add(new ConvertTestCS.Testfile("simple-xps.xps", "xps2pdf.pdf", false));
            // testfiles.Add(new ConvertTestCS.Testfile("simple-webpage.mht", "mht2pdf.pdf", true));
            testfiles.Add(new ConvertTestCS.Testfile("simple-webpage.html", "html2pdf.pdf", true));

            bool err = false;
            if (Environment.OSVersion.Platform == PlatformID.Win32NT)
            {
                try
                {
                    if (pdftron.PDF.Convert.Printer.IsInstalled("PDFTron PDFNet"))
                    {
                        pdftron.PDF.Convert.Printer.SetPrinterName("PDFTron PDFNet");
                    }
                    else if (!pdftron.PDF.Convert.Printer.IsInstalled())
                    {
                        try
                        {
                            Console.WriteLine("Installing printer (requires Windows platform and administrator)");
                            pdftron.PDF.Convert.Printer.Install();
                            Console.WriteLine("Installed printer " + pdftron.PDF.Convert.Printer.GetPrinterName());
                            // the function ConvertToXpsFromFile may require the printer so leave it installed
                            // uninstallPrinterWhenDone = true;
                        }
                        catch (PDFNetException e)
                        {
                            Console.WriteLine("ERROR: Unable to install printer.");
                            Console.WriteLine(e.Message);
                            err = true;
                        }
                        catch
                        {
                            Console.WriteLine("ERROR: Unable to install printer. Make sure that the package's bitness matches your operating system's bitness and that you are running with administrator privileges.");
                        }
                    }
                }
                catch (PDFNetException e)
                {
                    Console.WriteLine("ERROR: Unable to install printer.");
                    Console.WriteLine(e.Message);
                    err = true;
                }
            }
            foreach (Testfile file in testfiles)
            {
                if ( Environment.OSVersion.Platform != PlatformID.Win32NT)
                {
                    if (file.requiresWindowsPlatform)
                    {
                        continue;
                    }
                }
                try
                {
                    using (pdftron.PDF.PDFDoc pdfdoc = new PDFDoc())
                    {

                        if (pdftron.PDF.Convert.RequiresPrinter(inputPath + file.inputFile))
                        {
                            Console.WriteLine("Using PDFNet printer to convert file " + file.inputFile);
                        }
                        pdftron.PDF.Convert.ToPdf(pdfdoc, inputPath + file.inputFile);
                        pdfdoc.Save(outputPath + file.outputFile, SDFDoc.SaveOptions.e_linearized);
                        Console.WriteLine("Converted file: " + file.inputFile);
                        Console.WriteLine("to: " + file.outputFile);
                    }
                }
                catch (PDFNetException e)
                {
                    Console.WriteLine("ERROR: on input file " + file.inputFile);
                    Console.WriteLine(e.Message);
                    err = true;
                }
            }

            return err;
        }
        [STAThread]
        static void Main(string [] args)
        {
            PDFNet.Initialize(PDFTronLicense.Key);
            bool err = false;

            err = ConvertToPdfFromFile();
            if (err)
            {
                Console.WriteLine("ConvertFile failed");
            }
            else
            {
                Console.WriteLine("ConvertFile succeeded");
            }

            err = ConvertSpecificFormats();
            if (err)
            {
                Console.WriteLine("ConvertSpecificFormats failed");
            }
            else
            {
                Console.WriteLine("ConvertSpecificFormats succeeded");
            }

            if (Environment.OSVersion.Platform == PlatformID.Win32NT)
            {
                if (pdftron.PDF.Convert.Printer.IsInstalled())
                {
                    try
                    {
                        Console.WriteLine("Uninstalling printer (requires Windows platform and administrator)");
                        pdftron.PDF.Convert.Printer.Uninstall();
                        Console.WriteLine("Uninstalled Printer " + pdftron.PDF.Convert.Printer.GetPrinterName());
                    }
                    catch
                    {
                        Console.WriteLine("Unable to uninstall printer");
                    }
                }
            }
            PDFNet.Terminate();
            Console.WriteLine("Done.");
        }
    }
}
' Copyright (c) 2001-2021 by PDFTron Systems Inc. All Rights Reserved.

Imports System
Imports System.Drawing
Imports System.Drawing.Drawing2D
Imports pdftron
Imports pdftron.Common
Imports pdftron.Filters
Imports pdftron.SDF
Imports pdftron.PDF

' The following code showcases the conversion of documents to formats // such as SVG, PDF, EMF, or XPS.

Namespace ConvertTestCS
	Friend Class Testfile
		Public inputFile, outputFile As String
		Public requiresWindowsPlatform As Boolean
		Public Sub New(ByVal inFile As String, ByVal outFile As String, ByVal requiresWindowsPlatform_ As Boolean)
			inputFile = inFile
			outputFile = outFile
			requiresWindowsPlatform = requiresWindowsPlatform_
		End Sub
	End Class

	Friend Class Class1
		Private Shared pdfNetLoader As pdftron.PDFNetLoader = pdftron.PDFNetLoader.Instance()
		Shared Sub New()
		End Sub

		' Relative path to the folder containing test files.
		Private Const inputPath As String = "../../../../TestFiles/"
		Private Const outputPath As String = "../../../../TestFiles/Output/"

		Private Shared Function ConvertSpecificFormats() As Boolean
			Dim err As Boolean = False
			Try
				Using pdfdoc As New PDFDoc()
					Console.WriteLine("Converting from XPS")
					pdftron.PDF.Convert.FromXps(pdfdoc, inputPath & "simple-xps.xps")
					pdfdoc.Save(outputPath & "xps2pdf v2.pdf", SDFDoc.SaveOptions.e_remove_unused)
					Console.WriteLine("Saved xps2pdf v2.pdf")
				End Using
			Catch e As PDFNetException
				Console.WriteLine(e.Message)
				err = True
			End Try

	'///////////////////////////////////////////
	If Environment.OSVersion.Platform = PlatformID.Win32NT Then
				Try
					Using pdfdoc As New PDFDoc()
						Console.WriteLine("Converting from EMF")
						pdftron.PDF.Convert.FromEmf(pdfdoc, inputPath & "simple-emf.emf")
						pdfdoc.Save(outputPath & "emf2pdf v2.pdf", SDFDoc.SaveOptions.e_remove_unused)
						Console.WriteLine("Saved emf2pdf v2.pdf")
					End Using
				Catch e As PDFNetException
					Console.WriteLine(e.Message)
					err = True
				End Try
	End If

		'/////////////////////////////////////////
			Try
				Using pdfdoc As New PDFDoc()
					' Add a dictionary
					Dim [set] As New ObjSet()
					Dim options As Obj = [set].CreateDict()

					' Put options
					options.PutNumber("FontSize", 15)
					options.PutBool("UseSourceCodeFormatting", True)
					options.PutNumber("PageWidth", 12)
					options.PutNumber("PageHeight", 6)

					' Convert from .txt file
					Console.WriteLine("Converting from txt")
					pdftron.PDF.Convert.FromText(pdfdoc, inputPath & "simple-text.txt", options)
					pdfdoc.Save(outputPath & "simple-text.pdf", SDFDoc.SaveOptions.e_remove_unused)
					Console.WriteLine("Saved simple-text.pdf")
				End Using
			Catch e As PDFNetException
				Console.WriteLine(e.Message)
				err = True
			End Try

	'/////////////////////////////////////////
			Try
				Using pdfdoc As New PDFDoc(inputPath & "newsletter.pdf")
					' Convert PDF document to SVG
					Console.WriteLine("Converting pdfdoc to SVG")
					pdftron.PDF.Convert.ToSvg(pdfdoc, outputPath & "pdf2svg v2.svg")
					Console.WriteLine("Saved pdf2svg v2.svg")
				End Using
			Catch e As PDFNetException
				Console.WriteLine(e.Message)
				err = True
			End Try

	'///////////////////////////////////////////////
			Try
				' Convert PNG image to XPS
				Console.WriteLine("Converting PNG to XPS")
				pdftron.PDF.Convert.ToXps(inputPath & "butterfly.png", outputPath & "butterfly.xps")
				Console.WriteLine("Saved butterfly.xps")
			Catch e As PDFNetException
				Console.WriteLine(e.Message)
				err = True
			End Try
	'/////////////////////////////////////////
			If Environment.OSVersion.Platform = PlatformID.Win32NT Then
				Try
					' Convert MSWord document to XPS
					Console.WriteLine("Converting DOCX to XPS")
					pdftron.PDF.Convert.ToXps(inputPath & "simple-word_2007.docx", outputPath & "simple-word_2007.xps")
					Console.WriteLine("Saved simple-word_2007.xps")
				Catch e As PDFNetException
					Console.WriteLine(e.Message)
					err = True
				End Try
			End If
			'//////////////////////////////////////////////////////////////////
			Try
				' Convert PDF document to XPS
				Console.WriteLine("Converting PDF to XPS")
				pdftron.PDF.Convert.ToXps(inputPath & "newsletter.pdf", outputPath & "newsletter.xps")
				Console.WriteLine("Saved newsletter.xps")
			Catch e As PDFNetException
				Console.WriteLine(e.Message)
				err = True
			End Try

			'////////////////////////////////////////////////////////////////////
			Try
				' Convert PDF document to HTML
				Console.WriteLine("Converting PDF to HTML")
				pdftron.PDF.Convert.ToHtml(inputPath & "newsletter.pdf", outputPath & "newsletter")
				Console.WriteLine("Saved newsletter as HTML")
			Catch e As PDFNetException
				Console.WriteLine(e.Message)
				err = True
			End Try

			'////////////////////////////////////////////////////////////////////
			Try
				' Convert PDF document to EPUB
				Console.WriteLine("Converting PDF to EPUB")
				pdftron.PDF.Convert.ToEpub(inputPath & "newsletter.pdf", outputPath & "newsletter.epub")
				Console.WriteLine("Saved newsletter.epub")
			Catch e As PDFNetException
				Console.WriteLine(e.Message)
				err = True
			End Try

			'///////////////////////////////////////////////////////////////////
			Try
				' Convert PDF document to multipage TIFF
				Console.WriteLine("Converting PDF to multipage TIFF")
				Dim tiff_options As New pdftron.PDF.Convert.TiffOutputOptions()
				tiff_options.SetDPI(200)
				tiff_options.SetDither(True)
				tiff_options.SetMono(True)
				pdftron.PDF.Convert.ToTiff(inputPath & "newsletter.pdf", outputPath & "newsletter.tiff", tiff_options)
				Console.WriteLine("Saved newsletter.tiff")
			Catch e As PDFNetException
				Console.WriteLine(e.Message)
				err = True
			End Try

			Return err
		End Function

		Private Shared Function ConvertToPdfFromFile() As Boolean
			Dim testfiles As New System.Collections.ArrayList()
			testfiles.Add(New ConvertTestCS.Testfile("simple-word_2007.docx", "docx2pdf.pdf", False))
			testfiles.Add(New ConvertTestCS.Testfile("simple-powerpoint_2007.pptx", "pptx2pdf.pdf", False))
			testfiles.Add(New ConvertTestCS.Testfile("simple-excel_2007.xlsx", "xlsx2pdf.pdf", False))
			testfiles.Add(New ConvertTestCS.Testfile("simple-publisher.pub", "pub2pdf.pdf", True))
			testfiles.Add(New ConvertTestCS.Testfile("simple-text.txt", "txt2pdf.pdf", False))
			testfiles.Add(New ConvertTestCS.Testfile("simple-rtf.rtf", "rtf2pdf.pdf", True))
			testfiles.Add(New ConvertTestCS.Testfile("butterfly.png", "png2pdf.pdf", False))
			testfiles.Add(New ConvertTestCS.Testfile("simple-emf.emf", "emf2pdf.pdf", True))
			testfiles.Add(New ConvertTestCS.Testfile("simple-xps.xps", "xps2pdf.pdf", False))
			' testfiles.Add(new ConvertTestCS.Testfile("simple-webpage.mht", "mht2pdf.pdf", true));
			testfiles.Add(New ConvertTestCS.Testfile("simple-webpage.html", "html2pdf.pdf", True))

			Dim err As Boolean = False
			If Environment.OSVersion.Platform = PlatformID.Win32NT Then
				Try
					If pdftron.PDF.Convert.Printer.IsInstalled("PDFTron PDFNet") Then
						pdftron.PDF.Convert.Printer.SetPrinterName("PDFTron PDFNet")
					ElseIf Not pdftron.PDF.Convert.Printer.IsInstalled() Then
						Try
							Console.WriteLine("Installing printer (requires Windows platform and administrator)")
							pdftron.PDF.Convert.Printer.Install()
							Console.WriteLine("Installed printer " & pdftron.PDF.Convert.Printer.GetPrinterName())
							' the function ConvertToXpsFromFile may require the printer so leave it installed
							' uninstallPrinterWhenDone = true;
						Catch e As PDFNetException
							Console.WriteLine("ERROR: Unable to install printer.")
							Console.WriteLine(e.Message)
							err = True
						Catch
							Console.WriteLine("ERROR: Unable to install printer. Make sure that the package's bitness matches your operating system's bitness and that you are running with administrator privileges.")
						End Try
					End If
				Catch e As PDFNetException
					Console.WriteLine("ERROR: Unable to install printer.")
					Console.WriteLine(e.Message)
					err = True
				End Try
			End If
			For Each file As Testfile In testfiles
				If Environment.OSVersion.Platform <> PlatformID.Win32NT Then
					If file.requiresWindowsPlatform Then
						Continue For
					End If
				End If
				Try
					Using pdfdoc As pdftron.PDF.PDFDoc = New PDFDoc()

						If pdftron.PDF.Convert.RequiresPrinter(inputPath & file.inputFile) Then
							Console.WriteLine("Using PDFNet printer to convert file " & file.inputFile)
						End If
						pdftron.PDF.Convert.ToPdf(pdfdoc, inputPath & file.inputFile)
						pdfdoc.Save(outputPath & file.outputFile, SDFDoc.SaveOptions.e_linearized)
						Console.WriteLine("Converted file: " & file.inputFile)
						Console.WriteLine("to: " & file.outputFile)
					End Using
				Catch e As PDFNetException
					Console.WriteLine("ERROR: on input file " & file.inputFile)
					Console.WriteLine(e.Message)
					err = True
				End Try
			Next file

			Return err
		End Function
		<STAThread>
		Shared Sub Main(ByVal args() As String)
			PDFNet.Initialize(PDFTronLicense.Key)
			Dim err As Boolean = False

			err = ConvertToPdfFromFile()
			If err Then
				Console.WriteLine("ConvertFile failed")
			Else
				Console.WriteLine("ConvertFile succeeded")
			End If

			err = ConvertSpecificFormats()
			If err Then
				Console.WriteLine("ConvertSpecificFormats failed")
			Else
				Console.WriteLine("ConvertSpecificFormats succeeded")
			End If

			If Environment.OSVersion.Platform = PlatformID.Win32NT Then
				If pdftron.PDF.Convert.Printer.IsInstalled() Then
					Try
						Console.WriteLine("Uninstalling printer (requires Windows platform and administrator)")
						pdftron.PDF.Convert.Printer.Uninstall()
						Console.WriteLine("Uninstalled Printer " & pdftron.PDF.Convert.Printer.GetPrinterName())
					Catch
						Console.WriteLine("Unable to uninstall printer")
					End Try
				End If
			End If
			PDFNet.Terminate()
			Console.WriteLine("Done.")
		End Sub
	End Class
End Namespace
VB   C#

5.2 Verwendung von IronOCR

Die Verwaltung von PDF-Dateien kann mit der Funktion OCRInput abgeschlossen werden. Jede Seite eines Dokuments wird von der Klasse Iron Tesseract gelesen. Der Text wird dann aus den Seiten extrahiert. Eine zweite Funktion namens "AddPDF" ermöglicht es uns, geschützte Dokumente zu öffnen und stellt sicher, dass wir PDFs zu unserer Liste von Dokumenten hinzufügen können (passwort, wenn es geschützt ist). Um ein passwortgeschütztes PDF-Dokument zu öffnen, verwenden Sie das folgende Codefragment:

var Ocr = new IronTesseract(); // nothing to configure
using (var Input = new OcrInput())
{
    Input.AddPdf("example.pdf", "password");
    var Result = Ocr.Read(Input);
    Console.WriteLine(Result.Text);
}
var Ocr = new IronTesseract(); // nothing to configure
using (var Input = new OcrInput())
{
    Input.AddPdf("example.pdf", "password");
    var Result = Ocr.Read(Input);
    Console.WriteLine(Result.Text);
}
Dim Ocr = New IronTesseract() ' nothing to configure
Using Input = New OcrInput()
	Input.AddPdf("example.pdf", "password")
	Dim Result = Ocr.Read(Input)
	Console.WriteLine(Result.Text)
End Using
VB   C#

Das Lesen und Extrahieren von Inhalten aus einer Seite einer PDF-Datei kann mit der Funktion "Addpdfpage" erreicht werden. Geben Sie nur die genaue Seitenzahl an, aus der wir den Text extrahieren wollen. mit "AddPdfPage" können Sie Text aus mehreren von Ihnen angegebenen Seiten extrahieren. IEnumerable ermöglicht es Ihnen, zahlreiche Seiten effizient anzugeben. Sie müssen auch den Speicherort und die Erweiterung der Datei angeben. Das folgende Codeschnipsel veranschaulicht dies:

IEnumerable<int> numbers = new List<int> {2,8,10 };
 var Ocr = new IronTesseract();
using (var Input = new OcrInput())
{
    //single page
    Input.AddPdfPage("example.pdf",10);
    //Multiple page
    Input.AddPdfPages("example.pdf", numbers);
    var Result = Ocr.Read(Input);
    Console.WriteLine(Result.Text);
    Result.SaveAsTextFile("ocrtext.txt");
}
IEnumerable<int> numbers = new List<int> {2,8,10 };
 var Ocr = new IronTesseract();
using (var Input = new OcrInput())
{
    //single page
    Input.AddPdfPage("example.pdf",10);
    //Multiple page
    Input.AddPdfPages("example.pdf", numbers);
    var Result = Ocr.Read(Input);
    Console.WriteLine(Result.Text);
    Result.SaveAsTextFile("ocrtext.txt");
}
Dim numbers As IEnumerable(Of Integer) = New List(Of Integer) From {2, 8, 10}
 Dim Ocr = New IronTesseract()
Using Input = New OcrInput()
	'single page
	Input.AddPdfPage("example.pdf",10)
	'Multiple page
	Input.AddPdfPages("example.pdf", numbers)
	Dim Result = Ocr.Read(Input)
	Console.WriteLine(Result.Text)
	Result.SaveAsTextFile("ocrtext.txt")
End Using
VB   C#

Verwenden Sie die Funktion SaveAsTextFile, um das Ergebnis direkt in einem Textdateiformat zu speichern, so dass Sie die Datei direkt in den Pfad des Ausgabeverzeichnisses herunterladen können. Um die Datei im HTML-Format zu speichern, verwenden Sie SaveAsHocrFile.

6.1 PDFTron verwenden

Wir können das PDFTron SDK verwenden, um Bilder aus PDF-Dateien zu extrahieren, zusammen mit ihren Positionsinformationen und DPI. Anstatt PDF-Bilder in eine Bitmap zu konvertieren, können Sie die unkomprimierten/komprimierten Bilddaten auch direkt mit elements.GetImageData() (wie im Codebeispiel zur PDF-Datenextraktion beschrieben). Erfahren Sie mehr über unsere C# PDF Library und die PDF Parsing and Content Extraction Library.

6.2 Verwendung von IronOCR

IronOCR verfügt über eine beeindruckende Anzahl von Funktionen, mit denen Sie QR-Codes und Barcodes direkt aus gescannten Dokumenten lesen können. Das folgende Codeschnipsel zeigt, wie Sie den Barcode von einem bestimmten Bild oder Dokument scannen können.

var Ocr = new IronTesseract(); // nothing to configure
Ocr.Language = OcrLanguage.EnglishBest;
Ocr.Configuration.ReadBarCodes = true;
Ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5;
using (var Input = new OcrInput())
{
    Input.AddImage("barcode.gif");
    var Result = Ocr.Read(Input);

    foreach (var Barcode in Result.Barcodes)
    {
        Console.WriteLine(Barcode.Value);
    }
}
var Ocr = new IronTesseract(); // nothing to configure
Ocr.Language = OcrLanguage.EnglishBest;
Ocr.Configuration.ReadBarCodes = true;
Ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5;
using (var Input = new OcrInput())
{
    Input.AddImage("barcode.gif");
    var Result = Ocr.Read(Input);

    foreach (var Barcode in Result.Barcodes)
    {
        Console.WriteLine(Barcode.Value);
    }
}
Dim Ocr = New IronTesseract() ' nothing to configure
Ocr.Language = OcrLanguage.EnglishBest
Ocr.Configuration.ReadBarCodes = True
Ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5
Using Input = New OcrInput()
	Input.AddImage("barcode.gif")
	Dim Result = Ocr.Read(Input)

	For Each Barcode In Result.Barcodes
		Console.WriteLine(Barcode.Value)
	Next Barcode
End Using
VB   C#

Der obige Code hilft, den Barcode aus einem bestimmten Bild oder PDF-Dokument zu lesen. In einem einzigen Bild oder auf einer einzigen Seite können mehrere Barcodes gleichzeitig gelesen werden. IronOCR hat eine eigene Methode, die den Barcode liest, Ocr.Configuration.ReadBarCodes.

Die Daten werden nach dem Scannen der Eingabe in einem Objekt namens OCRResult gespeichert. Die Eigenschaft in OCRResult heißt Barcodes und enthält eine Liste aller verfügbaren Barcodedaten. Mit Hilfe einer for-each-Schleife können wir die einzelnen Daten zu den Barcodedetails abrufen. Zwei Vorgänge werden in einem einzigen Prozess abgeschlossen - das Scannen und Lesen des Barcodewertes.

Die Unterstützung von Threading-Optionen ist ebenfalls verfügbar, und es können mehrere OCR-Prozesse gleichzeitig durchgeführt werden. Darüber hinaus kann IronOCR einen genauen Bereich aus einer bestimmten Region erkennen.

var Ocr = new IronTesseract();
using (var Input = new OcrInput())
{
    var ContentArea = new System.Drawing.Rectangle() { X = 215, Y = 1250, Height = 280, Width = 1335 };
    Input.Add("document.png", ContentArea);
    var Result = Ocr.Read(Input);
    Console.WriteLine(Result.Text);
}
var Ocr = new IronTesseract();
using (var Input = new OcrInput())
{
    var ContentArea = new System.Drawing.Rectangle() { X = 215, Y = 1250, Height = 280, Width = 1335 };
    Input.Add("document.png", ContentArea);
    var Result = Ocr.Read(Input);
    Console.WriteLine(Result.Text);
}
Dim Ocr = New IronTesseract()
Using Input = New OcrInput()
	Dim ContentArea = New System.Drawing.Rectangle() With {
		.X = 215,
		.Y = 1250,
		.Height = 280,
		.Width = 1335
	}
	Input.Add("document.png", ContentArea)
	Dim Result = Ocr.Read(Input)
	Console.WriteLine(Result.Text)
End Using
VB   C#

Das obige Codeschnipsel zeigt, wie man OCR für einen bestimmten Bereich durchführt. Sie müssen nur den rechteckigen Bereich im PDF/Bild angeben, da IronOCRs Tesseract-Engine bei der Erkennung des Textes hilft.

IronOCR und PDFtron OCR-Lizenzmodelle und Preisgestaltung

IronOCR Lizenzmodelle und Preisgestaltung

Eine 30-Tage-Geld-zurück-Garantie: Nach dem Kauf einer Lizenz erhalten Sie eine 30-Tage-Geld-zurück-Garantie. Innerhalb der 30 Tage, in denen Sie das Produkt zurückgeben möchten, erhalten Sie Ihr Geld zurück.

Einfache Integration: Die Integration von IronOCR in jedes Projekt und jede Umgebung ist so mühelos, dass sie in einer einzigen Codezeile erreicht werden kann, indem man es einfach als NuGet Paket. Eine andere Möglichkeit, die Umgebung zu integrieren, besteht darin, sie direkt aus dem Internet herunterzuladen.

Dauerlizenzierung: Jede erworbene Lizenz muss nicht erneuert werden.

Kostenloser Support und Produkt-Updates: Jede Lizenz wird direkt von der Gruppe unterstützt, die hinter dem Produkt steht, und beinhaltet ein Jahr lang kostenlose Produkt-Updates. Der Kauf von Erweiterungen ist jederzeit möglich.

Sofortige Lizenzen: Sobald die Zahlung eingegangen ist, werden die registrierten Lizenzschlüssel sofort verschickt.

Alle Lizenzen sind unbefristet und gelten für Entwicklung, Staging und Produktion.

Die Lite-Lizenz

  • 1 Entwickler
  • 1 Standort
  • 1 Projekt
  • Unbefristete Lizenz

    Dieses Paket ermöglicht es einem einzelnen Softwareentwickler in einem Unternehmen, Iron Software an einem Ort zu nutzen. Iron Software kann in einer einzelnen Intranetanwendung, einer Webanwendung oder einem Desktop-Softwareprogramm eingesetzt werden. Es ist verboten, Lizenzen außerhalb einer Organisation oder einer Agentur/Kundenbeziehung weiterzugeben, da sie nicht übertragbar sind. Dieser Lizenztyp, wie auch alle anderen Lizenztypen, schließt ausdrücklich alle Rechte aus, die nicht ausdrücklich im Rahmen der Vereinbarung gewährt werden, ohne OEM-Weitergabe und Nutzung der Iron Software als SaaS ohne den Erwerb einer zusätzlichen Abdeckung.

    Preisgestaltung: Beginnt bei $749 pro Jahr.

Die Berufslizenz

  • 10 Entwickler
  • 10 Standorte
  • 10 Projekte
  • Unbefristete Lizenz

    Diese Lizenz erlaubt es einer bestimmten Anzahl von Softwareentwicklern in einem Unternehmen, Iron Software an zahlreichen Standorten zu nutzen, maximal jedoch zehn. Iron Software kann in beliebig vielen Websites, Intranetanwendungen oder Desktop-Softwareanwendungen verwendet werden. Lizenzen sind nicht übertragbar und können nicht außerhalb einer Organisation oder einer Agentur/Kundenbeziehung weitergegeben werden. Dieser Lizenztyp, wie auch alle anderen Lizenztypen, schließt ausdrücklich alle Rechte aus, die nicht ausdrücklich im Rahmen der Vereinbarung gewährt werden, einschließlich der OEM-Weitergabe und der Nutzung der Iron Software als SaaS ohne Erwerb einer zusätzlichen Abdeckung. Diese Lizenz kann in ein einzelnes Projekt integriert werden, bis zu einer Höchstzahl von 10.

    Preisgestaltung: Ab $999 pro Jahr.

Die Unbegrenzte Lizenz

  • Unbegrenzt viele Entwickler
  • Unbegrenzte Anzahl von Standorten
  • Unbegrenzte Projekte
  • Unbefristete Lizenz

    Dadurch kann eine unbegrenzte Anzahl von Softwareentwicklern in einem Unternehmen Iron Software an einer unbegrenzten Anzahl von Standorten nutzen. Iron Software kann in beliebig vielen Intranetanwendungen, Desktop-Softwareanwendungen oder Websites verwendet werden. Die Lizenzen sind nicht übertragbar und können nicht außerhalb einer Organisation oder einer Agentur-/Kundenbeziehung weitergegeben werden. Dieser Lizenztyp, wie auch alle anderen Lizenztypen, schließt ausdrücklich alle Rechte aus, die nicht im Rahmen der Vereinbarung gewährt werden, einschließlich der OEM-Weitergabe und der Nutzung der Iron Software als SaaS ohne Erwerb einer zusätzlichen Abdeckung.

    Preisgestaltung: Ab $5,999 pro Jahr.

    Royalty-Free Redistribution — Dies erlaubt Ihnen, die Iron Software als Teil verschiedener kommerzieller Produkte zu vertreiben, die unterschiedlich verpackt sind (ohne Lizenzgebühren zahlen zu müssen) basierend auf der Anzahl der Projekte, die von der Basislizenz abgedeckt werden. Dies ermöglicht die Bereitstellung von Iron Software im Rahmen von SaaS-Softwarediensten, die auf der Anzahl der von der Basislizenz abgedeckten Projekte basiert.

    Preisgestaltung: Ab 1.599 $ pro Jahr.

PDFTron Lizenzmodelle und Preisgestaltung

PDFTron Pakete (Benutzerdefinierte Lizenzen)

  • Die Preise für benutzerdefinierte Lizenzen variieren - fordern Sie ein Angebot an, das Ihrem Budget entspricht.
  • Einsatz der leistungsstarken Technologie von PDFTron zur Anzeige und Bearbeitung von Dokumenten auf Web-, Mobil- und Desktop-Plattformen
  • Bereit für die Integration, den OEM-Vertrieb und Organisationen mit großen Dokumentenmengen oder besonderen Anforderungen
  • Preisgestaltung für mehrere Domänen und günstige Rabatte für mehrere Jahre
  • Offline- und Sandbox-Betrieb unterstützt
  • Individuelle, umfassende Vertragsbedingungen
  • Beratungs- und Schulungsdienste

    Maßgeschneiderte PDFTron-Lizenzen sind auf Ihre Anwendung und Ihre Geschäftsanforderungen zugeschnitten. Die Preisgestaltung ist abhängig von Ihrem Funktionsumfang

    Die IronOCR Lite-Lizenz ist ein undefiniertes Paket, das einen Entwickler mit einem Jahr Support beinhaltet und etwa $749 kostet. Die IronOCR Professional-Lizenz mit 10 Entwicklerpaketen und einem Jahr Support kostet $999, während die PDFTron-Pakete wiederum nicht definiert sind. Um ein Paket zu kaufen, müssen Sie sich an das Support-Center wenden, um ein Angebot zu erhalten.

Die IronOCR Lite und Professional Pakete beinhalten OEM- oder SaaS-Service mit einer 5-Jahres-Supportoption. Die Lite-Version umfasst ein Paket für einen Entwickler mit 5-Jahres-Support und Saas- und OEM-Service und kostet $2.897 mit einer kundenspezifischen Supportoption. Die IronOCR Professional-Version umfasst ein 10-Entwickler-Paket mit 5 Jahren Support, Saas und OEM-Service und kostet $3.397. Für das 10-Entwickler-Paket von PDFTron mit einem Jahr Support, Saas und OEM-Service gibt es keinen festgelegten Preis.

7.0 Schlussfolgerung

IronOCR im Kontext des .NET-Frameworks liefert mit Tesseract ein einfach zu bedienendes Werkzeug, das die Unterstützung von Fotos und PDF-Dokumenten auf vielfältige Weise ermöglicht. Es bietet auch verschiedene Einstellungen zur Verbesserung der Leistung der Tesseract OCR-Bibliothek. Es wird eine Vielzahl von Sprachen unterstützt, mit der Möglichkeit, mehrere Sprachen in einem einzigen Vorgang zu verwenden. Besuchen Sie die Website des Unternehmens, um mehr über Tesseract OCR zu erfahren.

PDFTron ist eine Softwareanwendung, die verschiedene Engines verwendet, um Bilder und PDF-Dokumente zu erkennen. Außerdem bietet es verschiedene Einstellungen zur Verbesserung der OCR-Leistung und die Möglichkeit, mehrere Sprachen auszuwählen. PDFTron hat Einschränkungen bei der Verwendung von Seitenkonvertierungen. Es gibt auch verschiedene Preise für unterschiedliche Betriebssysteme.

IronOCR ist ein wettbewerbsfähiges Softwareprodukt und kann eine höhere Genauigkeit bieten als konkurrierende Marken. Bei ähnlichen Produkten ist die Erkennung minderwertiger Bilder bisweilen fehlgeschlagen, was zu unbekannten Zeichen führte. Andererseits liefert IronOCR nicht nur genaue Ergebnisse, sondern ermöglicht auch die Erkennung von Barcodedaten und das Lesen von Barcodes aus Bildern.

Die IronOCR-Pakete bieten wettbewerbsfähige Lizenzierung und Support zu einem einzigen Preis für alle Plattformen. Im Vergleich dazu sind die OCR-Produkte von PDFTron ausschließlich kundenspezifisch ausgewählt, was tendenziell teurer ist. Die Preise variieren zwischen beiden Produkten, wobei IronOCR bei einem Preis von $749 beginnt, während der Startpreis von PDFTron aufgrund der benutzerdefinierten Auswahl nicht definiert ist. Zusammenfassend lässt sich sagen, dass IronOCR ein breiteres Spektrum an Funktionen für einen niedrigeren Preis bietet.

Also, worauf warten Sie noch? Der kostenlose Test ist für alle zugänglich. Holen Sie sich die Lizenz hier und beginnen Sie sofort!

< PREVIOUS
Tesseract-Alternativen (2022 Update)
NÄCHSTES >
Ein Vergleich zwischen IronOCR und Tesseract.NET

Sind Sie bereit, loszulegen? Version: 2024.10 gerade veröffentlicht

Gratis NuGet-Download Downloads insgesamt: 2,561,036 Lizenzen anzeigen >