我正在寻找一种方法来实际获取文件本身的内容,以其文本格式转储。例如:我不想要一个字典对象,我不想要某种提取策略选项,我只想要一个itextsharp用来解析的文本文档...整个字符串或字符串构建器...
我还没有找到使用任何工具来做到这一点的方法......我的问题是我正在尝试将动态PDF读入C#应用程序......我们都知道这些动态PDF文件无法解析iTextSharp(AcroForm和AcroFields总是空的),所以我想如果我可以得到整个文件的实际文本转储,我可以看到它的样子并自己解析它为这个特定的任务(例如:为我知道我可以收到的每个文件制作一个课程,然后根据我看到的内容制作一个地图。
如果有人可以帮助我做到这一点,甚至更好,在C#中找到一种方法来提取PDF的XML源(有点像点击LiveCycle中的XML Source选项卡),我们将不胜感激。< / p>
谢谢!
马特
答案 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);
}