实际上我的要求是使用 pdf 内容搜索 pdf 文件。
我有一个包含很多 PDF 文件的文件夹。我想开发一个 ASP.net 应用程序,使用户能够使用他们在文本框中提供的内容来搜索 pdf。
如何执行此任务?提前谢谢你。
您的任务可能会分为以下子任务:
要构建索引,您可以使用一些集成的解决方案,如 Apache Lucene 或Lucene.Net,或者将每个 PDF 转换为文本并自己从文本构建索引。
您可以尝试索引器部分的Docotic.Pdf 库(免责声明:我为 Bit Miracle 工作)。
该库可用于从 PDF 中提取文本。它可以提取带或不带格式的文本。提取的文本可用于创建索引。
该库还可以从 PDF中检索带有边界矩形的单词集合。如果您需要知道文件中文本的确切位置,这可能很有用。
如果您不想建立索引,那么您仍然可以使用 Docotic.Pdf 使用如下代码执行搜索:
PdfDocument doc = new PdfDocument("file.pdf");
string textToSearch = "some text";
for (int i = 0; i < doc.Pages.Count; i++)
{
string pageText = doc.Pages[i].GetText();
int count = 0;
int lastStartIndex = pageText.IndexOf(textToSearch, 0, StringComparison.CurrentCultureIgnoreCase);
while (lastStartIndex != -1)
{
count++;
lastStartIndex = pageText.IndexOf(textToSearch, lastStartIndex + 1, StringComparison.CurrentCultureIgnoreCase);
}
if (count != 0)
Console.WriteLine("Page {0}: '{1}' found {2} times", i, textToSearch, count);
}
您可以为此使用任何库,尝试iTextSharp它是免费的。
您可以像这样阅读 pdf 文本:
public string ReadPdfFile(string fileName)
{
StringBuilder text = new StringBuilder();
if (File.Exists(fileName))
{
PdfReader pdfReader = new PdfReader(fileName);
for (int page = 1; page <= pdfReader.NumberOfPages; page++)
{
ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();
string currentText = PdfTextExtractor.GetTextFromPage(pdfReader, page, strategy);
currentText = Encoding.UTF8.GetString(ASCIIEncoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(currentText)));
text.Append(currentText);
}
pdfReader.Close();
}
return text.ToString();
}
试试Zoom Search它有一个用于提取 pdf 文档文本的插件(您可以对其进行搜索),并且可以轻松自定义您的搜索。您将需要标准版,它不是免费的(约 49 美元)。Zoom 搜索会为您进行搜索开箱即用,您不需要做任何复杂的事情,例如,如果您更喜欢从 pdf 中提取文本,然后在数据库中对其进行索引以进行搜索或尝试使用需要您执行的 Lucene 搜索引擎/和定制(一些工作)。Zoom 与 ASP.NET 配合得很好,您只需要使用 GUI 来自定义您的搜索(不需要大量编码)。