2015-01-26 3 views
2

Мне нужно напечатать несколько страниц в приложении, но когда я пытаюсь их распечатать, я получаю только одну страницу, напечатанную, например, одну страницу, напечатанную 5 раз.Печать нескольких страниц с возможностью печати на Java

Я поставил код ниже:

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; 
    } 
} 

Если я изменяю "! PageIndex = 0" состояние, я больше напечатанных страниц, но все с тот же текст.

Я хочу напечатать весь текст, который имеет длину в три страницы, но я могу напечатать только первый, o напечатать три раза первый.

Может кто-нибудь мне помочь?

+0

Почему вы не используете 'pageIndex' для выбора данных для печати? См. [Печать документа с несколькими страницами] (http://docs.oracle.com/javase/tutorial/2d/printing/set.html) –

+0

Я вижу это за два часа до этого, но я не знаю, как его использовать мой код, вы можете мне помочь? –

+0

Вам необходимо выяснить, какие данные принадлежат этой странице, и соответственно изменить свой цикл. Возможно, что-то вроде 'for (int i = pageIndex * linesPerPage; i

ответ

1

Вот тестовая программа, которая демонстрирует принципы, которые я ранее предлагал в комментариях. Он основан на идеях от Printing a Multiple Page Document, а также на коде в вопросе. В реальной программе я бы, скорее всего, вычислил 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; 
    } 
} 
+0

он отлично работает !! благодаря! :) –

+0

PD: ты спас мою работу и свою жизнь! –

Смежные вопросы