我需要阅读PDF并将其转换为.Txt。我尝试iTextSharp作为免费库,它运行良好但与 .NET Core 不兼容。
iTextSharp 中的代码片段
string prevPage = "";
for (int page = 5; page <= reader.NumberOfPages; page++)
{
ITextExtractionStrategy its = new SimpleTextExtractionStrategy();
var s = PdfTextExtractor.GetTextFromPage(reader, page, its);
if (prevPage != s) sb.Append(s);
prevPage = s;
}
reader.Close();
Run Code Online (Sandbox Code Playgroud)
另外,我试过,iTextSharp.LGPLv2.Core但效果不如另一个,结果也不准确。
缺点之一iTextSharp.LGPLv2.Core是它不支持编码并导致提取的 PDF 文本中出现噪声
我的 stringbuilder 如下图所示:
安装 Nuget 包PdfPig
在 .Net Core 3.1 上测试
using (var stream = File.OpenRead(pdfPath1))
using (UglyToad.PdfPig.PdfDocument document = UglyToad.PdfPig.PdfDocument.Open(stream))
{
var page = document.GetPage(2);
return string.Join(" ", page.GetWords());
}
Run Code Online (Sandbox Code Playgroud)
方法:iTextSharp.LGPLv2.Core(GNU 通用公共许可证)
安装 Nuget iTextSharp.LGPLv2.Core
它是 iTextSharp (V4.1.6) 的最新 LGPL 版本到 .NET Core 的非官方端口。
在 .Net Core 3.1 上测试
var reader = new PdfReader(pdfPath1);
var streamBytes = reader.GetPageContent(1);
var tokenizer = new PrTokeniser(new RandomAccessFileOrArray(streamBytes));
var sb = new StringBuilder();
while (tokenizer.NextToken())
{
if (tokenizer.TokenType == PrTokeniser.TK_STRING)
{
var currentText = tokenizer.StringValue;
currentText = Encoding.UTF8.GetString(ASCIIEncoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(currentText)));
sb.Append(tokenizer.StringValue);
}
}
Console.WriteLine("Extracted text "+sb);
Run Code Online (Sandbox Code Playgroud)
方法:GrapeCity.Documents.PDF(许可)
Install Nuget-Package *GrapeCity.Documents.Pdf
Is 跨平台库允许创建、修改和分析 PDF 文档
在 .Net Core 3.1 上测试
var doc = new GcPdfDocument();
FileStream fs = new FileStream(pdfPath1, FileMode.Open, FileAccess.ReadWrite);
doc.Load(fs);
//To extract Page 1
var tmap_page2 = doc.Pages[0].GetTextMap();
tmap_page2.GetFragment(out TextMapFragment newFragment, out string Extractedtext);
Console.WriteLine("Extracted Text: \n\n" +Extractedtext);
Run Code Online (Sandbox Code Playgroud)