java - 使用 Swing 打印多页

标签 java swing printing textarea jtextarea

我正在编写一个程序,该程序将我的文本区域与已经生成的数据一起打印出来。我用它来计算打印整个文本区域需要多少页,但不是先打印第 1 页,然后再打印第 2 页,而是先打印第 1 页,然后再打印第 1 页。我似乎无法让它发挥作用来挽救我的生命。我一直在浏览所有论坛并在 oracle 上提供帮助,但一定有一些我遗漏的东西。如果您能如此友善并花一点时间看看我的代码,我将不胜感激。谢谢。 -加勒特

private void hardPrintActionPerformed(java.awt.event.ActionEvent evt)       
{                                          
    int width = printOut.getWidth() ;
    int height = printOut.getHeight();
    System.out.println("width is "+ width);
    System.out.println("Height is "+height);

    String font = fontSize.getText();
    int FontS = Integer.parseInt(font);
    Font fonT = new Font("Monospaced", Font.PLAIN, 12);

    printOut.setFont(new Font("Tahoma", Font.PLAIN, FontS));

    PrinterJob pj = PrinterJob.getPrinterJob();   
    PageFormat pf = pj.defaultPage(); 

    Book bk = new Book();
    Paper paper = new Paper(); 

    double margin = 18;    
    pj.setPageable(bk);

    paper.setSize(612,792);
    paper.setImageableArea(margin, margin
                , paper.getWidth() -margin * 2
                , paper.getHeight() - margin * 2);   
    int lines = printOut.getLineCount();
    System.out.println("lines = "+lines);
    pf.setPaper(paper); 
    int tall = (int) pf.getImageableHeight();
    System.out.println("tall ="+tall);
    System.out.println("orientation "+pf.getOrientation());

    int pagenum =bk.getNumberOfPages();
    System.out.println("pagenum = "+pagenum);
    System.out.println("areah = "+height);
    int numpages =1;
    if (height >756) {
        for (int i = 756; i < height;) {
            numpages = numpages+1;
            i= i +756;
        }
    }
    System.out.println("numpages ="+numpages);
    bk.append(new MyPrintable(), pf,numpages);

    //  pj.setPrintable(new MyPrintable(), pf);   
    if (pj.printDialog()) {   
        try {   
            printOut.setBounds(0, 0, printOut.getWidth(), printOut.getHeight());
            pj.print();
        } catch (PrinterException pp) {   
            System.out.println(pp);   
        }   
    }   
}

/**
* @param args the command line arguments
*/
class MyPrintable implements Printable {   
    public int print(Graphics g, PageFormat pf, int pageIndex) {   
        //int pagenum =bk.getNumberOfPages();
        int height = printOut.getHeight();  
        int numpages =1;
        if (height >756) {
            for (int i = 756; i < height;) {
                numpages = numpages+1;
                i= i +756;
            }
        }   
        if (pageIndex >3)   
            return NO_SUCH_PAGE; 
        else{  
            Graphics2D g2 = (Graphics2D) g;   
            g2.setFont(new Font("Monospaced", Font.PLAIN, 10));
            printOut.setBounds(0, 0, printOut.getWidth(), printOut.getHeight());
            // paper.getImageableWidth();
            g2.translate(pf.getImageableX(), pf.getImageableY()); 
            System.out.println("print " +pf.getImageableY());
            Rectangle componentBounds = printOut.getBounds();   
            g2.translate(-componentBounds.x, -componentBounds.y);   
            g2.scale(1, 1);   
            boolean wasBuffered = printOut.isDoubleBuffered();   
            printOut.printAll(g2);   //printOut is my text area.
            printOut.setDoubleBuffered(wasBuffered);   

            return PAGE_EXISTS;   
        }
    }
}

最佳答案

你需要使用 g2.translate(-componentBounds.x, -componentBounds.y);

使用 pageIndex*pageHeight 更正 Y

关于java - 使用 Swing 打印多页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17592871/

相关文章:

java限制窗口/Jpanel的切换

twitter-bootstrap - 在 Firefox 中打印 Bootstrap 页面

java - 在 JDeskopPane 上写入文本

java - ArrayList .contain 给出奇怪的输出

java - checkboxgroup 未出现在面板中

java - JTextArea 不允许输入文本

HTML 表格减小了整个页面上的打印字体大小

c - 如何打印数组?

java - 错误/尝试后继续函数 - catch

java - Jython 中的 Python 解释器