powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / печать нескольких страниц
10 сообщений из 10, страница 1 из 1
печать нескольких страниц
    #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
печать нескольких страниц
    #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
печать нескольких страниц
    #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
печать нескольких страниц
    #32932716
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akula84Все равно не понимаю в чем проблема.
...
Проверяю работу кода. Вот что получается.
Пример:
numPages = 5
5 раз проходит цикл for.
Дальше идет работа класса Printer.
Класс отрабатывает 10 раз вместо 5.
При этом первые пять раз выдаются нужные мне результаты, а дальше идет продолжение печати
На принтер выдается работа класса Printer в 1,3 раз и дальше еще 3 страницы с пустыми значениями. почему так происходит,объясните плиз...
слишком мало информации о твоём коде.
Что из себя представляет структура book,
как устроен метод printJob#print().
Запусти дебагер и строчка за стройчкой пройди по коду, ищя точку где код начинает вести себя "не так". Когда последняя здравая мысль пропадает, это лучший подход :)
...
Рейтинг: 0 / 0
печать нескольких страниц
    #32932724
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ой
это же стандартные классы :)
...
Рейтинг: 0 / 0
печать нескольких страниц
    #32932737
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а кто такой Printer?
...
Рейтинг: 0 / 0
печать нескольких страниц
    #32932755
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NotGonnaGetUsа кто такой Printer?
Похоже проблема в его реализации.
Он отвечает за кол-во распечатываемых страниц и как они будут выглядеть.
...
Рейтинг: 0 / 0
печать нескольких страниц
    #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
печать нескольких страниц
    #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
печать нескольких страниц
    #32933528
akula84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to NotGonnaGetUs
Огромное спасибо, действительно, немного исправив прогу, все заработало.

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


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