各ページのグラフィックスオブジェクトを取得できるように、JavaでPrinterJobをリグして、実際にプリンターに印刷しないようにする方法はありますか?PrintServiceをnullに設定しようとしましたが、Javaでは許可されませんでした。
これは、PrinterJobs関数を別のコンテキストでゼロから再構築することなく、ドキュメントの正確な印刷プレビューを取得できるようにするためです。
これが私のプログラムのprint関数のコードです:
public int print(Graphics graphics, PageFormat pageFormat, int page) throws PrinterException {
deepCopyString = string;
FontMetrics metrics = graphics.getFontMetrics(font);
int lineHeight = metrics.getHeight();
arrangePage(graphics, pageFormat, metrics);
if (page > pageBreaks.length){
return NO_SUCH_PAGE;
}
Graphics2D g = (Graphics2D) graphics;
g.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
g.setFont(font);
int begin = (page == 0) ? 0 : pageBreaks[page-1];
int end = (page == pageBreaks.length) ? lines.length : pageBreaks[page];
int y = 0;
int x = 0;
for (int line = begin; line < end; line++){
x = 0;
y += lineHeight;
checkSyntax(line);
String l = lines[line];
for (int c = 0; c < l.length(); c++){
applySyntax(c, line);
metrics = graphics.getFontMetrics(font);
String ch = Character.toString(l.charAt(c));
g.setFont(font);
g.drawString(ch, x, y);
x += metrics.charWidth(l.charAt(c));
//System.out.println(c + "/"+l.length());
}
//g.drawString(lines[line], 0, y);
}
reset();
records.add(g);
return PAGE_EXISTS;
}
グラフィックスオブジェクトが別のコンポーネントでペイントできるように記録されていることはすでにわかりますが、記録が完了する前に先に進んでこれらをプリンタに送信するので、見るのはかなり無意味です。
これは一般的に悪い考えかもしれません、そして私は印刷にかなり慣れていません。これがこれについて真剣に悪い方法である場合は、より良い方法を説明する情報源に私を遠慮なく案内してください。