如何在java中打印而不显示printdialog

如何在java中打印而不显示printdialog,java,printing,Java,Printing,我正在创建一个java应用程序,其中应用程序将打印一张图片和旁边的一些文本。我有两台打印机,打印时我会相应地选择。我不会显示打印对话框供用户选择打印机和其他内容。我的代码如下 PrinterJob job = PrinterJob.getPrinterJob(); boolean ok = job.printDialog(); 如果我不跳过行boolean ok=job.printDialog()文本在我的案例(20,20)中提到的位置打印,但是如果我跳过该行,我的打印将在打印机上更远的位置进

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

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

如果我不跳过行
boolean ok=job.printDialog()文本在我的案例(20,20)中提到的位置打印,但是如果我跳过该行,我的打印将在打印机上更远的位置进行(120,120),这意味着我需要一个边距设置。还可以给我一个设置打印机的代码。

您可以使用
job.Print()
而不是
job.printDialog()
来取代打印对话框。但是,如果希望能够更改页边距和其他所有内容,则需要使用java.awt.print.Paper和java.awt.print.PageFormat下的
Paper
PageFormat
类。纸张将允许您设置纸张大小并在
PageFormat
中使用。然后可以使用PrinterJob类的
setPrintable()
方法,将类型为
Printable
PrintFormat
的对象作为参数。但最重要的是,
Paper
类将允许您设置边距,如果这是您关心的问题。

因为这个答案在google上是最重要的,下面是一个代码示例:

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”函数,您可以在其中找到注释。

我感觉这个问题对于PrinterJob类和printDialog()方法来说太具体了。您必须向我们提供更多信息。我需要在没有打印对话框、设置页边距和选择打印的情况下打印代码。您不太理解这一点。我们需要知道适用于PrinterJob的所有底层过程,以及Job类可能是什么。这甚至可能不是公共图书馆的一部分,因此在这种情况下我们无法帮助您。PrinterJob位于java.awt.print.PrinterJob中您指出了这一点。我承认我从未听说过它,在搜索中也找不到它。我正在使用job.print()进行打印。请给我设置边距的代码。我知道可以使用纸张和页面格式来实现这一点,但我如何帮助您改进代码,但您需要编写自己的代码。如果你添加一些你已经完成的代码,我可以提示你正确的方向。这里有一个改进您的答案的实用性,至少简单地解释一下这段代码的作用…我认为仅仅转储大块代码并不是最有用的做法。您能提供我更多的细节和源代码链接吗,我也想集成相同的内容。tere是否有任何示例代码示例