我正在尝试使用非常基本的东西打印节点
private void print(Node node) {
System.out.println("Creating a printer job...");
PrinterJob job = PrinterJob.createPrinterJob();
if (job != null && job.showPrintDialog(node.getScene().getWindow()) ) {
System.out.println(job.jobStatusProperty().asString());
PageLayout pageLayout = Printer.getDefaultPrinter().createPageLayout(Paper.A4, PageOrientation.PORTRAIT, Printer.MarginType.HARDWARE_MINIMUM);
boolean printed = job.printPage(pageLayout, node);
if (printed) {
System.out.println("Printed.");
job.endJob();
} else {
System.out.println("Printing failed.");
}
} else {
System.out.println("Could not create a printer job.");
}
}
问题在于我将DPI分辨率设置为72.在其他DPI分辨率中更改它是否是一种方式(没有乘以72.0 / wanted_dpi_resolution的维度)? (我的屏幕也是96 DPI)我非常感兴趣能够使用至少96 DPI的DPI值进行打印。
谢谢你,等待你的回复。
答案 0 :(得分:0)
简单的回答是,这是不可能的。
希望这会帮助其他人解决与我相同的问题。 请查看下一个代码。
public static void printReport(ArrayList<MyPane> nodeList) {
System.out.println("Creating a printer job...");
String printerName = CachedComponents.getPrinterName();
Printer printer = null;
for (Printer p : Printer.getAllPrinters()) {
if (p.getName().equals(printerName)) {
printer = p;
break;
}
}
PrinterJob job = PrinterJob.createPrinterJob(printer);
if (job != null) {
job.getJobSettings().setPrintQuality(PrintQuality.HIGH);
PageLayout pageLayout = printer.createPageLayout(Paper.A4, PageOrientation.PORTRAIT,
Printer.MarginType.HARDWARE_MINIMUM);
boolean fail = false;
for (int i=0; i<nodeList.size(); i++) {
MyPane node = nodeList.get(i);
double scaleX = pageLayout.getPrintableWidth() / node.getBoundsInParent().getWidth();
node.getTransforms().add(new Scale(scaleX, scaleX));
boolean printed = job.printPage(pageLayout, node);
if (printed) {
System.out.println("Printed.");
} else {
System.out.println("Printing failed.");
fail = true;
}
}
if (!fail) {
job.endJob();
}
} else {
System.out.println("Could not create a printer job.");
}
}
检查空检查。
干杯!