public void paintPage(Graphics2D g2, PdfDecoder pdfDecoder, Display pages, PdfPageData pageData, int pageNumber,
DynamicVectorRenderer currentDisplay, int displayView, int displayRotation, int insetW, int insetH,
TextLines textLines, Border myBorder, PageOffsets currentOffset, ExternalHandlers externalHandlers){
AcroRenderer formRenderer=pdfDecoder.getFormRenderer();
Rectangle visibleRect=pdfDecoder.getVisibleRect();
int pageCount=pdfDecoder.getPageCount();
float scaling=pdfDecoder.getScaling();
pages.init(scaling, pageCount, displayRotation, pageNumber, currentDisplay, false, pageData, insetW, insetH);
//remember so we can put it back
final AffineTransform rawAf=g2.getTransform();
//include any user trnaslation
g2.translate(displayOffsets.getUserOffsetX(), displayOffsets.getUserOffsetY());
//track all changes
int start=pageNumber,end=pageNumber;
//control if we display forms on multiple pages
if(displayView!=Display.SINGLE_PAGE && displayView!=Display.PAGEFLOW){
start= pages.getStartPage();
end= pages.getEndPage();
if(start==0 || end==0 || lastEnd!=end || lastStart!=start)
lastFormPage=-1;
lastEnd=end;
lastStart=start;
}
if(lastFormPage!=pageNumber){
if (formRenderer != null){
formRenderer.displayComponentsOnscreen(start,end);
//switch off if forms for this page found
if(formRenderer.getCompData().getStartComponentCountForPage(pageNumber)!=-1)
lastFormPage=pageNumber; //ensure not called too early
}
}
//center if required
if(pdfDecoder.alignment==Display.DISPLAY_CENTERED){
double width=pdfDecoder.getBounds().getWidth();
if(displayView==Display.PAGEFLOW)
width=visibleRect.getWidth();
int pdfWidth=pdfDecoder.getPDFWidth();
if(displayView!=Display.SINGLE_PAGE)
pdfWidth=(int) pages.getPageSize(displayView).getWidth();
//we indent it here so selected page is in middle of panel and now make rest of co-ords relative which is all much easier....
if(displayView==Display.PAGEFLOW){
indent=((visibleRect.width- pages.getWidthForPage(pageNumber))/2)-insetW-pdfDecoder.getBounds().x;
} else if (displayView==Display.FACING) {
int page = pageNumber;
if (pages.getSeparateCover() && (page & 1)==1)
page--;
else if (!pages.getSeparateCover() && (page & 1)==0)
page--;
//Get widths of pages
int firstW,secondW;
if ((displayRotation + pageData.getRotation(page))%180==90)
firstW = pageData.getCropBoxHeight(page);
else
firstW = pageData.getCropBoxWidth(page);
if (page+1 > pageCount) {
secondW = firstW;
} else {
if ((displayRotation + pageData.getRotation(page + 1))%180==90)
secondW = pageData.getCropBoxHeight(page + 1);
else
secondW = pageData.getCropBoxWidth(page + 1);
}
//set pageGap
int pageGap = 0;
if (!pages.getTurnoverOn() || pageData.hasMultipleSizes() || pageCount==2)
pageGap = currentOffset.pageGap/2;
//set indent
indent = (((width - ((firstW + secondW) * scaling)) / 2) - pageGap - insetW);
} else
indent=((width-pdfWidth)/2);
if(displayView==Display.SINGLE_PAGE)
lastIndent=(int)indent;
else if((displayView==Display.CONTINUOUS || displayView==Display.PAGEFLOW) && lastIndent!=-1){
indent=lastIndent;
lastIndent = -1;
}else
lastIndent=-1;
g2.translate(indent,0);
if(formRenderer!=null && currentOffset !=null){ //if all forms flattened, we can get a null value for currentOffset so avoid this case
if(displayView==Display.PAGEFLOW)
indent= indent-((pageNumber-1)*(PageOffsets.getPageFlowPageWidth((int)(pageData.getCropBoxWidth(pageNumber)*scaling),scaling)));
formRenderer.getCompData().setPageValues(scaling,displayRotation,(int)indent,displayOffsets.getUserOffsetX(), displayOffsets.getUserOffsetY(),displayView,currentOffset.widestPageNR, currentOffset.widestPageR);
formRenderer.getCompData().resetScaledLocation(scaling,displayRotation,(int)indent);//indent here does nothing.
}
}else if(formRenderer!=null && currentOffset !=null){
lastIndent=-1;
formRenderer.getCompData().setPageValues(scaling,displayRotation,(int)indent,displayOffsets.getUserOffsetX(), displayOffsets.getUserOffsetY(),displayView, currentOffset.widestPageNR, currentOffset.widestPageR);
formRenderer.getCompData().resetScaledLocation(scaling,displayRotation,(int)indent);
}
pages.initRenderer(textLines.areas, g2, myBorder, (int) indent);
pages.drawPage(viewScaling, pdfDecoder.displayScaling, pageUsedForTransform);