using System.IO;
using Atalasoft.Imaging;
using Atalasoft.Imaging.Codec;
using Atalasoft.Imaging.Codec.Pdf;
using Atalasoft.Ocr;
using Atalasoft.Ocr.GlyphReader;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace PdfProcessing
{
///
/// Summary description for PDFSearchableTest
///
[TestClass]
public class PDFSearchableTest
{
private const string TestDirectory = @"..\..\TestFiles\";
private const string TestDirectoryOutput = @"..\..\TestFiles\Output\";
private GlyphReaderEngine ocr;
private PdfTranslator pdfTrans;
private PdfDecoder pdf;
[ClassInitialize()]
public static void MyClassInitialize(TestContext testContext)
{
// Put this in your applications termination code
// Shut the engine down
GlyphReaderLoader loader = new GlyphReaderLoader();
if (Directory.Exists(TestDirectoryOutput) == false)
{
Directory.CreateDirectory(TestDirectoryOutput);
}
FileDirectoryUtil.SetFilePermissions(TestDirectory);
}
[ClassCleanup()]
public static void MyClassCleanup(TestContext testContext)
{
}
[TestInitialize]
public void TestInitialize()
{
Directory.CreateDirectory(TestDirectoryOutput);
}
[TestCleanup()]
public void MyTestCleanup()
{
// FileDirectoryUtil.RemoveDirectoryAndFilesRecursive(TestDirectoryOutput);
}
public PDFSearchableTest()
{
// ocr = new ExperVisionEngine();
ocr = new GlyphReaderEngine();
pdfTrans = new PdfTranslator();
pdfTrans.OutputType = PdfTranslatorOutputType.TextUnderImage;
ocr.Translators.Add(pdfTrans);
pdf = new PdfDecoder();
RegisteredDecoders.Decoders.Add(pdf);
}
[TestMethod]
public void TestMethod1()
{
// pdf.Resolution = 150;
Workspace myWorkspace = new Workspace();
myWorkspace.Open(TestDirectory + "File2_NonSearch.pdf");
myWorkspace.Save(TestDirectoryOutput + "out.tiff", new TiffEncoder());
using (FileSystemImageSource fis =
new FileSystemImageSource(new string[1] { TestDirectoryOutput + "out.tiff" }, true))
{
ocr.Initialize();
// ocr.RecognitionCulture = CultureInfo.GetCultureInfo("es-ES");
ocr.Translate(fis, "application/pdf", TestDirectoryOutput+ "blah.pdf");
ocr.ShutDown();
}
Assert.IsTrue(FileDirectoryUtil.CountFilesInADirectory(TestDirectoryOutput) > 0,
"Count should be greater than 0");
}
[TestMethod]
public void TestMethod2()
{
ocr.Initialize();
try
{
// _pageNum = 0;
// this.Cursor = Cursors.WaitCursor;
// ocr.PreprocessingOptions.AutoRotate = chkFixPageOrientation.Checked;
// pdfTrans.AutoPageRotation = chkFixPageOrientation.Checked;
FileSystemImageSource fs = new FileSystemImageSource(new string[] { TestDirectory + "File1_NonSearch.pdf" }, true);
ocr.Translate(fs, "application/pdf", TestDirectoryOutput+ "blah2.pdf");
}
finally
{
ocr.ShutDown();
}
Assert.IsTrue(FileDirectoryUtil.CountFilesInADirectory(TestDirectoryOutput) > 0,
"Count should be greater than 0");
}
}
public class FileDirectoryUtil
{
///
/// Utility method for changing permissions of files one level deep given a directory.
///
/// The directory to
public static void SetFilePermissions(string directory)
{
DirectoryInfo directoryInfo = new DirectoryInfo(directory);
foreach (FileInfo fileInfo in directoryInfo.GetFiles())
{
fileInfo.Attributes = FileAttributes.Normal;
}
}
///
/// Removes directories and files recursively.
///
/// The root directory to start deleting from.
public static void RemoveDirectoryAndFilesRecursive(string directory)
{
if (Directory.Exists(directory))
{
DirectoryInfo directoryInfo = new DirectoryInfo(directory);
DirectoryInfo[] directoryInfos = directoryInfo.GetDirectories();
foreach (DirectoryInfo info in directoryInfos)
{
RemoveDirectoryAndFilesRecursive(info.FullName);
}
foreach (FileInfo fileInfo in directoryInfo.GetFiles())
{
fileInfo.Delete();
}
Directory.Delete(directory);
}
}
///
/// Returns the number of files in a directory
///
/// The directory that has files to be counted.
/// return -1 if directory doesnt exist
public static int CountFilesInADirectory(string directory)
{
int returnVal = -1;
if (Directory.Exists(directory) == true)
{
DirectoryInfo directoryInfo = new DirectoryInfo(directory);
returnVal = directoryInfo.GetFiles().Length;
}
return returnVal;
}
}
}