Hi, my current code
final Page currentPage = doc.GetPage(pageNumber);
currentPage.ObjsStart();
//Remove possible previous highlights.
for (int i = 0; i < currentPage.GetAnnotCount(); i++) {
final Page.Annotation pageAnnotation = currentPage.GetAnnot(i);
pageAnnotation.RemoveFromPage();
}
if (pageHolder.searchedQuery != null) {
final Page.Finder mFinder = currentPage.FindOpen(pageHolder.searchedQuery, false, false);
if (mFinder != null) {
int finds = mFinder.GetCount();
Log.debug("PDF current page " + pageNumber + " found " + finds + " searchString=" + pageHolder.searchedQuery);
for (int j = 0; j < finds; j++) {
int foundIndex = mFinder.GetFirstChar(j);
int phraseEndIndex = foundIndex + pageHolder.searchedQuery.length();
// Log.debug("PDF phrase " + currentPage.ObjsGetString(foundIndex, phraseEndIndex));
currentPage.AddAnnotMarkup(foundIndex, phraseEndIndex, 0);
}
mFinder.Close();
}
}
currentPage.Close();
Now the problems, I cannot use PDFView.GetPage() because that is null very often, so I have to use the page from the Document, but then I cannot call PDFView.vRenderAsync() because it accepts only PDFVPage and not Page.
Also let me express my endless pleasure to work with your code. The one who wrote it never ever heard about how java code should be written nor about any conventions. Using underscores, camel case with methods starting uppercase and for example this onDraw code from your view class, it is just pure excitement to try to debug that code
if( m_pages == null ) return;
//long rec_time = System.currentTimeMillis();
int left = m_scroller.getCurrX();
int top = m_scroller.getCurrY();
int left1 = left;
int top1 = top;
if( left1 > m_docw - m_w ) left1 = m_docw - m_w;
if( left1 < 0 ) left1 = 0;
if( top1 > m_doch - m_h ) top1 = m_doch - m_h;
if( top1 < 0 ) top1 = 0;
if( left1 != left )
{
setFinalX(left1);
left = left1;
}
if( top1 != top )
{
m_scroller.setFinalY(top1);
top = top1;
}
vFlushRange();
int cur = m_prange_start;
int end = m_prange_end;
int sel_rect1[] = null;
int sel_rect2[] = null;
if( m_drawbmp )
{
if( Global.dark_mode )
{
m_bmp.eraseColor(m_back);
Canvas bcan = new Canvas(m_bmp);
while( cur < end )
{
PDFVPage vpage = m_pages[cur];
if( m_status != STA_ZOOM ) m_thread.start_render(vpage);
vpage.Draw(bcan, left, top);
if( sel_rect1 == null || sel_rect2 == null )
{
sel_rect1 = vpage.GetSelRect1(left, top);
sel_rect2 = vpage.GetSelRect2(left, top);
}
if( m_finder.find_get_page() == cur )
m_finder.find_draw(bcan, vpage, left, top);
cur++;
}
m_draw_bmp.Create(m_bmp);
m_draw_bmp.Invert();
m_draw_bmp.Free(m_bmp);
//Log.i("time_d1", String.valueOf(System.currentTimeMillis() - rec_time));
canvas.drawBitmap(m_bmp, 0, 0, null);
//Log.i("time_d2", String.valueOf(System.currentTimeMillis() - rec_time));
}
else
{
canvas.drawColor(m_back);
while( cur < end )
{
PDFVPage vpage = m_pages[cur];
if( m_status != STA_ZOOM ) m_thread.start_render(vpage);
if( sel_rect1 == null || sel_rect2 == null )
{
sel_rect1 = vpage.GetSelRect1(left, top);
sel_rect2 = vpage.GetSelRect2(left, top);
}
vpage.Draw(canvas, left, top);
if( m_finder.find_get_page() == cur )
m_finder.find_draw(canvas, vpage, left, top);
cur++;
}
}
}
else
{
m_bmp.eraseColor(m_back);
//Log.i("time_d0", String.valueOf(System.currentTimeMillis() - rec_time));
m_draw_bmp.Create(m_bmp);
while( cur < end )
{
PDFVPage vpage = m_pages[cur];
m_thread.start_render(vpage);
if( sel_rect1 == null || sel_rect2 == null )
{
sel_rect1 = vpage.GetSelRect1(left, top);
sel_rect2 = vpage.GetSelRect2(left, top);
}
vpage.Draw(m_draw_bmp, left, top);
if( m_finder.find_get_page() == cur ) {
m_finder.find_draw(m_draw_bmp, vpage, left, top);
}
cur++;
}
if( Global.dark_mode ) m_draw_bmp.Invert();
m_draw_bmp.Free(m_bmp);
//Log.i("time_d1", String.valueOf(System.currentTimeMillis() - rec_time));
canvas.drawBitmap(m_bmp, 0, 0, null);
//Log.i("time_d2", String.valueOf(System.currentTimeMillis() - rec_time));
}
if( m_listener != null )
{
cur = m_prange_start;
end = m_prange_end;
while( cur < end )
{
m_listener.OnPDFPageDisplayed(canvas, m_pages[cur] );
cur++;
}
if( sel_rect1 != null && sel_rect2 != null )
m_listener.OnPDFSelecting(canvas, sel_rect1, sel_rect2);
}
where every variable name is self explanatory right ? Not mentioning everything is private and extending this is almost impossible. Every single time I have to work with your library is like a short visit to programming/reverse engineering hell.