在PDF文件中搜索以查找字符串

时间:2015-07-20 06:33:44

标签: c# .net pdf itextsharp itext

我需要在pdf文件中搜索才能找到一个字符串。我知道itextsharp有这个功能,我可以使用这个代码

public bool SearchPdfFile(string fileName, String searchText)
{
    /* technically speaking this should not happen, since "you" are calling it
       therefore this should be handled critically
        if (!File.Exists(fileName)) return false; //original workflow
    */
    if (!File.Exists(fileName))
        throw new FileNotFoundException("File not found", fileName);

    using (PdfReader reader = new PdfReader(fileName))
    {
        var strategy = new SimpleTextExtractionStrategy();

        for (int page = 1; page <= pdfReader.NumberOfPages; page++)
        {
            var currentPageText = PdfTextExtractor.GetTextFromPage(pdfReader, page, strategy);
            if (currentPageText.Contains(searchText))
                return true;
        }
    }

    return false;
}

但是我使用LGPL / MPL许可证(版本3.0 / 4.0)下的itext,如果我根据AGPL自由创建自己的软件,则新版本5.0只是免费的。在这个版本的itext中,SimpleTextExtractionStrategy类是未定义的。有没有替代方法可以使用旧版本的itext来做到这一点?

1 个答案:

答案 0 :(得分:2)

PDFClown。 一个愚蠢的名字,但它是一个非常详细和灵活的PDF库。我之前用过它。 LGPL是免费的。 http://pdfclown.org/about/#TheLicense

从PDFClown网站修改的示例(他们的示例是java)

$('#conrollerId').on('change', loadEvents);

function loadEvents() {
    $('#calendar').fullCalendar('removeEvents');
    $('#calendar').fullCalendar('refetchEvents');

}

针对C#

进行了更新
File file = new File(myFilePath);

// Define the text pattern to look for!
String textRegEx = "rabbit";
Pattern pattern = Pattern.compile(textRegEx, Pattern.CASE_INSENSITIVE);

// Instantiate the extractor!
TextExtractor textExtractor = new TextExtractor(true, true);

for(final Page page : file.getDocument().getPages())
{
  // Extract the page text!
  Map<Rectangle2D,List<ITextString>> textStrings = textExtractor.extract(page);

  // Find the text pattern matches!
  final Matcher matcher = pattern.matcher(TextExtractor.toString(textStrings));
}