我需要使用C#提取嵌入破产法院文件中的XML数据。在PDF Reader中,文件看起来像是典型的法庭文档。在记事本中,XML被埋在文本中。我尝试使用SimpleTextExtractionStrategy提取带有此代码和另一个代码片段的文本。第一个生成的文件中没有来自PDF的可识别文本,第二个输出的符号是。我还尝试将其作为AcroField和Xfaform访问。似乎不是基于“监视”窗口的那些。
遍历Visual Studio中的代码,XML出现在“监视”窗口中的PDFReader >>目录>>键>>原始>>非公共成员>>词典下。我不知道如何到达。由于它在Watch中与其他PDFName一起列出,我想我也许可以通过PDFReader.Catalog.GetAsDict访问它,但它不会显示为PDFName。这些文件的提供者有一个Java应用程序,它似乎只读取文本。不知道我是否需要使用其他提取策略,还是直接访问包含XML的目录项。我从来没有以编程方式使用PDF文件或iTextSharp,所以我很挣扎。有任何代码建议吗?
如果您可以将PDF与嵌入式XML共享,将很有帮助。当我第一次阅读您的问题时,我假设XML将作为文档级附件(存储在EmbeddedFiles中)或作为附件注释(存储在添加到页面字典中的Annot中)添加。
阅读uscourts.gov上写的内容,看起来XML实际上是XMP流。这意味着您可以在目录的“元数据”条目中找到它(或者可以在页面词典中找到它)。
如果您无法共享文件,则必须自己做。您可以通过下载iText RUPS来实现。它是查看PDF内部的免费工具。
浏览树形结构,寻找Metadata
,寻找EmbeddedFiles
,寻找Annots
。如果您不告诉我们XML的嵌入方式,那么没有人能够为您提供帮助。
请查看我对以下问题的回答,以获取示例:如何使用itext删除PDF附件(请参阅我如何使用RUPS来查看目录>名称> EmbeddedFiles)。
额外说明:到目前为止,您尝试过的代码是有关从页面中提取文本的,而不是有关提取嵌入在PDF中的XML文件的。
更新:
现在,您已经共享了文件,我已经使用RUPS查找XML文件。看下面的屏幕截图:
你看到这里发生了什么吗?有人添加了一个名为自定义项/USCTbankruptcynotice
与String
作为价值直奔目录。太错了:将文件存储在string中是一个坏主意。该开发人员为什么不将文件存储为流?对于雇用这样的开发人员的人,我感到很难过。
话虽如此,这是提取XML的方法:
PdfDictionary catalog = reader.Catalog;
PdfName name = new PdfName("USCTbankruptcynotice");
PdfString USCTbankruptcynotice = catalog.GetAsString(key);
string xml = USCTbankruptcynotice.ToString();
这是从内存写入的。如果您需要进行小的更正,请更新我的答案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句