public void AppendLtd(string sourceFileName,string destFileName)
Public Sub AppendLtd( _ByVal sourceFileName As String, _ByVal destFileName As String _)
- (BOOL)appendLtdFile:(NSString *)srcLtdFiledestinationLtdFile:(NSString *)dstLtdFileerror:(NSError **)error
public void appendLtd(String sourceFileName, String destFileName) public:void AppendLtd(String^ sourceFileName,String^ destFileName)
sourceFileName
The source LTD file.
destFileName
The destination LTD file.
You can use this method to append several LTD files together before calling Convert. The example below shows how this can be useful in a multi-threading OCR solution. sourceFileName must exist on disk before calling this method, otherwise, an exception will be thrown. destFileName may or may not exist prior to calling this method, if it does not exist, a new file is created and the data is copied as is from the source file.
When this method returns, destFileName will contain all the pages from the source and destination file (if exists), for example if the source file has 10 pages and the destination file has 20 pages, the result will be an LTD with 30 pages in destFileName with the 10 pages from the source file appended to the end of the destination file at page index 20, 21, 22, etc.
The source file name is never changed by this method.
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 filevar inputFileName = GetImageFileName();var outputFileName = Path.Combine(LEAD_VARS.ImagesDir, "AppendLtdExample.pdf");// This is the LTD file we will use to append all recognition datastring mainLtdFileName = Path.GetTempFileName();if (File.Exists(outputFileName))File.Delete(outputFileName);if (File.Exists(mainLtdFileName))File.Delete(mainLtdFileName);// Use OCR Advantage engineusing (var ocrEngine = OcrEngineManager.CreateEngine(OcrEngineType.LEAD)){ocrEngine.Startup(null, null, null, LEAD_VARS.OcrLEADRuntimeDir);// We can re-use LTD files, so create onevar pageLtdFileName = Path.GetTempFileName();// Get number of pagesvar pageCount = ocrEngine.RasterCodecsInstance.GetTotalPages(inputFileName);for (var pageNumber = 1; pageNumber <= pageCount; pageNumber++){// OCR this page and save it as LTDConsole.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 fileocrEngine.DocumentWriterInstance.AppendLtd(pageLtdFileName, mainLtdFileName);}// No need for this anymoreFile.Delete(pageLtdFileName);// We are done, convert the LTD to final format, here, we will// use PDFConsole.WriteLine("Converting to final format");ocrEngine.DocumentWriterInstance.Convert(mainLtdFileName, outputFileName, DocumentFormat.Pdf);}Console.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 itif (File.Exists(pageLtdFileName))File.Delete(pageLtdFileName);// Create an OCR documentusing (var ocrDocument = ocrEngine.DocumentManager.CreateDocument()){// Load the pageConsole.WriteLine(" Loading the page");ocrDocument.Pages.AddPages(inputFileName, pageNumber, pageNumber, null);var ocrPage = ocrDocument.Pages[0];// Auto-zone itConsole.WriteLine(" Auto-zoning the page");ocrPage.AutoZone(null);// Recognize itConsole.WriteLine(" Recognizing the page");ocrPage.Recognize(null);// Save itConsole.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 LEADTOOLSusing (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 imagecodecs.Save(finalImage, multiPageImageFileName, RasterImageFormat.CcittGroup4, 1);}return multiPageImageFileName;}static class LEAD_VARS{public const string ImagesDir = @"C:\LEADTOOLS21\Resources\Images";public const string OcrLEADRuntimeDir = @"C:\LEADTOOLS21\Bin\Common\OcrLEADRuntime";}
Imports LeadtoolsImports Leadtools.CodecsImports Leadtools.Document.WriterImports Leadtools.OcrPublic Sub AppendLtdExample()' Get a multi-page source fileDim inputFileName As String = GetImageFileName()Dim outputFileName As String = Path.Combine(LEAD_VARS.ImagesDir, "AppendLtdExample.pdf")' This is the LTD file we will use to append all recognition dataDim mainLtdFileName As String = Path.GetTempFileName()If (File.Exists(outputFileName)) Then File.Delete(outputFileName)If (File.Exists(mainLtdFileName)) Then File.Delete(mainLtdFileName)' Use OCR Advantage engineUsing ocrEngine As IOcrEngine = OcrEngineManager.CreateEngine(OcrEngineType.LEAD)ocrEngine.Startup(Nothing, Nothing, Nothing, LEAD_VARS.OcrLEADRuntimeDir)' We can re-use LTD files, so create oneDim pageLtdFileName As String = Path.GetTempFileName()' Get number of pagesDim pageCount As Integer = ocrEngine.RasterCodecsInstance.GetTotalPages(inputFileName)For pageNumber As Integer = 1 To pageCount' OCR this page and save it as LTDConsole.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 fileocrEngine.DocumentWriterInstance.AppendLtd(pageLtdFileName, mainLtdFileName)Next' No need for this anymoreFile.Delete(pageLtdFileName)' We are done, convert the LTD to final format, here, we will' use PDFConsole.WriteLine("Converting to final format")ocrEngine.DocumentWriterInstance.Convert(mainLtdFileName, outputFileName, DocumentFormat.Pdf)End UsingConsole.WriteLine("Success, file {0} is created", outputFileName)End SubPrivate Shared Sub RecognizeAndSaveLtd(ocrEngine As IOcrEngine, inputFileName As String, pageNumber As Integer, pageLtdFileName As String)' Delete the LTD file if it exists so we can put fresh data in itIf (File.Exists(pageLtdFileName)) Then File.Delete(pageLtdFileName)' Create an OCR documentUsing ocrDocument As IOcrDocument = ocrEngine.DocumentManager.CreateDocument()' Load the pageConsole.WriteLine(" Loading the page")ocrDocument.Pages.AddPages(inputFileName, pageNumber, pageNumber, Nothing)Dim ocrPage As IOcrPage = ocrDocument.Pages(0)' Auto-zone itConsole.WriteLine(" Auto-zoning the page")ocrPage.AutoZone(Nothing)' Recognize itConsole.WriteLine(" Recognizing the page")ocrPage.Recognize(Nothing)' Save itConsole.WriteLine(" Saving the page")ocrDocument.Save(pageLtdFileName, DocumentFormat.Ltd, Nothing)End UsingEnd SubPrivate Shared Function GetImageFileName() As StringDim pageTileTemplate As String = Path.Combine(LEAD_VARS.ImagesDir, "Ocr{0}.tif")Dim multiPageImageFileName As String = Path.Combine(LEAD_VARS.ImagesDir, "AppendLtdExample.tif")If File.Exists(multiPageImageFileName) Then File.Delete(multiPageImageFileName)' Create a multi-page TIF file by stitching OCR1 to OCR4.tif shipped with LEADTOOLSUsing codecs As New RasterCodecs()Dim finalImage As RasterImage = NothingFor page As Integer = 1 To 4Dim pageImage As RasterImage = codecs.Load(String.Format(pageTileTemplate, page))If IsNothing(finalImage) ThenfinalImage = pageImageElsefinalImage.AddPage(pageImage)pageImage.Dispose()End IfNext' Save the final imagecodecs.Save(finalImage, multiPageImageFileName, RasterImageFormat.CcittGroup4, 1)End UsingReturn multiPageImageFileNameEnd FunctionPublic NotInheritable Class LEAD_VARSPublic Const ImagesDir As String = "C:\LEADTOOLS21\Resources\Images"Public Const OcrLEADRuntimeDir As String = "C:\LEADTOOLS21\Bin\Common\OcrLEADRuntime"End Class
Programming with LEADTOOLS Document Writers
Help Collections
Raster .NET | C API | C++ Class Library | HTML5 JavaScript
Document .NET | C API | C++ Class Library | HTML5 JavaScript
Medical .NET | C API | C++ Class Library | HTML5 JavaScript
Medical Web Viewer .NET
Multimedia
Direct Show .NET | C API | Filters
Media Foundation .NET | C API | Transforms
Supported Platforms
.NET, Java, Android, and iOS/macOS Assemblies
Imaging, Medical, and Document
C API/C++ Class Libraries
Imaging, Medical, and Document
HTML5 JavaScript Libraries
Imaging, Medical, and Document
