使用 iTextSharp 7 在 PDF 中搜索关键字
Searching for a keyword in PDF using iTextSharp 7
我正在尝试使用 C# 和 iTextSharp 在 PDF 文件中搜索关键字。
所以我遇到了这段代码:
public List<int> ReadPdfFile(string fileName, String searthText)
{
List<int> pages = new List<int>();
if (File.Exists(fileName))
{
PdfReader pdfReader = new PdfReader(fileName);
for (int page = 1; page <= pdfReader.NumberOfPages; page++)
{
ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();
string currentPageText = PdfTextExtractor.GetTextFromPage(pdfReader, page, strategy);
if (currentPageText.Contains(searthText))
{
pages.Add(page);
}
}
pdfReader.Close();
}
return pages;
}
但是它说 PdfReader 不包含 NumberOfPages 的定义。有没有其他方法可以获取 PDF 文件的页数?
你可以改变这个
pdfReader.NumberOfPages
来自
getNumberOfPdfPages(fileName)
和方法(reference):
public int getNumberOfPdfPages(string fileName)
{
using (StreamReader sr = new StreamReader(File.OpenRead(fileName)))
{
Regex regex = new Regex(@"/Type\s*/Page[^s]");
MatchCollection matches = regex.Matches(sr.ReadToEnd());
return matches.Count;
}
}
但是无法识别 NumberOfPages 似乎很奇怪...您确定 using
吗?
您找到的这段代码适用于 iText 5。5.x。 iText 7 从根本上改变了 API,因此您的 NumberOfPages
问题并不是您必须处理的唯一问题。
尽管如此:要获取 iText 7 中的页数,您现在使用 PdfDocument
方法 GetNumberOfPages
而不是以前的 PdfReader
属性 NumberOfPages
.
更一般地说,将您的方法移植到 iText 7 可能如下所示:
public List<int> ReadPdfFile(string fileName, String searthText)
{
List<int> pages = new List<int>();
if (File.Exists(fileName))
{
using (PdfReader pdfReader = new PdfReader(fileName))
using (PdfDocument pdfDocument = new PdfDocument(pdfReader))
{
for (int page = 1; page <= pdfDocument.GetNumberOfPages(); page++)
{
ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();
string currentPageText = PdfTextExtractor.GetTextFromPage(pdfDocument.GetPage(page), strategy);
if (currentPageText.Contains(searthText))
{
pages.Add(page);
}
}
}
}
return pages;
}
我正在尝试使用 C# 和 iTextSharp 在 PDF 文件中搜索关键字。
所以我遇到了这段代码:
public List<int> ReadPdfFile(string fileName, String searthText)
{
List<int> pages = new List<int>();
if (File.Exists(fileName))
{
PdfReader pdfReader = new PdfReader(fileName);
for (int page = 1; page <= pdfReader.NumberOfPages; page++)
{
ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();
string currentPageText = PdfTextExtractor.GetTextFromPage(pdfReader, page, strategy);
if (currentPageText.Contains(searthText))
{
pages.Add(page);
}
}
pdfReader.Close();
}
return pages;
}
但是它说 PdfReader 不包含 NumberOfPages 的定义。有没有其他方法可以获取 PDF 文件的页数?
你可以改变这个
pdfReader.NumberOfPages
来自
getNumberOfPdfPages(fileName)
和方法(reference):
public int getNumberOfPdfPages(string fileName)
{
using (StreamReader sr = new StreamReader(File.OpenRead(fileName)))
{
Regex regex = new Regex(@"/Type\s*/Page[^s]");
MatchCollection matches = regex.Matches(sr.ReadToEnd());
return matches.Count;
}
}
但是无法识别 NumberOfPages 似乎很奇怪...您确定 using
吗?
您找到的这段代码适用于 iText 5。5.x。 iText 7 从根本上改变了 API,因此您的 NumberOfPages
问题并不是您必须处理的唯一问题。
尽管如此:要获取 iText 7 中的页数,您现在使用 PdfDocument
方法 GetNumberOfPages
而不是以前的 PdfReader
属性 NumberOfPages
.
更一般地说,将您的方法移植到 iText 7 可能如下所示:
public List<int> ReadPdfFile(string fileName, String searthText)
{
List<int> pages = new List<int>();
if (File.Exists(fileName))
{
using (PdfReader pdfReader = new PdfReader(fileName))
using (PdfDocument pdfDocument = new PdfDocument(pdfReader))
{
for (int page = 1; page <= pdfDocument.GetNumberOfPages(); page++)
{
ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();
string currentPageText = PdfTextExtractor.GetTextFromPage(pdfDocument.GetPage(page), strategy);
if (currentPageText.Contains(searthText))
{
pages.Add(page);
}
}
}
}
return pages;
}