Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Java.awt.print.PrinterJob获取页面格式_Java_Swing_Printing_Dimensions - Fatal编程技术网

如何从Java.awt.print.PrinterJob获取页面格式

如何从Java.awt.print.PrinterJob获取页面格式,java,swing,printing,dimensions,Java,Swing,Printing,Dimensions,在打印之前,我试图使用PageFormat信息修改基于javax.swing的打印输出。如何从PrintJob(使用getPrinterJob()和printDialog()获得)获取页面格式,这让我感到困惑。我知道有getPageFormat方法,但我不知道如何获取PrintRequestAttributeSet(它不是printJob.getPrintService().getPrintAttributes())。老实说,我真正想知道的是页面的宽度和高度。有什么办法吗?谢谢。如果您只需要页面

在打印之前,我试图使用PageFormat信息修改基于javax.swing的打印输出。如何从PrintJob(使用getPrinterJob()和printDialog()获得)获取页面格式,这让我感到困惑。我知道有getPageFormat方法,但我不知道如何获取PrintRequestAttributeSet(它不是printJob.getPrintService().getPrintAttributes())。老实说,我真正想知道的是页面的宽度和高度。有什么办法吗?谢谢。

如果您只需要页面宽度和高度,我认为PageFormat.getImageableWidth()和 PageFormat.getImageableHeight()是您要查找的内容

对不起,那不是你想要的。对于黑客来说,这个怎么样:

printable.setFakeJob(true);
job.print();
printable.setFakeJob(false);
job.print();
在你的可打印文件中

public int print(Graphics graphics, PageFormat pf, int pageIndex) {
    if (isFakeJob()) {
        /* use passed-in PageFormat to set up whatever you need to set up */
        return NO_SUCH_PAGE;
    } else {
        /* do your actual printing */
    }
}
不可否认,这并不漂亮。

运行“假”打印作业的方法是行不通的,至少从长远来看是行不通的。我试过了。一开始它工作得很好。。。然后一些客户开始报告奇怪的行为

事实证明,对于某些打印机和某些配置,即使是“假”作业也会导致打印机上的活动。没有打印文档页面,但是队列活动、作业头页面,有时还有一些垃圾输出(我记得)。在某些情况下,伪造的队列条目足以干扰正常打印,并使用户感到困惑


是的,提前获取页面格式很痛苦。

这就是问题所在,我无法获取打印作业的页面格式。这就是问题所在,我无法获取打印作业的页面格式。抱歉,我误读了您的问题!我现在明白了,我想:在调用Printable.print(Graphics,PageFormat,int)方法之前,您需要获取页面大小。不幸的是,我也找不到这样做的方法:PrinterJob似乎不允许您在不调用PrinterJob.print()的情况下访问用户在“打印”对话框中所做的选择。我有一个黑客的想法,我将发布作为另一个答案。