Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / печать нескольких страниц / 10 сообщений из 10, страница 1 из 1
22.02.2005, 12:06
    #32928063
akula84
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
печать нескольких страниц
Есть класс (Printer), реализующий printable. В классе есть переменная static. В зависимости от задаваемого значения переменной должны печататься разные страницы в этом классе.
в другом классе пишу.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
   public   void  doPrint() {
    PrinterJob printerJob = PrinterJob.getPrinterJob();
    PageFormat format =  new  PageFormat();
    format.setOrientation(PageFormat.LANDSCAPE);
    Book book =  new  Book();
    getNumPages();
    System.out.println("capicity = "+name.capacity());
    System.out.println("numPages = "+numPages);
    Printer pr =  new  Printer();
    pr.setValues(name,account,date,remainderIn,obDeb,obCred,remainderOut);
     for ( int  pagePrint= 0 ;pagePrint<numPages;pagePrint++)
    {
      Printer.pagePrint=pagePrint;
      book.append(pr, format);
      System.out.println("bil zdes");
    }
    printerJob.setPageable(book);

     boolean  doPrint = printerJob.printDialog();
     if  (doPrint) {
       try  {
        printerJob.print();
      }  catch (PrinterException exception) {
        System.err.println("Printing error: " + exception);
      }
    }
  }

В итоге печатается одна и та же страница несколько раз, а не разные.
В чем может быть проблема?
заранее спасибо за помощь...
...
Рейтинг: 0 / 0
22.02.2005, 12:21
    #32928122
NotGonnaGetUs
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
печать нескольких страниц
Код: plaintext
1.
2.
3.
4.
5.
6.
  for ( int  pagePrint= 0 ;pagePrint<numPages;pagePrint++)
    {
    Printer.pagePrint=pagePrint;
      book.append(pr, format);
      System.out.println("bil zdes");
    }


Если в методе append, занчение Printer.pagePrint не читается и не сохраняется в book, то твой код эквивалентен
Код: plaintext
1.
2.
3.
4.
5.
6.
  for ( int  pagePrint= 0 ;pagePrint<numPages;pagePrint++)
    {
      book.append(pr, format);
      System.out.println("bil zdes");
    }
    Printer.pagePrint=numPages- 1 ;
Делай выводы.
...
Рейтинг: 0 / 0
25.02.2005, 09:59
    #32932619
akula84
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
печать нескольких страниц
Все равно не понимаю в чем проблема.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
   public   void  doPrint() {
    PrinterJob printerJob = PrinterJob.getPrinterJob();
    PageFormat format =  new  PageFormat();
    format.setOrientation(PageFormat.LANDSCAPE);
    Book book =  new  Book();
    getNumPages();
    pr.setValues(name,account,date,remainderIn,obDeb,obCred,remainderOut);
     for ( int  pagePrint= 0 ;pagePrint<numPages;pagePrint++)
    {
      book.append(pr, format);
    }
    printerJob.setPageable(book);

     boolean  doPrint = printerJob.printDialog();
     if  (doPrint) {
       try  {
        printerJob.print();
      }  catch (PrinterException exception) {
        System.err.println("Printing error: " + exception);
      }
    }
  }

Проверяю работу кода. Вот что получается.
Пример:
numPages = 5
5 раз проходит цикл for.
Дальше идет работа класса Printer.
Класс отрабатывает 10 раз вместо 5.
При этом первые пять раз выдаются нужные мне результаты, а дальше идет продолжение печати
На принтер выдается работа класса Printer в 1,3 раз и дальше еще 3 страницы с пустыми значениями. почему так происходит,объясните плиз...
...
Рейтинг: 0 / 0
25.02.2005, 10:31
    #32932716
NotGonnaGetUs
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
печать нескольких страниц
akula84Все равно не понимаю в чем проблема.
...
Проверяю работу кода. Вот что получается.
Пример:
numPages = 5
5 раз проходит цикл for.
Дальше идет работа класса Printer.
Класс отрабатывает 10 раз вместо 5.
При этом первые пять раз выдаются нужные мне результаты, а дальше идет продолжение печати
На принтер выдается работа класса Printer в 1,3 раз и дальше еще 3 страницы с пустыми значениями. почему так происходит,объясните плиз...
слишком мало информации о твоём коде.
Что из себя представляет структура book,
как устроен метод printJob#print().
Запусти дебагер и строчка за стройчкой пройди по коду, ищя точку где код начинает вести себя "не так". Когда последняя здравая мысль пропадает, это лучший подход :)
...
Рейтинг: 0 / 0
25.02.2005, 10:33
    #32932724
NotGonnaGetUs
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
печать нескольких страниц
ой
это же стандартные классы :)
...
Рейтинг: 0 / 0
25.02.2005, 10:37
    #32932737
NotGonnaGetUs
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
печать нескольких страниц
а кто такой Printer?
...
Рейтинг: 0 / 0
25.02.2005, 10:44
    #32932755
NotGonnaGetUs
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
печать нескольких страниц
NotGonnaGetUsа кто такой Printer?
Похоже проблема в его реализации.
Он отвечает за кол-во распечатываемых страниц и как они будут выглядеть.
...
Рейтинг: 0 / 0
25.02.2005, 10:56
    #32932797
akula84
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
печать нескольких страниц
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
 class  Printer  implements  Printable{

   static  Vector name =  new  Vector();
   static  Vector account =  new  Vector();
   static  Vector date =  new  Vector();
   static  Vector remainderIn =  new  Vector();
   static  Vector obDeb =  new  Vector();
   static  Vector obCred =  new  Vector();
   static  Vector remainderOut =  new  Vector();
   final   static   int  nameWidth =  80 ;
   final   static   int  accountWidth =  120 ;
   final   static   int  dateWidth =  80 ;
   final   static   int  remainderInWidth =  70 ;
   final   static   int  remainderOutWidth =  70 ;
   final   static   int  obDebWidth =  70 ;
   final   static   int  obCredWidth =  70 ;
   final   static   int  prob =  8 ;
   static   int  pagePrint= 0 ;
   static   int  totalPages= 0 ;

   void  setValues(Vector name,Vector account,Vector date,Vector remainderIn,Vector obDeb,Vector obCred,Vector remainderOut){
     this .name = name;
     this .account = account;
     this .date = date;
     this .remainderIn = remainderIn;
     this .obDeb = obDeb;
     this .obCred = obCred;
     this .remainderOut = remainderOut;

  }


   public   int  print(Graphics g, PageFormat pageFormat,  int  pageIndex) {
    System.out.println("pagePrint "+pagePrint);
    Graphics2D g2d = (Graphics2D) g;
    g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
    g2d.setPaint(Color.black);

    Font titleFont =  new  Font ("Arial", Font.BOLD,  8 );
    g2d.setFont (titleFont);
     int  i;
     int  preY= 13 ;
     int  preX= 0 ;

    g2d.drawString("Фамилия",preX, preY);
    preX = preX + nameWidth + prob;
    g2d.drawString("Счет клиента в системе",preX, preY);
    preX = preX + accountWidth + prob;
    g2d.drawString("Дата заведения счета",preX, preY);
    preX = preX + dateWidth + prob;
    g2d.drawString("Входящий остаток",preX, preY);
    preX = preX + remainderInWidth + prob;
    g2d.drawString("Оборот по дебету",preX, preY);
    preX = preX + obDebWidth + prob;
    g2d.drawString("Оборот по кредиту",preX, preY);
    preX = preX + obCredWidth + prob;
    g2d.drawString("Исходящий остаток",preX, preY);
    preX = preX + remainderOutWidth + prob;
    preY=preY+ 15 ;

    name.trimToSize();
    account.trimToSize();
    date.trimToSize();
    remainderIn.trimToSize();
    obDeb.trimToSize();
    obCred.trimToSize();
    remainderOut.trimToSize();
    System.out.println("/-------------capicity=------/"+name.capacity());

     for (i=pagePrint* 45 ;i<pagePrint* 45 + 45 ;i++)
    {
       if (i>=name.capacity())
      {
         break ;
      }
      System.out.print("i = " + i);
      preX= 0 ;

      g2d.drawString(name.get(i).toString(), preX, preY);
      System.out.print(name.get(i));
      preX = preX + nameWidth + prob;
      g2d.drawString(account.get(i).toString(),preX, preY);
      System.out.print(account.get(i));
      preX = preX + accountWidth + prob;
      g2d.drawString(date.get(i).toString(),preX, preY);
      System.out.println(date.get(i));
      preX = preX + dateWidth + prob;
      g2d.drawString(remainderIn.get(i).toString(),preX, preY);
      preX = preX + remainderInWidth + prob;
      g2d.drawString(obDeb.get(i).toString(),preX, preY);
      preX = preX + obDebWidth + prob;
      g2d.drawString(obCred.get(i).toString(),preX, preY);
      preX = preX + obCredWidth + prob;
      g2d.drawString(remainderOut.get(i).toString(),preX, preY);
      preX = preX + remainderOutWidth + prob;
      preY=preY+ 10 ;

    }

  System.out.println("totPages"+totalPages);
  pagePrint++;

     return  Printable.PAGE_EXISTS;
}


}



...
Рейтинг: 0 / 0
25.02.2005, 11:57
    #32933044
NotGonnaGetUs
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
печать нескольких страниц
Прежде всего, зачем нужны static поля к тому же открытые? Модификатор static имеет смысл применять только для "констант".
Vector#trimToSize(); - если и имеет смысл делать это вызов, то только кода ты делаешь присвоение this.name = name.

А в целом слишком много путаницы в понимании того, что такое Book и Printable :)

1. Printable.
Ты всегда возвращаешь Printable.PAGE_EXISTS.
А в случае, если делается запрос к несуществующей странице, должен быть возвращён NO_SUCH_PAGE.

В зависимости от pageFormat, ты должен вычислить сколько страниц у тебя занимает документ и генерить вывод для каждой страницы по её индексу(параметр метода Printable#print()).
При этом нужно помнить, что одна и таже страница может запрашиваться несколько раз или пропускаться (поэтому pageNumber++ - это не правильно).

2. Book.
Ты добавляешь 5 страниц. PrintJob 5 раз делает запрос к Book, получает тот же самый инстанс Printer и пытается его распечатать.
Откуда берётся число 10 не знаю. Это зависит от реализация PrinterJob.
Для того, что бы эта реализация работала корректно, нужно, что бы реализация Printable была корректна, а она не корректа (5 последоательных бесконечных страниц - это не халява).
Добавляемый в Book Printalbe должен печатать одну страницу.

Имхо, проще всего нормально реализовать Printer и отказаться от Book, сразу делать вызов PrinterJob#setPrintable().
...
Рейтинг: 0 / 0
25.02.2005, 14:06
    #32933528
akula84
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
печать нескольких страниц
to NotGonnaGetUs
Огромное спасибо, действительно, немного исправив прогу, все заработало.

:)
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / печать нескольких страниц / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]