Leadtools.Forms.DocumentWriters Namespace : DocumentWriter Class |
public class DocumentWriter
'Declaration Public Class DocumentWriter
'Usage Dim instance As DocumentWriter
public sealed class DocumentWriter
function Leadtools.Forms.DocumentWriters.DocumentWriter()
public ref class DocumentWriter
The DocumentWriter and the LEADTOOLS Document Writers toolkit is used to create multi-page and searchable documents from one or more Windows Enhanced Meta File (EMF) objects.
Support for various popular formats is included, such as PDF, XPS, DOC, HTML, RTF or Text. For a list of all the document formats supported, refer to the DocumentFormat enumeration.
To create a document from EMF, perform the following steps
The Windows Enhanced Meta File (EMF) objects can be obtained from various sources as shown in the following list:
Many of the document formats supported by DocumentWriter contain extra options and functionality that can be controlled through the use of the DocumentWriter.GetOptions and DocumentWriter.GetOptions methods. These options can be set and then saved to an external XML file using the DocumentWriter.SaveOptions method. Later, you can re-load these options using the DocumentWriter.LoadOptions method.
Support is provided to monitor the document creation operation through the DocumentWriter.Progress event. Your application can provide a visual feedback using a progress bar and a cancel button to the user to allow both monitoring and abortion of the current operation.
The LEADTOOLS Temporary Document format (DocumentFormat.Ltd) allows you to create a temporary document on disk that you can add pages to in between sessions. This can be helpful when you have large amount of pages to add to a PDF document for example or when not all the pages can be obtained at the same time (for example, in a server scenario when the client sends one page to the server at a time). After all pages are added to the temporary file on disk, you can use the DocumentWriter.Convert method to convert this file to the final document (for example PDF or DOC).
The Dots/Inch (DPI) of the page is the same as the DPI stored in the DocumentPage.EmfHandle property. Therefore, to create a page with 300 DPI, you must add a document page with an EMF that has a DPI of 300 (both horizontally or vertically although the LEADTOOLS Document Writer supports different values for the DPI). When using the PDF with image/text feature, set the DPI of the Leadtools.RasterImage object to the same DPI as the EMF handle using the RasterImage.XResolution and RasterImage.YResolution properties.
You can also use the DocumentWriter.AppendLtd method to append pages from one LTD file to another.
Imports Leadtools Imports Leadtools.Codecs Imports Leadtools.Forms.DocumentWriters Imports Leadtools.Forms.Ocr ' Windows API functions needed to load/delete an EMF <DllImport("gdi32.dll")> _ Private Shared Function GetEnhMetaFile(ByVal lpszMetaFile As String) As IntPtr End Function <DllImport("gdi32.dll")> _ Private Shared Function DeleteEnhMetaFile(ByVal hemf As IntPtr) As Boolean End Function Private Sub DocumentWriterExample() Dim tifFileName1 As String = Path.Combine(LEAD_VARS.ImagesDir, "Ocr1.tif") Dim tifFileName2 As String = Path.Combine(LEAD_VARS.ImagesDir, "Ocr2.tif") Dim outputDirectory As String = LEAD_VARS.ImagesDir ' Create the output directory If Directory.Exists(outputDirectory) Then Directory.Delete(outputDirectory, True) End If Directory.CreateDirectory(outputDirectory) ' Create an instance of the engine Using ocrEngine As IOcrEngine = OcrEngineManager.CreateEngine(OcrEngineType.Advantage, False) ' Start the engine using default parameters Console.WriteLine("Starting up the engine...") ocrEngine.Startup(Nothing, Nothing, Nothing, LEAD_VARS.OcrAdvantageRuntimeDir) ' Create the OCR document Console.WriteLine("Creating the OCR document...") Dim ocrDocumentManager As IOcrDocumentManager = ocrEngine.DocumentManager Using ocrDocument As IOcrDocument = ocrDocumentManager.CreateDocument() ' Add the pages to the document Console.WriteLine("Adding the pages...") ocrDocument.Pages.AddPage(tifFileName1, Nothing) ocrDocument.Pages.AddPage(tifFileName2, Nothing) ' Recognize the pages to this document. Note, we did not call AutoZone, it will explicitly be called by Recognize Console.WriteLine("Recognizing all the pages...") ocrDocument.Pages.Recognize(Nothing) ' Save to all the formats supported by this OCR engine Dim formats As Array = [Enum].GetValues(GetType(DocumentFormat)) For Each format As DocumentFormat In formats Dim friendlyName As String = DocumentWriter.GetFormatFriendlyName(format) Console.WriteLine("Saving (using default options) to {0}...", friendlyName) ' Construct the output file name (output_directory + document_format_name + . + extension) Dim extension As String = DocumentWriter.GetFormatFileExtension(format) Dim outputFileName As String = Path.Combine(outputDirectory, format.ToString() + "." + extension) ' Save the document ocrDocument.Save(outputFileName, format, Nothing) ' If this is the LTD format, convert it to PDF If format = DocumentFormat.Ltd Then Console.WriteLine("Converting the LTD file to PDF...") Dim pdfFileName As String = Path.Combine(outputDirectory, format.ToString() + "_pdf.pdf") Dim docWriter As DocumentWriter = ocrEngine.DocumentWriterInstance docWriter.Convert(outputFileName, pdfFileName, DocumentFormat.Pdf) End If Next ' Now save to all the engine native formats (if any) supported by the engine Dim engineFormats() As String = ocrDocumentManager.GetSupportedEngineFormats() For Each engineFormat As String In engineFormats Dim friendlyName As String = ocrDocumentManager.GetEngineFormatFriendlyName(engineFormat) Console.WriteLine("Saving to engine native format {0}...", friendlyName) ' Construct the output file name (output_directory + "engine" + engine_format_name + . + extension) Dim extension As String = ocrDocumentManager.GetEngineFormatFileExtension(engineFormat) Dim outputFileName As String = Path.Combine(outputDirectory, "engine_" + engineFormat + "." + extension) ' To use this format, set it in the IOcrDocumentManager.EngineFormat and do a normal save using DocumentFormat.User ' Save the document ocrDocumentManager.EngineFormat = engineFormat ocrDocument.Save(outputFileName, DocumentFormat.User, Nothing) Next End Using ' Shutdown the engine ' Note: calling Dispose will also automatically shutdown the engine if it has been started Console.WriteLine("Shutting down...") ocrEngine.Shutdown() End Using End Sub Public NotInheritable Class LEAD_VARS Public Const ImagesDir As String = "C:\Users\Public\Documents\LEADTOOLS Images" Public Const OcrAdvantageRuntimeDir As String = "C:\LEADTOOLS 18\Bin\Common\OcrAdvantageRuntime" End Class
using Leadtools; using Leadtools.Codecs; using Leadtools.Forms.DocumentWriters; using Leadtools.Drawing; using Leadtools.Forms.Ocr; // Windows API functions needed to load/delete an EMF [DllImport("gdi32.dll")] private static extern IntPtr GetEnhMetaFile(string lpszMetaFile); [DllImport("gdi32.dll")] private static extern bool DeleteEnhMetaFile(IntPtr hemf); public void DocumentWriterExample() { string tifFileName1 = Path.Combine(LEAD_VARS.ImagesDir, "Ocr1.tif"); string tifFileName2 = Path.Combine(LEAD_VARS.ImagesDir, "Ocr2.tif"); string outputDirectory = LEAD_VARS.ImagesDir; // Create the output directory if (Directory.Exists(outputDirectory)) Directory.Delete(outputDirectory, true); Directory.CreateDirectory(outputDirectory); // Create an instance of the engine using (IOcrEngine ocrEngine = OcrEngineManager.CreateEngine(OcrEngineType.Advantage, false)) { // Start the engine using default parameters Console.WriteLine("Starting up the engine..."); ocrEngine.Startup(null, null, null, LEAD_VARS.OcrAdvantageRuntimeDir); // Create the OCR document Console.WriteLine("Creating the OCR document..."); IOcrDocumentManager ocrDocumentManager = ocrEngine.DocumentManager; using (IOcrDocument ocrDocument = ocrDocumentManager.CreateDocument()) { // Add the pages to the document Console.WriteLine("Adding the pages..."); ocrDocument.Pages.AddPage(tifFileName1, null); ocrDocument.Pages.AddPage(tifFileName2, null); // Recognize the pages to this document. Note, we did not call AutoZone, it will explicitly be called by Recognize Console.WriteLine("Recognizing all the pages..."); ocrDocument.Pages.Recognize(null); // Save to all the formats supported by this OCR engine Array formats = Enum.GetValues(typeof(DocumentFormat)); foreach (DocumentFormat format in formats) { string friendlyName = DocumentWriter.GetFormatFriendlyName(format); Console.WriteLine("Saving (using default options) to {0}...", friendlyName); // Construct the output file name (output_directory + document_format_name + . + extension) string extension = DocumentWriter.GetFormatFileExtension(format); string outputFileName = Path.Combine(outputDirectory, format.ToString() + "." + extension); // Save the document ocrDocument.Save(outputFileName, format, null); // If this is the LTD format, convert it to PDF if (format == DocumentFormat.Ltd) { Console.WriteLine("Converting the LTD file to PDF..."); string pdfFileName = Path.Combine(outputDirectory, format.ToString() + "_pdf.pdf"); DocumentWriter docWriter = ocrEngine.DocumentWriterInstance; docWriter.Convert(outputFileName, pdfFileName, DocumentFormat.Pdf); } } // Now save to all the engine native formats (if any) supported by the engine string[] engineFormats = ocrDocumentManager.GetSupportedEngineFormats(); foreach (string engineFormat in engineFormats) { string friendlyName = ocrDocumentManager.GetEngineFormatFriendlyName(engineFormat); Console.WriteLine("Saving to engine native format {0}...", friendlyName); // Construct the output file name (output_directory + "engine" + engine_format_name + . + extension) string extension = ocrDocumentManager.GetEngineFormatFileExtension(engineFormat); string outputFileName = Path.Combine(outputDirectory, "engine_" + engineFormat + "." + extension); // To use this format, set it in the IOcrDocumentManager.EngineFormat and do a normal save using DocumentFormat.User // Save the document ocrDocumentManager.EngineFormat = engineFormat; ocrDocument.Save(outputFileName, DocumentFormat.User, null); } } // Shutdown the engine // Note: calling Dispose will also automatically shutdown the engine if it has been started Console.WriteLine("Shutting down..."); ocrEngine.Shutdown(); } } static class LEAD_VARS { public const string ImagesDir = @"C:\Users\Public\Documents\LEADTOOLS Images"; public const string OcrAdvantageRuntimeDir = @"C:\LEADTOOLS 18\Bin\Common\OcrAdvantageRuntime"; }