如何使用iText 7(8.0)在C#中检测PDF文件中的指定字符串
在C#中使用iText提取PDF文本的示例代码
我正在进行PDF库的基础基准测试(生成、拆分、合并、读取、压缩),用于选择项目中的C# PDF库。需求是从可直接提取文本的生成式发票PDF(无需OCR)中提取文本,并检测是否包含指定字符串。
使用Dynamic PDF时,实现很简洁:
PdfDocument inputDocument = new PdfDocument(RessourcesBenchmark.PDF_MERGE_PAGE_TO_APPEND_PATH); var text = inputDocument.GetText();
问题
请问如何在C#中使用iText实现相同的文本提取功能?iText的文档结构比较特殊,要么需要通读全部API,要么参考官网的电子书或示例,但这些示例往往针对性过强。我找了相关资料但花费2小时仍未解决,需要示例代码或代码片段参考。完成基准测试后,我会把代码发布到GitHub,因为这类库的文档通常不够直观。
iText 7 实现方案
iText 7中需要结合PdfReader、PdfDocument和文本提取策略来实现,以下是可直接复用的代码片段:
using iText.Kernel.Pdf; using iText.Kernel.Pdf.Canvas.Parser; using iText.Kernel.Pdf.Canvas.Parser.Listener; using System.Text; public static string ExtractFullPdfText(string pdfFilePath) { // 初始化读取器和文档对象,using确保资源自动释放 using (PdfReader pdfReader = new PdfReader(pdfFilePath)) using (PdfDocument pdfDocument = new PdfDocument(pdfReader)) { StringBuilder extractedText = new StringBuilder(); // 遍历PDF的所有页面 for (int pageNumber = 1; pageNumber <= pdfDocument.GetNumberOfPages(); pageNumber++) { // 使用LocationTextExtractionStrategy按视觉顺序提取文本,适合规整的发票文档 ITextExtractionStrategy extractionStrategy = new LocationTextExtractionStrategy(); string pageText = PdfTextExtractor.GetTextFromPage(pdfDocument.GetPage(pageNumber), extractionStrategy); extractedText.Append(pageText); } return extractedText.ToString(); } } // 调用示例:提取文本并检测指定字符串 string pdfContent = ExtractFullPdfText(RessourcesBenchmark.PDF_MERGE_PAGE_TO_APPEND_PATH); bool hasTargetString = pdfContent.Contains("你的目标检测字符串");
关键说明
- 提取策略选择:
LocationTextExtractionStrategy会按照文本在页面上的视觉布局顺序提取,适合生成式发票这类排版规范的文档;如果需要按PDF内部的原始文本存储顺序提取,可以替换为SimpleTextExtractionStrategy - 依赖安装:确保已通过NuGet安装iText 7的核心包(如
itext.kernel、itext.pdfa等,根据项目需求选择)
内容的提问来源于stack exchange,提问作者aurelienjo
相关产品推荐
相关产品推荐

