我正在使用ItextSharp使用此代码从PDF文档中提取文本:
public static bool does_document_text_have_keyword(string keyword,
string pdf_src, Report report_object) // TEST
{
try
{
PdfReader pdfReader = new PdfReader(pdf_src);
string currentText;
int count = pdfReader.NumberOfPages;
for (int page = 1; page <= count; page++)
{
ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();
currentText = PdfTextExtractor.GetTextFromPage
(pdfReader, page, strategy);
currentText = Encoding.UTF8.GetString
(ASCIIEncoding.Convert
(Encoding.Default,
Encoding.UTF8,
Encoding.Default.GetBytes(currentText)));
report_object.log(currentText); // TEST
if (currentText.IndexOf
(keyword, StringComparison.OrdinalIgnoreCase) != -1) return true;
}
pdfReader.Close();
return false;
}
catch
{
return false;
}
}
,但是问题是,当我提取文本时,文本没有白色空间,好像白色空间已被一个空字符串替换。然而,在PDF文档中,其中有白色空间。有人知道这里发生了什么吗?
我相信您的问题是SimpleTextextractionstrategy。摘自http://api.itextpdf.com/itext/com/com/itextpdf/text/pdf/parser/simpletextextratetratetrategy.html
的API文档如果PDF以非顶部到底的方式呈现文本,这将导致文本并不是对PDF中显示方式的真实表示。该渲染器还使用基于字体指标的简单策略来确定是否应插入空白空间。
尝试使用LocationTextExtrateTrateGy。文档指出:
文本提取渲染器,可以跟踪文本在页面上的相对位置,结果文本将与大多数PDF文件在屏幕上具有的物理布局相对一致。