如何在iText中使用LocationTextExtractionStrategy提取标准化PDF指定区域文本?
使用iText7的LocationTextExtractionStrategy提取PDF指定区域文本
要从PDF指定区域提取文本,你可以结合FilteredTextEventListener和RegionTextFilter,对LocationTextExtractionStrategy进行区域过滤。以下是完整的实现方案:
核心实现步骤
- 定义目标提取区域:用
Rectangle类指定区域的坐标与尺寸(PDF坐标系以页面左下角为原点,单位为点) - 包装提取策略:通过
FilteredTextEventListener将区域过滤器绑定到LocationTextExtractionStrategy - 执行区域文本提取:使用包装后的策略完成指定区域的文本提取
C#代码示例
using iText.Kernel.Pdf; using iText.Kernel.Geom; using iText.PdfParser; // 初始化PDF文档 string path = "你的发票路径.pdf"; PdfReader pdfReader = new PdfReader(path); PdfDocument pdfDoc = new PdfDocument(pdfReader); for (int page = 1; page <= pdfDoc.GetNumberOfPages(); page++) { // 1. 定义目标区域:参数依次为x左边界、y下边界、区域宽度、区域高度 // 示例:提取页面中一个坐标(100, 600)开始、宽300高80的区域 Rectangle targetRegion = new Rectangle(100, 600, 300, 80); // 2. 创建区域过滤器和带过滤的提取策略 RegionTextFilter regionFilter = new RegionTextFilter(targetRegion); LocationTextExtractionStrategy baseStrategy = new LocationTextExtractionStrategy(); FilteredTextEventListener filteredStrategy = new FilteredTextEventListener(baseStrategy, regionFilter); // 3. 提取指定区域的文本 string extractedText = PdfTextExtractor.GetTextFromPage(pdfDoc.GetPage(page), filteredStrategy); // 输出提取结果 Console.WriteLine($"第{page}页指定区域内容:{extractedText}"); } // 释放资源 pdfDoc.Close(); pdfReader.Close();
关键说明
- 坐标确认:若不清楚目标区域的坐标,可通过PDF阅读器的元素位置查看功能获取,或先提取全页文本,结合
LocationTextExtractionStrategy输出的文本位置信息分析。 - 多区域提取:如需提取多个字段,只需循环定义不同的
Rectangle区域,重复执行提取逻辑即可。 - 标准化发票适配:由于你的发票是标准化格式,只需提前确认每个数据字段对应的固定区域坐标,即可稳定提取目标数据。
内容的提问来源于stack exchange,提问作者user1252314
相关产品推荐
相关产品推荐

