Slow down in Java printing

  • Thread starter PseudoIntellectual
  • Start date
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",BeginDis­p) < 0) { // last line does not have
a
cr/lf
String LastLine = OnePage.substring(BeginDisp,On­ePage.length() - 1);
//
drop last character: page break
g.drawString(LastLine, (int) x + centerAmtX, (int) y);
break;

}


String line =
OnePage.substring(BeginDisp,On­ePage.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;
 
T

Thomas Weidenfeller

PseudoIntellectual said:
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

Use a profiler to measure(!) what is going on where.

/Thomas
 
J

jAnO!

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


<Snip>
<sidenote>
If I had to maintain this code, I would hunt you down and kill you.
</sidenote>

Decrease in performance after an amount of time indicates to me that you
have a memory problem.
Try profiling your app. and see what is causing the problem, the processor
is probably GC ing.

hth,

jAnO!
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads


Members online

Forum statistics

Threads
473,774
Messages
2,569,598
Members
45,150
Latest member
MakersCBDReviews
Top