Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java上打印多个可打印页面_Java_Eclipse_Printing - Fatal编程技术网

在Java上打印多个可打印页面

在Java上打印多个可打印页面,java,eclipse,printing,Java,Eclipse,Printing,我需要在我的应用程序上打印多页,但当我尝试打印它时,我只打印了一页,或者同一页打印了5次,例如 我把代码放在下面: MyPrintableTable mpt = new MyPrintableTable(); PrinterJob job = PrinterJob.getPrinterJob(); //PageFormat pf = job.defaultPage(); job.setPrintable(mpt); job.printDialog();

我需要在我的应用程序上打印多页,但当我尝试打印它时,我只打印了一页,或者同一页打印了5次,例如

我把代码放在下面:

MyPrintableTable mpt = new MyPrintableTable();
PrinterJob job = PrinterJob.getPrinterJob();
//PageFormat pf = job.defaultPage();
job.setPrintable(mpt);             
job.printDialog();             
try 
{
    job.print();
} 
catch (PrinterException e) 
{
    // TODO Auto-generated catch block
    e.printStackTrace();
}
“MyPrintableTable”类:

class MyPrintableTable implements Printable 
{
    public int print(Graphics g, PageFormat pf, int pageIndex) 
    {
        if (pageIndex != 0)
           return NO_SUCH_PAGE;
        Graphics2D g2 = (Graphics2D) g;
        g2.setFont(new Font("Serif", Font.PLAIN, 16));
        g2.setPaint(Color.black);
        int x = 100;
        int y = 100;
        for(int i = 0; i < sTable.size(); i++)
        {
            g2.drawString(sTable.get(i).toString(), x, y);
            y += 20;                    
        }
        return PAGE_EXISTS;
    }
}
类MyPrintableTable实现可打印 { 公共整型打印(图形g、页面格式pf、整型页面索引) { 如果(页面索引!=0) 不返回此类页面; 图形2d g2=(图形2d)g; g2.setFont(新字体(“衬线”,Font.PLAIN,16)); g2.setPaint(颜色为黑色); int x=100; int y=100; 对于(int i=0;i 如果我更改“pageIndex!=0”条件,我会打印更多的页面,但所有页面都具有相同的文本

我想打印我所有的文本,有三页的长度,但我只能打印第一页,o打印第一页的三倍


有人能帮我吗?

这里有一个测试程序,演示了我之前在评论中建议的原则。它基于来自的想法以及问题中的代码。在实际程序中,我可能会计算
linesPerPage
,而不是编译成数字

public class Test {
  public static void main(String[] args) {
    MyPrintableTable mpt = new MyPrintableTable();
    PrinterJob job = PrinterJob.getPrinterJob();
    // PageFormat pf = job.defaultPage();
    job.setPrintable(mpt);
    job.printDialog();
    try {
      job.print();
    } catch (PrinterException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }
}

class MyPrintableTable implements Printable {
  private int linesPerPage = 20;
  private List<String> sTable = new ArrayList<String>();
  {
    for (int i = 0; i < 100; i++) {
      sTable.add("Line" + i);
    }
  }

  public int print(Graphics g, PageFormat pf, int pageIndex) {
    if (pageIndex * linesPerPage >= sTable.size())
      return NO_SUCH_PAGE;
    Graphics2D g2 = (Graphics2D) g;
    g2.setFont(new Font("Serif", Font.PLAIN, 16));
    g2.setPaint(Color.black);
    int x = 100;
    int y = 100;
    for (int i = linesPerPage * pageIndex; i < sTable.size()
        && i < linesPerPage * (pageIndex + 1); i++) {
      g2.drawString(sTable.get(i).toString(), x, y);
      y += 20;
    }
    return PAGE_EXISTS;
  }
}
公共类测试{
公共静态void main(字符串[]args){
MyPrintableTable mpt=新的MyPrintableTable();
PrinterJob job=PrinterJob.getPrinterJob();
//PageFormat pf=job.defaultPage();
作业。可设置打印(mpt);
job.printDialog();
试一试{
job.print();
}捕获(打印异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
}
类MyPrintableTable实现可打印{
专用int linesPerPage=20;
private List sTable=new ArrayList();
{
对于(int i=0;i<100;i++){
稳定。添加(“行”+i);
}
}
公共整型打印(图形g、页面格式pf、整型页面索引){
如果(pageIndex*linesPerPage>=稳定的.size())
不返回此类页面;
图形2d g2=(图形2d)g;
g2.setFont(新字体(“衬线”,Font.PLAIN,16));
g2.setPaint(颜色为黑色);
int x=100;
int y=100;
对于(int i=linesPerPage*pageIndex;i
为什么不使用
pageIndex
选择要打印的数据?看到了吗?我在两个小时前看到了,但我不知道如何在代码中使用它,你能帮我吗?你需要确定哪些数据属于哪个页面,并相应地修改for循环。可能类似于(inti=pageIndex*linesPerPage;i,其中
linesPerPage
是您计划在每页上显示的表项数。