2
有沒有一種方法可以在Java中綁定PrinterJob以實際不打印到打印機,以便我可以獲取每個頁面的圖形對象?我試着將PrintService設置爲null,但Java不允許這樣做。使用PrinterJob打印圖像(Graphics2D)
這樣我就可以爲文檔檢索準確的打印預覽,而不必在不同的上下文中從頭開始重建PrinterJobs函數。
下面是我在程序的打印功能的代碼:
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;
}
你已經可以看到圖形對象被記錄,這樣我可以在另一個組件畫他們,但是它是相當無用看到,因爲它會請在記錄完成之前將它們發送到我的打印機。
這可能是一個糟糕的主意,而且我對打印很陌生。如果這真的是一個不好的方法去解決這個問題,請隨時指引我解釋一個更好的方法。
那麼,如果我直接從可打印對象調用print()方法,那麼它實際上不會將紙張發送給打印機呢? – Brayden
不,它會使用您提供的圖形上下文來渲染 - 這是一種經典的打印預覽方法... – MadProgrammer
非常感謝您的協助。 – Brayden