我目前使用iTextSharp读取一些PDF文件并使用我收到的字符串解析它们。我遇到了一些PDF文件的奇怪行为。当获取例如4页PDF的字符串时,字符串按以下顺序填充页面:
1 2 1 3 1 4
我的阅读文件代码如下:
using (PdfReader reader = new PdfReader(fileStream))
{
StringBuilder sb = new StringBuilder();
ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();
for (int page = 0; page < reader.NumberOfPages; page++)
{
string text = PdfTextExtractor.GetTextFromPage(reader, page + 1, strategy);
if (!string.IsNullOrWhiteSpace(text))
sb.Append(Encoding.UTF8.GetString(Encoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(text))));
}
Debug.WriteLine(sb.ToString());
}
以下是指向发生此行为的文件的链接:
希望你们能帮助我!
答案 0 :(得分:0)
感谢克里斯哈斯,我发现出了问题。在线发现如何使用iTextSharp.Pdf的样本对我的实现不正确或不正确。
需要为您尝试阅读的每个页面实例化SimpleTextExtractionStrategy
。不执行此操作会将结果字符串中的每个上一页相乘。
还可以从以下位置更改StringBuilder的追加行:
sb.Append(Encoding.UTF8.GetString(Encoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(text))));
到
sb.Append(text);
因此,以下代码给出了正确的结果:
using (PdfReader reader = new PdfReader(fileStream))
{
StringBuilder sb = new StringBuilder();
for (int page = 0; page < reader.NumberOfPages; page++)
{
string text = PdfTextExtractor.GetTextFromPage(reader, page + 1, new SimpleTextExtractionStrategy());
if (!string.IsNullOrWhiteSpace(text))
sb.Append(text);
}
Debug.WriteLine(sb.ToString());
}