diff --git a/src/main/java/com/zhangmeng/online/exam/ui/utils/PrintUtils.java b/src/main/java/com/zhangmeng/online/exam/ui/utils/PrintUtils.java new file mode 100644 index 0000000..e4302b3 --- /dev/null +++ b/src/main/java/com/zhangmeng/online/exam/ui/utils/PrintUtils.java @@ -0,0 +1,72 @@ +package com.zhangmeng.online.exam.ui.utils; + +import com.zhangmeng.online.exam.ui.admin.PaperPage; +import com.zhangmeng.online.exam.ui.components.ExamComponent; +import javafx.collections.ObservableSet; +import javafx.print.*; +import javafx.scene.control.ComboBox; +import javafx.scene.transform.Scale; + +import java.util.List; + +public class PrintUtils { + + public static void printPaper(ExamComponent examComponent){ + printText(examComponent, Printer.getDefaultPrinter()); + } + + private void loadPrinters(ComboBox comboBox) { + // 获取所有可用打印机 + ObservableSet printers = Printer.getAllPrinters(); + if (printers.isEmpty()) { + System.out.println("未找到可用打印机"); + return; + } + + // 添加打印机到下拉框 + comboBox.getItems().addAll(printers); + + // 设置默认选择为系统默认打印机 + Printer defaultPrinter = Printer.getDefaultPrinter(); + if (defaultPrinter != null) { + comboBox.setValue(defaultPrinter); + } + } + + private static void printText(ExamComponent examComponent, Printer selectedPrinter) { + + if (selectedPrinter == null) { + System.out.println("未选择打印机"); + return; + } + + System.out.println("当前选择的打印机: " + selectedPrinter.getName()); + + // 创建打印作业 + PrinterJob job = PrinterJob.createPrinterJob(selectedPrinter); + if (job.showPrintDialog(examComponent.getScene().getWindow())) { + // 获取打印设置 + PageLayout pageLayout = selectedPrinter.createPageLayout(Paper.A4, PageOrientation.PORTRAIT, Printer.MarginType.DEFAULT); + + // 计算缩放比例以适应页面 + double scaleX = pageLayout.getPrintableWidth() / examComponent.getBoundsInParent().getWidth(); + double scaleY = pageLayout.getPrintableHeight() / examComponent.getBoundsInParent().getHeight(); + double scale = Math.min(scaleX, scaleY); + + // 应用缩放 + examComponent.getTransforms().add(new Scale(scale, scale)); + + // 执行打印 + boolean printed = job.printPage(pageLayout, examComponent); + if (printed) { + job.endJob(); + System.out.println("打印成功"); + } else { + System.out.println("打印失败"); + } + + // 恢复缩放 + examComponent.getTransforms().clear(); + } + } +}