using ComPDFKit.Import;
using ComPDFKit.PDFAnnotation;
using ComPDFKit.PDFDocument;
using ComPDFKit.PDFPage;
using System;
using System.Collections.Generic;
using System.IO;
using System.Windows;
namespace TextSearchTest
{
internal class TextSearch
{
private static string parentPath =
Path.GetDirectoryName(Path.GetDirectoryName(Path.GetDirectoryName(System.IO.Directory.GetCurrentDirectory())));
private static string outputPath = parentPath + "\\Output\\CS";
static void Main(string[] args)
{
#region Perparation work
Console.WriteLine("Running text search test sample…\r\n");
if (!Directory.Exists(outputPath))
{
Directory.CreateDirectory(outputPath);
}
SDKLicenseHelper.LicenseVerify();
#endregion
#region Sample 1: Search text
CPDFDocument document = CPDFDocument.InitWithFilePath("Text.pdf");
SearchText(document);
document.Release();
Console.WriteLine("--------------------");
#endregion
Console.WriteLine("Done");
Console.WriteLine("--------------------");
Console.ReadLine();
}
///
/// Search for keywords in the current page and record the search results.
///
static private void SearchForPage(CPDFPage page, string searchKeywords, C_Search_Options option, ref List rects, ref List strings)
{
rects = new List();
strings = new List();
int findIndex = 0;
CPDFTextPage textPage = page.GetTextPage();
CPDFTextSearcher searcher = new CPDFTextSearcher();
if (searcher.FindStart(textPage, searchKeywords, option, 0))
{
CRect textRect = new CRect();
string textContent = "";
while (searcher.FindNext(page, textPage, ref textRect, ref textContent, ref findIndex))
{
strings.Add(textContent);
rects.Add(new CRect(textRect.left, textRect.top, textRect.width(), textRect.height()));
}
}
}
///
/// Highlight the first result
///
static private bool HighlightTheFirstResult(CPDFPage page, CRect rect)
{
List cRectList = new List();
cRectList.Add(new CRect((float)rect.left, (float)rect.bottom, (float)rect.right, (float)rect.top));
CPDFHighlightAnnotation annotation = page.CreateAnnot(C_ANNOTATION_TYPE.C_ANNOTATION_HIGHLIGHT) as CPDFHighlightAnnotation;
byte[] color = { 0, 255, 0 };
annotation.SetColor(color);
annotation.SetTransparency(120);
annotation.SetQuardRects(cRectList);
annotation.UpdateAp();
return true;
}
///
/// Search PDF keywords on the first page of the article,
/// after the search is completed,
/// highlight the first searched keyword and save it
///
/// PDF with text
static private bool SearchText(CPDFDocument document)
{
CPDFPage page = document.PageAtIndex(0);
//rects: The collection of locales where keywords are located.
List rects = new List();
//strings: The full text of the keyword's area
List strings = new List();
//Search for single page
SearchForPage(page, "PDF", C_Search_Options.Search_Case_Insensitive, ref rects, ref strings);
Console.WriteLine("The pdf have {0} results", rects.Count);
Console.WriteLine("Search finished, now highlight the first result. ");
//Highlight the first result
HighlightTheFirstResult(page, rects[0]);
string path = outputPath + "\\HighlightFirstTest.pdf";
if (!document.WriteToFilePath(path))
{
return false;
}
Console.WriteLine("Browse the changed file in " + path);
return true;
}
}
}