You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Java Swing PrinterJob打印内容超出页面的问题

问题:将GUI打印到半张信纸大小的纸张

我有一个GUI界面,想要将其打印在半张信纸大小的纸张上,但当前打印输出不符合需求。

当前打印逻辑代码

在「确认打印GUI」中使用的打印代码:

PrinterJob job = PrinterJob.getPrinterJob();
PageFormat format = new PageFormat();

job.setPrintable(impresionpanel, format);

if (job.printDialog()) {
    try {
        job.print();
        this.dispose();
    } catch (PrinterException ex) {
        JOptionPane.showMessageDialog(this, "Error en la impresión.");
    }
} else {
    JOptionPane.showMessageDialog(this, "La impresión se canceló.");
}

被打印面板的print方法实现

public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {
    if (pageIndex == 0) {
        Graphics2D graphics2d = (Graphics2D) graphics;
        graphics2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
        printAll(graphics2d);

        return PAGE_EXISTS;
    } else {
        return NO_SUCH_PAGE;
    }
}

测试生成的PDF结果不符合半张信纸的要求。我知道PageFormat的Paper类中有可设置打印区域的属性,但担心和需求无关所以没尝试。

我已经尝试过修改JPanel的尺寸和宽高比,输出结果始终不变;也把print方法修改为以下代码,结果还是一样:

if (pageIndex == 0) {
    Graphics2D graphics2d = (Graphics2D) graphics;
    graphics2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
    printAll(graphics);

    return PAGE_EXISTS;
} else {
    return NO_SUCH_PAGE;
}

求各位帮忙解决这个问题。

内容的提问来源于stack exchange,提问作者NappeyWappey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 03:43:22