使用 iTextSharp 阅读 PDF 文档会创建带有重复第一页的字符串
Reading PDF document with iTextSharp creates string with repeating first page
我目前使用 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());
}
这是一个 link 发生此行为的文件:
希望大家帮帮我!
多亏了 Chris Haas,我才发现出了问题。在网上找到的关于如何使用 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());
}
我目前使用 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());
}
这是一个 link 发生此行为的文件:
希望大家帮帮我!
多亏了 Chris Haas,我才发现出了问题。在网上找到的关于如何使用 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());
}