如何在Java中打印而不显示打印对话框

3

我正在创建一个Java应用程序,应用程序将打印一张图片和一些文本。我有两台打印机,在打印时我会相应地选择打印机。我不会显示打印对话框供用户选择打印机和其他杂项。我的代码如下:

PrinterJob job = PrinterJob.getPrinterJob();
boolean ok = job.printDialog();

如果我不跳过这一行boolean ok = job.printDialog();,则文本将被打印在我的情况下所提到的位置(20,20),但是如果我跳过这一行,则我的打印会在打印机上的一个更远的点完成,可能是(120,120),这意味着我需要设置边距。同时,请给我提供一段用于设置打印机的代码。


1
我觉得这个问题过于具体,涉及到了PrinterJob类和printDialog()方法。你需要提供更多信息给我们。 - E net4
我需要一段代码来打印,不弹出打印对话框,设置边距和选择打印机。 - Sar009
你并没有完全理解重点。我们需要知道适用于PrinterJob的所有基础程序,以及可能的Job类是什么。这可能甚至不是公共库的一部分,因此在这种情况下我们无法帮助你。 - E net4
3
PrinterJob 是 Java 中的一个类,它用于打印。 - Sar009
很好你指出了这一点。我承认我从未听说过它,并且在搜索中也找不到它。 - E net4
2个回答

5

因为这个答案在谷歌排名靠前,所以这里提供一个代码示例:

public class printWithoutDialog implements printable 
{
    public PrintService findPrintService(String printerName)
    {
        for (PrintService service : PrinterJob.lookupPrintServices())
        {
            if (service.getName().equalsIgnoreCase(printerName))
                return service;
        }

        return null;
    }

    @Override
    public int print(Graphics g, PageFormat pf, int page) throws PrinterException 
    {
        if (page > 0) { /* We have only one page, and 'page' is zero-based */
            return NO_SUCH_PAGE;
        }

        /* User (0,0) is typically outside the imageable area, so we must
        * translate by the X and Y values in the PageFormat to avoid clipping
        */
        Graphics2D g2d = (Graphics2D)g;
        g2d.translate(pf.getImageableX(), pf.getImageableY());
        /* Now we perform our rendering */

        g.setFont(new Font("Roman", 0, 8));
        g.drawString("Hello world !", 0, 10);

        return PAGE_EXISTS;
    }

    public printSomething(String printerName)
    {
        //find the printService of name printerName
        PrintService ps = findPrintService(printerName);                                    
        //create a printerJob
        PrinterJob job = PrinterJob.getPrinterJob();            
        //set the printService found (should be tested)
        job.setPrintService(ps);      
        //set the printable (an object with the print method that can be called by "job.print")
        job.setPrintable(this);                
        //call je print method of the Printable object
        job.print();
    }
}

如果您想在不弹出对话框的情况下使用Java打印功能,则需要指定PrinterJob要设置的打印服务。printService类为您提供所需的打印机服务。该类实现可打印接口,与Java教程中(带有对话框)相同。唯一不同之处在于"printSomething"函数中,您可以找到注释。


2
通过至少简要解释此代码的作用,提高您答案的实用性...仅仅倾倒大块代码并不是我认为最具信息性的做法。 - Kris
请问您能否提供更多细节和源链接,我也想集成相同的内容。是否有示例代码可供参考? - dextermini

5
你可以使用 job.print() 替代 job.printDialog() 来抑制打印对话框。但是,如果你想要更改边距和其他设置,则需要使用 PaperPageFormat 类,这些类在 java.awt.print.Paper 和 java.awt.print.PageFormat 中可以找到。Paper 可以让你设置纸张大小并在 PageFormat 中使用它。然后,你可以使用 PrinterJob 类的 setPrintable() 方法,同时将类型为 PrintablePrintFormat 的对象作为参数。但最重要的是,Paper 类将允许您设置边距,如果这是您关心的问题。

1
我正在使用job.print()进行打印。请给我设置边距的代码。我知道可以使用Paper和PageFormat来实现,但是怎么做呢? - Sar009
我可以帮助您改进代码,但您需要自己编写代码。如果您添加了一些已经编写的代码,我可以给您指出正确的方向。这里有一个示例 - minhaz1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接