AppendLtd Method (original) (raw)

Summary

Appends one LEADTOOLS Temporary Document (LTD) file to another.

Syntax

C#

Objective-C

C++/CLI

Java

Python

- (BOOL)appendLtdFile:(NSString *)srcLtdFile destinationLtdFile:(NSString *)dstLtdFile error:(NSError **)error

Parameters

sourceFileName
The source LTD file.

destFileName
The destination LTD file.

Example

This example will show how to use multiple threads to speed up OCR recognition of a multipage image file. This example shows part of internal functionality already achieved with the IOcrAutoRecognizeManager class.

using Leadtools; using Leadtools.Codecs; using Leadtools.Document.Writer; using Leadtools.Ocr; public void AppendLtdExample() { // Get a multi-page source file var inputFileName = GetImageFileName(); var outputFileName = Path.Combine(LEAD_VARS.ImagesDir, "AppendLtdExample.pdf"); // This is the LTD file we will use to append all recognition data string mainLtdFileName = Path.GetTempFileName(); if (File.Exists(outputFileName)) File.Delete(outputFileName); if (File.Exists(mainLtdFileName)) File.Delete(mainLtdFileName); // Use OCR Advantage engine using (var ocrEngine = OcrEngineManager.CreateEngine(OcrEngineType.LEAD)) { ocrEngine.Startup(null, null, null, LEAD_VARS.OcrLEADRuntimeDir); // We can re-use LTD files, so create one var pageLtdFileName = Path.GetTempFileName(); // Get number of pages var pageCount = ocrEngine.RasterCodecsInstance.GetTotalPages(inputFileName); for (var pageNumber = 1; pageNumber <= pageCount; pageNumber++) { // OCR this page and save it as LTD Debug.WriteLine("Processing page {0} of {1}", pageNumber, pageCount); RecognizeAndSaveLtd(ocrEngine, inputFileName, pageNumber, pageLtdFileName); // Append this LTD to the main one // Notice, first time, the main LTD does not exist, AppendLtd will // just copy the data over from the source file ocrEngine.DocumentWriterInstance.AppendLtd(pageLtdFileName, mainLtdFileName); } // No need for this anymore File.Delete(pageLtdFileName); // We are done, convert the LTD to final format, here, we will // use PDF Debug.WriteLine("Converting to final format"); ocrEngine.DocumentWriterInstance.Convert(mainLtdFileName, outputFileName, DocumentFormat.Pdf); } Debug.WriteLine("Success, file {0} is created", outputFileName); } private static void RecognizeAndSaveLtd(IOcrEngine ocrEngine, string inputFileName, int pageNumber, string pageLtdFileName) { // Delete the LTD file if it exists so we can put fresh data in it if (File.Exists(pageLtdFileName)) File.Delete(pageLtdFileName); // Create an OCR document using (var ocrDocument = ocrEngine.DocumentManager.CreateDocument()) { // Load the page Debug.WriteLine(" Loading the page"); ocrDocument.Pages.AddPages(inputFileName, pageNumber, pageNumber, null); var ocrPage = ocrDocument.Pages[0]; // Auto-zone it Debug.WriteLine(" Auto-zoning the page"); ocrPage.AutoZone(null); // Recognize it Debug.WriteLine(" Recognizing the page"); ocrPage.Recognize(null); // Save it Debug.WriteLine(" Saving the page"); ocrDocument.Save(pageLtdFileName, DocumentFormat.Ltd, null); } } private static string GetImageFileName() { var pageTileTemplate = Path.Combine(LEAD_VARS.ImagesDir, "Ocr{0}.tif"); var multiPageImageFileName = Path.Combine(LEAD_VARS.ImagesDir, "AppendLtdExample.tif"); if (File.Exists(multiPageImageFileName)) File.Delete(multiPageImageFileName); // Create a multi-page TIF file by stitching OCR1 to OCR4.tif shipped with LEADTOOLS using (var codecs = new RasterCodecs()) { RasterImage finalImage = null; for (int page = 1; page <= 4; page++) { var pageImage = codecs.Load(string.Format(pageTileTemplate, page)); if (finalImage == null) { finalImage = pageImage; } else { finalImage.AddPage(pageImage); pageImage.Dispose(); } } // Save the final image codecs.Save(finalImage, multiPageImageFileName, RasterImageFormat.CcittGroup4, 1); } return multiPageImageFileName; } static class LEAD_VARS { public const string ImagesDir = @"C:\LEADTOOLS22\Resources\Images"; public const string OcrLEADRuntimeDir = @"C:\LEADTOOLS22\Bin\Common\OcrLEADRuntime"; }