you can use PDFViewCtrl.findText() for searching, which will also highlight the found text for you. Note that it searches in an incremental manner. If you want to find all the instances in the background and then provide user with a list of found instances, you are better off doing it yourself using TextSearch class.
Roughly speaking, you can use TextSearch to find all the instances within a PDF file. For each found instances, you can record a Highlights instance (
http://www.pdftron.com/pdfnet/samplecode/TextSearchTest.java). If you want PDFViewCtrl to select the text corresponding to a Highlight instance, you can use PDFViewCtrl.selectByHighlights(). This class will simply set certain information within PDFViewCtrl and it will not automatically highlight anything on screen. If you want to highlight the text on screen, you can do something as follows:
private void populateSelectionResult() {
Path sel_path = new Path();
float sx = PDFViewCtrl.getScrollX();
float sy = PDFViewCtrl.getScrollY();
int sel_pg_begin = PDFViewCtrl.getSelectionBeginPage();
int sel_pg_end = PDFViewCtrl.getSelectionEndPage();
//loop through the pages that have text selection, and construct 'mSelPath' for highlighting.
for ( int pg = sel_pg_begin; pg <= sel_pg_end; ++pg ) {
PDFViewCtrl.Selection sel = PDFViewCtrl.getSelection(pg); //each Selection may have multiple quads
double[] quads = sel.getQuads();
double[] pts;
int sz = quads.length / 8; //each quad has eight numbers (x0, y0), ... (x3, y3)
if ( sz == 0 ) {
continue;
}
int k = 0;
float x, y;
for (int i = 0; i < sz; ++i, k+=8) {
pts = PDFViewCtrl.convPagePtToClientPt(quads[k], quads[k + 1], pg);
x = (float) pts[0] + sx;
y = (float) pts[1] + sy;
sel_path.moveTo(x, y);
pts = PDFViewCtrl.convPagePtToClientPt(quads[k + 2], quads[k + 3], pg);
x = (float) pts[0] + sx;
y = (float) pts[1] + sy;
sel_path.lineTo(x, y);
pts = PDFViewCtrl.convPagePtToClientPt(quads[k + 4], quads[k + 5], pg);
x = (float) pts[0] + sx;
y = (float) pts[1] + sy;
sel_path.lineTo(x, y);
pts = PDFViewCtrl.convPagePtToClientPt(quads[k + 6], quads[k + 7], pg);
x = (float) pts[0] + sx;
y = (float) pts[1] + sy;
sel_path.lineTo(x, y);
sel_path.close();
}
}
}
Then you can draw 'sel_path' in order to highlight. We used similar code in Tools.jar.