【问题标题】:How do I set the size of a printed page in java?如何在java中设置打印页面的大小?
【发布时间】:2012-01-09 00:31:58
【问题描述】:

我编写了一个程序,它使用 Java 打印 API 从打印机打印页面。我相信我已经输入了代码来将页面大小设置为字母,但它仍然会以打印机的默认大小打印。这是我的printPage() 方法:

public void printPage() {
    getTot();
    PrinterJob job = PrinterJob.getPrinterJob();
    PageFormat pf = job.defaultPage();
    Paper paper = pf.getPaper();
    paper.setSize(8.5 * 72, 11 * 72);
    paper.setImageableArea(0.5 * 72, 0.0 * 72, 7.5 * 72, 10.5 * 72);
    pf.setPaper(paper);
    job.setPrintable(this);
    boolean ok = job.printDialog();
    if (ok) {
        if (cov)
            try {
                for (j = 0; j < printPaths.size(); j++)
                    job.print();
                cov = false;
            } catch (PrinterException ex) {
                System.out.println(ex.getMessage());
            }
        if (summ)
            try {
                job.print();
                summ = false;
            } catch (PrinterException ex) {
                System.out.println(ex.getMessage());
            }
    }

}

我做错了什么?

【问题讨论】:

    标签: java swing printing graphics2d page-size


    【解决方案1】:

    您可以尝试添加这段代码并重新运行吗:

    Book book = new Book();//java.awt.print.Book
    book.append(this, pf);
    job.setPageable(book);
    

    而不是

    job.setPrintable(this);
    

    【讨论】:

    • 哇。这完美无缺。它现在甚至打印得更快!你能解释一下这是做什么的吗?
    • 很高兴它为您工作:),它提供了您的页面可以具有不同页面格式的功能,我相信您可以提供具有不同格式的不同页面,尽管我从未使用过它:)。
    • 知道如何解决这个问题stackoverflow.com/questions/19983972/…@mprabhat
    【解决方案2】:

    Book 在我的多页示例中不适合我(结果是只打印了第一页),但它给了我另一个想法。而不是:

    Book book = new Book();//java.awt.print.Book
    book.append(this, pf);
    job.setPageable(book);
    

    我尝试了另一种重载方法,它适用于所有页面:

    PageFormat pf = job.defaultPage();
    pf.setPaper(paper);
    job.setPrintable(this, pf);
    

    如果您想要自定义纸张大小,您需要将其作为参数转发给 print 方法(Java 会为您完成,但您必须将其传递给 setPrintable 方法)。在方法开始执行后更改 PaperFormat 只会对第二页和以后的页面产生影响,或者根本没有任何影响。

    无论如何,谢谢你们。

    【讨论】:

    • 感谢第二页的提示,在设置页面格式之前,我的更改对单页文档没有任何影响在执行打印作业之前
    • book.append(this, pf) 不适用于多页打印的原因是您必须告诉 Book 将进入多少页。所以你需要做 book.append(this, pf, 14) 或其他什么。如果省略页数,则默认只做第一页。
    猜你喜欢
    • 2020-04-27
    • 2013-05-01
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    • 2012-01-07
    • 2018-10-10
    相关资源
    最近更新 更多