Java是一種既有強大功能又廣泛應用的編程語言。在Java中,實現預覽和打印功能是常見的需求。通過Java的Print API,可以輕松地實現打印任務,而通過JavaFX的Print API,可以實現打印預覽功能。
要實現預覽功能,需要創建一個預覽視圖。這個視圖需要將您想要打印的內容渲染到一個節點上。通過使用JavaFX的Scene和Node類,您可以創建一個節點,并將它作為參數傳遞給PrintPreviewPane類來創建一個能夠預覽打印內容的視圖。
public class PrintPreviewPane extends BorderPane { private Node node; public PrintPreviewPane(Node nodeToPrint) { this.node = nodeToPrint; VBox buttonBox = new VBox(); Button printButton = new Button("Print"); printButton.setOnAction(event ->{ print(null); }); Button cancelButton = new Button("Cancel"); cancelButton.setOnAction(event ->{ getScene().getWindow().hide(); }); buttonBox.getChildren().addAll(printButton, cancelButton); buttonBox.setAlignment(Pos.CENTER_RIGHT); setBottom(buttonBox); StackPane stackPane = new StackPane(node); stackPane.setPadding(new Insets(15)); setCenter(stackPane); } public void print(Printer printer) { PrinterJob job = PrinterJob.createPrinterJob(); if (printer != null) { job.setPrinter(printer); } if (job != null) { boolean success = job.printPage(node); if (success) { job.endJob(); } } } }
在Java中,打印任務通常由打印機驅動程序處理。您需要使用Java的PrintService類來獲取所有可用的打印機,使用Printer類來表示要打印的具體打印機。PrintPreviewPane類定義了一個名為print()的方法,該方法以Printer對象為參數將內容發送給打印機。
如果您需要打印特殊類型的內容,例如PDF或HTML文件,則需要使用Java的Print-API,自己處理打印任務。使用Print-API幾乎可以處理完全自定義的打印任務。在使用Print-API時,需要使用PrinterJob類來創建打印作業,并使用Printable接口來打印內容。
public class CustomPrintTask implements Printable { private String content; public CustomPrintTask(String content) { this.content = content; } @Override public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException { if (pageIndex >0) { return NO_SUCH_PAGE; } graphics.drawString(content, 100, 100); return PAGE_EXISTS; } }
使用Printable接口編寫自定義的打印程序,您需要實現print()方法,該方法會處理頁面,處理內容,然后將頁面傳遞回打印機驅動程序。Printable接口的print()方法需要使用Graphics類來處理傳遞內容的呈現。 Print-API使用標準Java Graphics環境來處理最終呈現。