gpt4 book ai didi

c# - 使用 iTextSharp (C#) 从 PDF 中提取嵌入式 XML

转载 作者:太空狗 更新时间:2023-10-30 01:34:57 24 4
gpt4 key购买 nike

我需要提取嵌入在 Bankruptcy court files 中的 XML 数据用C#。在 PDF 阅读器中,该文件看起来像一份典型的法庭文件。在记事本中,XML 隐藏在文本中。我试过用 this 提取文本和 another code snippet使用 SimpleTextExtractionStrategy。第一个结果生成的文件没有来自 PDF 的可识别文本,第二个结果输出符号。我还尝试将其作为 AcroField 和 Xfaform 进行访问。它似乎不是基于 Watch 窗口的那些。

逐步执行 Visual Studio 中的代码,XML 显示在 PDFReader >> Catalog >> Keys >> Raw >> Non-Public Members >> Watch 窗口中的字典下。我不知道如何去做。由于它与 Watch 中的其他 PDFName 一起列出,我认为我可以通过 PDFReader.Catalog.GetAsDict 访问它,但它不会显示为 PDFName。这些文件的提供者有一个似乎只是读取文本的 java 应用程序。不确定我是否需要使用不同的提取策略,或直接访问包含 XML 的目录项。我从来没有以编程方式处理 PDF 文件或 iTextSharp,所以我很挣扎。任何代码建议?

最佳答案

如果您可以共享带有嵌入式 XML 的 PDF,将会有所帮助。当我第一次阅读您的问题时,我假设 XML 将作为文档级附件(存储在 EmbeddedFiles 中)或作为附件注释(存储在添加到页面字典的 Annot 中)添加。

阅读 uscourts.gov 上写的内容,看起来 XML 实际上是一个 XMP 流。这意味着您可以在目录的元数据条目中找到它(或者可能在页面字典中)。

如果您无法共享文件,您将不得不自己动手。您可以通过下载 iText RUPS 来完成此操作.它是一款免费工具,可以深入 PDF。

浏览树结构并查找Metadata,查找EmbeddedFiles,查找Annots。如果您不告诉我们 XML 是如何嵌入的,那​​么没有人能够帮助您。

例如,请参阅我对以下问题的回答:How to delete attachment of PDF using itext(看我如何使用 RUPS 查看 Catalog > Names > EmbeddedFiles)。

额外说明:到目前为止,您尝试的代码是关于从页面中提取文本,不是关于提取嵌入在 PDF 中的 XML 文件。

更新:

现在您已经共享了一个文件,我已经使用 RUPS 找到了 XML 文件。看看下面的屏幕截图:

Screen shot

你看到这里发生了什么吗?有人添加了一个名为 /USCTbankruptcynotice 的自定义条目,并将 String 作为值直接添加到目录中。这是错误的:将文件存储在字符串中是一个糟糕的主意。为什么开发人员不将该文件存储为流?我为雇用这样的开发人员的人感到难过。

话虽如此,这就是您提取 XML 的方式:

PdfDictionary catalog = reader.Catalog;
PdfName name = new PdfName("USCTbankruptcynotice");
PdfString USCTbankruptcynotice = catalog.GetAsString(key);
string xml = USCTbankruptcynotice.ToString();

这是凭内存写的。如果您需要进行小的更正,请更新我的答案。

关于c# - 使用 iTextSharp (C#) 从 PDF 中提取嵌入式 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28304006/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com