file-folder-helper/Helpers/HelperPdfStripperWrapper.cs

174 lines
7.2 KiB
C#

using Microsoft.Extensions.Logging;
using System.Collections.ObjectModel;
using System.Diagnostics;
namespace File_Folder_Helper.Helpers;
internal static class HelperPdfStripperWrapper
{
private static (string?, string?) GetDestinationDirectory(List<string> args)
{
string? d = null;
string? k = null;
for (int i = 1; i < args.Count; i++)
{
if (args[i].Length == 2 && i + 1 < args.Count)
{
if (args[i][1] == 'd')
d = Path.GetFullPath(args[i + 1]);
else if (args[i][1] == 'k')
k = args[i + 1].Trim();
i++;
}
}
return (d, k);
}
private static string GetGhostTextFromPDF(string ghostPCLFileName, string sourceFileNamePdf, string destinationFileName)
{
string result;
if (File.Exists(destinationFileName))
File.Delete(destinationFileName);
//string arguments = $"-i \"{sourceFile}\" -o \"{result}\"";
string arguments = $"-dSAFER -dBATCH -dNOPAUSE -dFIXEDMEDIA -dFitPage -dAutoRotatePages=/All -dDEVICEWIDTHPOINTS=792 -dDEVICEHEIGHTPOINTS=612 -sOutputFile=\"{destinationFileName}\" -sDEVICE=pdfwrite \"{sourceFileNamePdf}\"";
//Process process = Process.Start(configData.LincPDFCFileName, arguments);
Process? process = Process.Start(ghostPCLFileName, arguments);
_ = process?.WaitForExit(30000);
if (!File.Exists(destinationFileName))
result = string.Empty;
else
result = File.ReadAllText(destinationFileName);
return result;
}
private static string GetKofaxTextFromPDF(string kofaxFileName, string sourceFileNamePdf, string destinationFileName)
{
string result;
if (File.Exists(destinationFileName))
File.Delete(destinationFileName);
string arguments = $"-inputFile\"{sourceFileNamePdf}\" -outputFile\"{destinationFileName}\" -TTIF";
Process? process = Process.Start(kofaxFileName, arguments);
_ = process?.WaitForExit(30000);
if (!File.Exists(destinationFileName))
result = string.Empty;
else
result = File.ReadAllText(destinationFileName);
return result;
}
private static string GetTextFromPDF(string pdfTextStripperFileName, string sourceFileNamePdf, string destinationFileName)
{
string result;
ProcessStartInfo processStartInfo = new(pdfTextStripperFileName, $"s \"{sourceFileNamePdf}\"")
{
UseShellExecute = false,
RedirectStandardError = true,
RedirectStandardOutput = true,
};
Process? process = Process.Start(processStartInfo);
_ = process?.WaitForExit(30000);
if (!File.Exists(destinationFileName))
result = string.Empty;
else
result = File.ReadAllText(destinationFileName);
return result;
}
private static void ParseSave(ILogger log, string pdfTextStripperFileName, string ghostPCLFileName, string kofaxFileName, string destinationDirectory, string[] files)
{
string text;
string destinationFileName;
if (!Directory.Exists(destinationDirectory))
_ = Directory.CreateDirectory(destinationDirectory);
foreach (string file in files)
{
destinationFileName = Path.Combine(destinationDirectory, $"{file}.txt");
text = GetTextFromPDF(pdfTextStripperFileName, file, destinationFileName);
if (string.IsNullOrEmpty(text))
text = GetGhostTextFromPDF(ghostPCLFileName, file, destinationFileName);
if (string.IsNullOrEmpty(text))
text = GetKofaxTextFromPDF(kofaxFileName, file, destinationFileName);
log.LogInformation("<{file}> == {length}", Path.GetFileName(file), text.Length);
}
}
internal static void ParseSave(ILogger log, List<string> args)
{
string pdfTextStripperFileName = Path.Combine(AppContext.BaseDirectory, "PDF-Text-Stripper.exe");
if (!File.Exists(pdfTextStripperFileName))
log.LogInformation("exe <{pdfTextStripperFileName}> doesn't exist!", pdfTextStripperFileName);
else
{
string ghostPCLFileName = Path.Combine(AppContext.BaseDirectory, "gPcl6win64.exe");
if (!File.Exists(ghostPCLFileName))
log.LogInformation("exe <{ghostPCLFileName}> doesn't exist!", ghostPCLFileName);
else
{
string kofaxFileName = "C:/Program Files (x86)/Kofax/Power PDF 50/batchConverter.com";
if (!File.Exists(kofaxFileName))
log.LogInformation("exe <{kofaxFileName}> doesn't exist!", kofaxFileName);
else
{
(string? destinationDirectory, string? _) = GetDestinationDirectory(args);
if (string.IsNullOrEmpty(destinationDirectory))
log.LogInformation("-d <{destinationDirectory}> wasn't supplied!", nameof(destinationDirectory));
else
{
string[] files = Directory.GetFiles(args[0], "*.pdf", SearchOption.TopDirectoryOnly);
if (files.Length == 0)
log.LogInformation("Length == {length}", files.Length);
else
ParseSave(log, pdfTextStripperFileName, ghostPCLFileName, kofaxFileName, destinationDirectory, files);
}
}
}
}
}
private static void ParseStrip(ILogger log, string destinationDirectory, string key, string[] files)
{
string[] lines;
string fileName;
string[] segments;
List<string> collection = new();
foreach (string file in files)
{
lines = File.ReadAllLines(file);
fileName = Path.GetFileName(file);
foreach (string line in lines)
{
segments = line.Split(':');
if (segments.Length < 2)
continue;
if (segments[0].Trim() != key)
continue;
collection.Add($"{fileName}\t{line}");
}
log.LogInformation("<{fileName}>", fileName);
}
if (collection.Count > 0)
File.WriteAllLines(Path.Combine(destinationDirectory, $"{key}.txt"), collection);
}
internal static void ParseStrip(ILogger log, List<string> args)
{
if (DateTime.Now > new DateTime(2023, 9, 15))
log.LogInformation("This helper was a short term helper!");
else
{
(string? destinationDirectory, string? key) = GetDestinationDirectory(args);
if (string.IsNullOrEmpty(key))
log.LogInformation("-k <{key}> wasn't supplied!", nameof(key));
else
{
string[] files = Directory.GetFiles(args[0], "*.txt", SearchOption.TopDirectoryOnly);
if (files.Length == 0)
log.LogInformation("Length == {length}", files.Length);
else
ParseStrip(log, args[0], key, files);
}
}
}
}