2

我正在创建一个 java 应用程序,应用程序将在其中打印图片和旁边的一些文本。我在打印时有两台打印机,我会相应地选择。我不会显示打印对话框让用户选择打印机和其他东西。我的代码如下

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

如果我不跳过该行boolean ok = job.printDialog();,则在我的情况下(20,20)将在提到的位置打印文本,但如果我跳过该行,我的打印可能会在打印机上更远的位置(120、120)完成意味着我需要一个保证金设置。并给我一个设置打印机的代码。

4

2 回答 2

5

您可以使用job.print()而不是job.printDialog(). 但是,如果您希望能够更改边距和其他所有内容,则需要使用java.awt.print.Paper 和 java.awt.print.PageFormat 下的Paper和类。PageFormatPaper 将允许您设置纸张的尺寸并在PageFormat. 然后,您可以将setPrintable()PrinterJob 类的方法与类型对象PrintablePrintFormat作为参数一起使用。但最重要的是,Paper如果您担心,该课程将允许您设置边距。

于 2012-08-03T18:45:37.703 回答
4

因为这个答案在谷歌上是最重要的,所以这里有一个代码示例:

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 教程(带对话框)中制作的。唯一的区别在于“printSompething”功能,您可以在其中找到评论。

于 2015-04-07T16:03:56.953 回答