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";
}