P
PseudoIntellectual
I'm trying to print a job of around 20 MB. I'm breaking to 300 jobs
with 13 around 12-13 pages per job.(It's my customer's requirement). It
prints first 150 jobs fine after that I see a dramatic slow down. I'm
posting the print function below. Please suggest how I can improve this
and increase the speed
Thanks alot
PI
Code:
public int print(Graphics g, PageFormat pf, int PageIndex) throws
PrinterException
{
if (PageIndex != rememberedPageIndex) { // this can be called multiple
times for one page
rememberedPageIndex = PageIndex;
try {
getOnePage gop = new getOnePage(FileName, currPage);
currPage++;
OnePage = gop.PageString;
if (OnePage == "") {
return Printable.NO_SUCH_PAGE;
}
if(OnePage.charAt(0)=='\u001B'){
return Printable.NO_SUCH_PAGE;
}
}
catch ( Exception e ) {
System.out.println("Unable to get page: " + e);
}
BeginDisp = 0;
int f = 20;
int done = 0;
double iw = pf.getImageableWidth();
while (done == 0) {
g.setFont(new Font("Monospaced", Font.BOLD, f));
FontMetrics fm = g.getFontMetrics();
if (fm.stringWidth(s) < iw) {
fnt = new Font("monospaced",Font.BOLD, f);
done = 1;
break;
}
f--;
if (f < 2){ // should not happen
done = 1;
}
}
LineHeight = (int) pf.getImageableHeight();
LineHeight = LineHeight / 66;
} else {
BeginDisp = 0;
}
g.setColor(Color.black);
g.setFont(fnt);
FontMetrics fm = g.getFontMetrics();
int centerAmtX = (int) ((pf.getImageableWidth() - fm.stringWidth(s)) /
2);
int x = (int) pf.getImageableX();
int y = (int) pf.getImageableY();
int pageBreak = (int) (y + pf.getImageableHeight());
int LineCount = 0;
while ((y + LineHeight) < pageBreak) {
LineCount++;
y += LineHeight;
if (OnePage.indexOf("\r",BeginDisp) < 0) { // last line does not have
a
cr/lf
String LastLine = OnePage.substring(BeginDisp,OnePage.length() - 1);
//
drop last character: page break
g.drawString(LastLine, (int) x + centerAmtX, (int) y);
break;
}
String line =
OnePage.substring(BeginDisp,OnePage.indexOf("\r",BeginDisp));
g.drawString(line, (int) x + centerAmtX, (int) y);
BeginDisp = OnePage.indexOf("\r",BeginDisp) + 2;
if (BeginDisp >= OnePage.length()) {
break;
}
LineHeight = " + LineHeight + " pageBreak = " + pageBreak);
}
return Printable.PAGE_EXISTS;
with 13 around 12-13 pages per job.(It's my customer's requirement). It
prints first 150 jobs fine after that I see a dramatic slow down. I'm
posting the print function below. Please suggest how I can improve this
and increase the speed
Thanks alot
PI
Code:
public int print(Graphics g, PageFormat pf, int PageIndex) throws
PrinterException
{
if (PageIndex != rememberedPageIndex) { // this can be called multiple
times for one page
rememberedPageIndex = PageIndex;
try {
getOnePage gop = new getOnePage(FileName, currPage);
currPage++;
OnePage = gop.PageString;
if (OnePage == "") {
return Printable.NO_SUCH_PAGE;
}
if(OnePage.charAt(0)=='\u001B'){
return Printable.NO_SUCH_PAGE;
}
}
catch ( Exception e ) {
System.out.println("Unable to get page: " + e);
}
BeginDisp = 0;
int f = 20;
int done = 0;
double iw = pf.getImageableWidth();
while (done == 0) {
g.setFont(new Font("Monospaced", Font.BOLD, f));
FontMetrics fm = g.getFontMetrics();
if (fm.stringWidth(s) < iw) {
fnt = new Font("monospaced",Font.BOLD, f);
done = 1;
break;
}
f--;
if (f < 2){ // should not happen
done = 1;
}
}
LineHeight = (int) pf.getImageableHeight();
LineHeight = LineHeight / 66;
} else {
BeginDisp = 0;
}
g.setColor(Color.black);
g.setFont(fnt);
FontMetrics fm = g.getFontMetrics();
int centerAmtX = (int) ((pf.getImageableWidth() - fm.stringWidth(s)) /
2);
int x = (int) pf.getImageableX();
int y = (int) pf.getImageableY();
int pageBreak = (int) (y + pf.getImageableHeight());
int LineCount = 0;
while ((y + LineHeight) < pageBreak) {
LineCount++;
y += LineHeight;
if (OnePage.indexOf("\r",BeginDisp) < 0) { // last line does not have
a
cr/lf
String LastLine = OnePage.substring(BeginDisp,OnePage.length() - 1);
//
drop last character: page break
g.drawString(LastLine, (int) x + centerAmtX, (int) y);
break;
}
String line =
OnePage.substring(BeginDisp,OnePage.indexOf("\r",BeginDisp));
g.drawString(line, (int) x + centerAmtX, (int) y);
BeginDisp = OnePage.indexOf("\r",BeginDisp) + 2;
if (BeginDisp >= OnePage.length()) {
break;
}
LineHeight = " + LineHeight + " pageBreak = " + pageBreak);
}
return Printable.PAGE_EXISTS;