itextsharp PDF到文本转储

时间:2012-12-11 15:50:47

标签: itextsharp

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

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

如果有人可以帮助我做到这一点,甚至更好,在C#中找到一种方法来提取PDF的XML源(有点像点击LiveCycle中的XML Source选项卡),我们将不胜感激。< / p>

谢谢!

马特

3 个答案:

答案 0 :(得分: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();

答案 1 :(得分:1)

  

我正在寻找一种实际获取文件内容的方法   本身,以其文本格式,倾销。例如:我不想要字典   对象,我不想要某种提取策略选项,我只是   想要使用itextsharp用于解析的相同文本文档......整个   作为字符串或字符串构建者...

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

  

我的问题是我正在尝试将动态PDF读入C#   应用......我们都知道那些动态的PDF不可能   由iTextSharp解析(AcroForm和AcroFields总是空着),

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

iText in Action, 2nd edition,在第8章中为您提供了有关如何访问XFA流数据的一些信息,以便第一眼看到示例XfaMovie.cs

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

答案 2 :(得分:1)

如果你只想转储文本,试试这个:

        PdfReader reader = new PdfReader(pdfFileName);
        String text = "";
        nPages = reader.NumberOfPages;
        for (int i = 0; i < nPages; i++)
        {
            text += PdfTextExtractor.GetTextFromPage(reader, i + 1);
        }