好的,这是我到目前为止所发现的(这不是一个详尽无遗的测试,但尝试和解决这个问题是一个有趣的问题).通过查看PrinterJob类中的validatePage()方法是如何工作的,似乎可能会有一些帮助.似乎如果打印机作业是虚拟的,那么任何设置页面的尝试ImageableArea将始终返回一个完全等于默认页面ImageableArea的值,而尝试与真实打印机相同的值将返回略小的值(以考虑到打印机机制所持有的纸张边缘.对于这个问题有什么帮助,如果你在调用验证之前只询问打印机的默认特性,你会得到一个乐观的结果,如果你将它与经过验证的响应进行比较,你可以做一个简单,如果测试.我已经写了一些代码,这似乎与我在桌面上的图像打印机和真正的打印机一起工作(再次这不是详尽的,但它可以作为一个起点)
import java.awt.print.*;
import javax.print.PrintService;
import javax.print.attribute.Attribute;
public class DetectFilePrinter {
public static void main(String[] args) {
PrinterJob job = PrinterJob.getPrinterJob();
PrintService printer = job.getPrintService();
System.out.println("Printer Name:"+printer.getName());
System.out.println(printer.toString());
PageFormat page = job.defaultPage();
double default_width = page.getWidth();
double default_height = page.g