好的,我尝试使用iTextSharp从PDF文件中提取文本......这就是我想要的。但是,当我提取文本时,它会给我垃圾而不是文本。
这是我使用的代码......
List<String> pdfText = new List<string>();
for (int page = 1; page <= reader.NumberOfPages; page++)
{
ITextExtractionStrategy its = new iTextSharp.text.pdf.parser.LocationTextExtractionStrategy();
String strPage = PdfTextExtractor.GetTextFromPage(reader, page, its);
strPage = Encoding.UTF8.GetString(ASCIIEncoding.Convert(Encoding.Default,
Encoding.UTF8, Encoding.Default.GetBytes(strPage)));
pdfText.Add(strPage);
}
然后我将该数据保存到文本文件中,但是我得到的文本看起来像二进制数据......不可读的文本,而不是可读文本。我发布了一张我所看到的图像,但它不会让我失望。对不起。
我试过没有编码尝试,它没有更好的工作......仍然是二进制数据(在记事本中查看),虽然我不确定它是否相同通过编码尝试产生的。
知道发生了什么以及如何解决它?
答案 0 :(得分:0)
请在Adobe Reader中打开文档,然后尝试复制/粘贴部分文本。
如果您使用第一页执行此操作,则会获得:
以下政策(L30304)已由Alpha II存档。许多政策都是更大的政策的一部分 管辖权,比政策所示。该政策涵盖以下状态:
•印第安纳
•MICHIGAN
但是,如果您使用第二页执行此操作,您将获得:
换句话说:从Adobe Reader复制/粘贴会给你带来垃圾。
如果从Adobe Reader复制/粘贴为您提供垃圾,任何文本提取工具都会给您带来垃圾。您需要对文档进行OCR以解决此问题。
关于评论中的其他问题:如果PDf采用自定义编码方法,Adobe如何正确显示它,除非PDF文件包含处理它所需的信息?
这个问题在14分钟的电影中被回答:https://www.youtube.com/watch?v=wxGEEv7ibHE
答案 1 :(得分:0)
试试这段代码:
List<String> pdfText = new List<string>();
for (int page = 1; page <= reader.NumberOfPages; page++)
{
ITextExtractionStrategy its = new iTextSharp.text.pdf.parser.LocationTextExtractionStrategy();
PdfTextExtractor.GetTextFromPage(reader, page, its);
strPage = its.GetResultantText();
pdfText.Add(strPage);
}
答案 2 :(得分:0)
试试这段代码,为我工作
using (PdfReader reader = new PdfReader(path))
{
StringBuilder text = new StringBuilder();
for (int i = 1; i <= reader.NumberOfPages; i++)
{
text.Append(PdfTextExtractor.GetTextFromPage(reader, i));
}
return text.ToString();
}