原创

Java Swing PrinterJob の印刷がページから外れているのを修正する方法 JFrame とそのコンポーネントの印刷

温馨提示:
本文最后更新于 2024年04月12日,已超过 48 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

私は持っているこれレターシートの半分に印刷したい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ó.");
        }
       

そして、これは印刷されているパネルあるものです:

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 に sizeableArea プロパティがあることは知っていましたが、やりたいことと何の関係もないのではないかと心配したため、試しませんでした。

JPanel のサイズとアスペクト比を変更してみましたが、常に同じ出力が得られました。コードの 2 番目のビットを次のように変更します。

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

            return PAGE_EXISTS;
        } else {
            return NO_SUCH_PAGE;
        }

結果は同じになります。

正文到此结束
热门推荐
本文目录