见附件K-1文件。我试图对iTextSharp库进行大量调整,但没有成功正确加载数据。
理想情况下,我想解析文档,类似于人类如何阅读它们,一次一个文本框,阅读其内容。
var reader = new PdfReader(FILE, Encoding.ASCII.GetBytes(password));
string[] lines;
var strategy = new LocationTextExtractionStrategy();
string currentPageText = PdfTextExtractor.GetTextFromPage(reader, 1, strategy);
lines = currentPageText.Split(new string[] {"\r\n", "\n"}, StringSplitOptions.None);
我也试过玩Annotation解析但没有运气。
我是新手,可能看错了地方。你能帮我指导正确的方向吗?
非常感谢。
答案 0 :(得分:2)
第一个问题,如果这个表格是电子形式还是扫描形式?后者会使数据提取更加困难,因为它也应该涉及OCR。
如果您有电子PDF并且如果您拥有所有类似的表格,那么为什么不使用以下策略:
如果您的表单变化很少,那么您可以检查第一个框以提取表单的名称并加载适当的设置文件(包含该变体的一组区域)
此方法适用于任何PDF库。
答案 1 :(得分:1)
你想要解析文档,类似于人类如何阅读它们,一次一个文本框,阅读其内容。这意味着你首先必须尝试自动识别那些文本框。然后,您可以通过这些区域提取文本。
要在文档中自动识别这些文本框,您必须提取包围这些框的边框线。为此,您首先要了解如何创建边框线。它们可能使用矢量图形作为线条或矩形绘制,但它们也可以是背景位图图像的一部分。
不幸的是,我手边没有IRS表格,因此无法分析其内部结构。我们假设现在使用矢量图形创建边框。因此,您必须提取矢量图形。
要使用iText(夏普)提取矢量图形,您可以使用iText(Sharp)解析器命名空间中的类,使它们解析文档并将解析事件提供给您创建的侦听器收集矢量图形操作:
IExtRenderListener
,特别是其ModifyPath
和RenderPath
方法,当将其他路径元素(例如行或矩形)添加到当前路径或当前路径时分别调用这些方法路径被渲染(抚摸?填充?)。您的实施收集这些信息。PdfReaderContentParser
。LocationTextExtractionStrategy
实例中解析同一页面。LocationTextExtractionStrategy.GetResultantText
并为每个框添加匹配的ITextChunkFilter
参数来检索已识别文本框的文本。(实际上,你可以在一次传递中解析你的监听器实例和LocationTextExtractionStrategy
实例,以进行一些优化。)
所有iText(夏普)特定任务都是微不足道的,唯一的另一项任务,分析线条和矩形,以获得框的坐标,对于熟练使用C#的软件开发人员来说应该不是什么大问题。
答案 2 :(得分:0)
查看IvyPdf库和模板编辑器。它使用c#并提供高级功能来解析和提取数据,因此您不必处理PDF文档的内部。您可以使用它构建相当复杂的场景。
我认为它不能读取注释。