我正在用C#和.NET开发一个小应用程序来自动化一个目前是手动完成的过程。该应用程序正在寻找PDF文档中的特定模式,并根据该模式将其上传到任何需要的位置。它与PDF没有任何问题,PDF是用数字方式编写的(Word、Nodepad等)。然后转换成PDF格式。
后来我发现,将来使用的文件将是90%的扫描文件。事实证明,这是一个比我预期的更大的问题。我找到了多个第三方库,它们可以处理这个任务-> iText7、LeadTools、ABBYY、WhatsMate PDF到text API、SautinSoft .NET Offce Edition。问题是,他们都有报酬,而我负担不起其中任何一项。
我有一个想法,把PDF转换成任何图像类型(jpg,png,tiff等)并使用Tesseract OCR识别文本。问题是,我找不到一个免费使用的库来转换为图像类型.
关于这个问题,我征求任何意见。是否可以从扫描的PDF中免费提取文本?或者,是否可以将PDF转换成图像类型并免费使用OCR?
谢谢你抽出时间,如果我的问题没有按照正确的方式编排,我很抱歉。
发布于 2022-11-18 10:11:35
免费的解决方案是NicomSoft OCR。你可以在网上找到网站。但是代码的一部分:加载扫描的PDF ->使OCR ->保存结果(Docx或->):
string pdfFile = pdfPath;
string outFile = String.Empty;
f.OpenPdf(pdfFile);
if (f.PageCount > 0)
{
// To Docx.
outFile = "Result.docx";
f.WordOptions.Format = PdfFocus.CWordOptions.eWordDocument.Docx;
if (f.ToWord(outFile) == 0)
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(outFile) { UseShellExecute = true });
// To HTML.
outFile = "Result.html";
f.HtmlOptions.KeepCharScaleAndSpacing = false;
if (f.ToHtml(outFile) == 0)
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(outFile) { UseShellExecute = true });
}
else
{
Console.WriteLine("Error: {0}!", f.Exception.Message);
Console.ReadLine();
}
}
public static byte[] PerformOCRNicomsoft(byte[] image)
{
NSOCRLib.NSOCRClass NsOCR;
int CfgObj = 0;
int OcrObj = 0;
int ImgObj = 0;
int SvrObj = 0;
NsOCR = new NSOCRLib.NSOCRClass();
NsOCR.Engine_SetLicenseKey("AB2A4DD5FF2A"); //required for licensed version only
NsOCR.Engine_InitializeAdvanced(out CfgObj, out OcrObj, out ImgObj);
// Scale
NsOCR.Cfg_SetOption(CfgObj, TNSOCR.BT_DEFAULT, "ImgAlizer/AutoScale", "0");
NsOCR.Cfg_SetOption(CfgObj, TNSOCR.BT_DEFAULT, "ImgAlizer/ScaleFactor", "4.0");
NsOCR.Cfg_SetOption(CfgObj, TNSOCR.BT_DEFAULT, "Languages/English", "1");
try
{
int res = 0;
Array imgArray = null;
using (MemoryStream ms = new MemoryStream(image))
{
ms.Flush();
imgArray = ms.ToArray();
}
res = NsOCR.Img_LoadFromMemory(ImgObj, ref imgArray, imgArray.Length);
if (res > TNSOCR.ERROR_FIRST)
return null;
NsOCR.Svr_Create(CfgObj, TNSOCR.SVR_FORMAT_PDF, out SvrObj);
NsOCR.Svr_NewDocument(SvrObj);
res = NsOCR.Img_OCR(ImgObj, TNSOCR.OCRSTEP_FIRST, TNSOCR.OCRSTEP_LAST, TNSOCR.OCRFLAG_NONE);
if (res > TNSOCR.ERROR_FIRST)
return null;
res = NsOCR.Svr_AddPage(SvrObj, ImgObj, TNSOCR.FMT_EXACTCOPY);
if (res > TNSOCR.ERROR_FIRST) return null;
Array outPdf = null;
NsOCR.Svr_SaveToMemory(SvrObj, out outPdf);
return (byte[])outPdf;
}
finally
{
}
}https://stackoverflow.com/questions/65575197
复制相似问题