c# - 使用任何开源/非许可包从 .NET Core 上的 PDF 读取文本
问题描述
我需要阅读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();
另外,我试过iTextSharp.LGPLv2.Core
了,但效果不如另一个,结果也不准确。
缺点之一iTextSharp.LGPLv2.Core
是它不支持编码并导致PDF 的提取文本中出现噪音
我的字符串生成器如下图所示:
解决方案
方法:PDFPig (Apache:2.0 License)
安装 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());
}
方法: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);
方法: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);
推荐阅读
- android - 在链订阅的线程上发出值
- html - 汉堡菜单引导带
- python - 初学者的python重新加载模块。importlib.reload 似乎不起作用
- javascript - Laravel Mix 缩小子文件夹中的 js 文件
- c# - 为什么每次都需要调用 BuildServiceProvider 来获取依赖?
- r - 提取R中的第一个和最后一个交易日期
- java - 如何将 Json 中的顶级元素映射到 Java 类
- php - PHP不打印最低的mysqli ID号
- java - 在不使用多线程的情况下 Ping 多个 IP 地址
- javascript - Node 6.14.0 asyncawait npm 包和谷歌云函数 -> Javascript 异步函数