-1

我正在寻找一种方法来实际获取文件本身的内容,以文本格式转储。例如:我不想要一个字典对象,我不想要某种提取策略选项,我只想要 itextsharp 用来解析的同一个文本文档......整个事情作为一个字符串或字符串生成器......

我还没有找到一种方法来使用任何工具来做到这一点......我的问题是我正在尝试将动态 PDF 读入 C# 应用程序......我们都知道那些该死的动态 PDF 不能由 iTextSharp 解析(AcroForm 和 AcroFields 总是空的),所以我想如果我能得到整个文件的实际文本转储,我可以看到它的样子并为这个特定任务自己解析它(例如:make我知道我可以收到的每个文件的一个类,并根据我所看到的在那里制作地图)。

如果有人可以帮助我做到这一点,或者甚至更好地找到一种方法,在 C# 中提取 PDF 的 XML 源(有点像单击 LiveCycle 中的 XML 源选项卡),那将不胜感激。

谢谢!

马特

4

3 回答 3

2

如果您正在寻找原始文本格式的每个页面的实际操作符和命令,请尝试以下代码:

    var reader = new PdfReader("test.pdf");
    int intPageNum = reader.NumberOfPages;
    for (int i = 1; i <= intPageNum; i++)
    {
        byte[] contentBytes = reader.GetPageContent(i);
        File.WriteAllBytes("page-" + i + ".txt", contentBytes);
    }
    reader.Close();
于 2012-12-11T19:36:49.630 回答
1

我正在寻找一种方法来实际获取文件本身的内容,以文本格式转储。例如:我不想要一个字典对象,我不想要某种提取策略选项,我只想要 itextsharp 用来解析的同一个文本文档......整个事情作为一个字符串或字符串生成器......

不幸的是,itextsharp 用来解析的数据还不是文本。该数据中的运算符以某种文本格式给出,但实际字形可能以完全任意的 ad-hoc 编码给出。话虽如此,通常使用一些标准编码,因为它是使用中组件的最简单的解决方案。但是,您通常不能指望这一点。VahidN 的回答向您展示了如何访问该内容的起点;但是,他提取的页面内容数据很少包含对 包含在不同对象中的资源的引用。

我的问题是我正在尝试将动态 PDF 读入 C# 应用程序......而且我们都知道 iTextSharp 无法解析那些该死的动态 PDF(AcroForm 和 AcroFields 总是为空),

这听起来好像你手头实际上有一个完全不同的任务。动态表单及其内容不是页面内容的一部分,而是存储在单独的 XML Forms Architecture 流中。

iText in Action,第 2 版,在第 8 章中为您提供了一些有关如何访问 XFA 流数据的信息,请先查看示例XfaMovie.cs

您可能还想查看 iText XML Worker 项目,以便更轻松地操作 XFA 流。

于 2012-12-12T12:03:00.173 回答
1

如果您只想转储文本,请尝试以下操作:

        PdfReader reader = new PdfReader(pdfFileName);
        String text = "";
        nPages = reader.NumberOfPages;
        for (int i = 0; i < nPages; i++)
        {
            text += PdfTextExtractor.GetTextFromPage(reader, i + 1);
        }
于 2015-09-24T22:38:20.507 回答