我需要在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来做到这一点?
答案 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));
}