Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Увеличение разрешения при печати, Java printable 
:(
    Опции темы
sergejzr
  Дата 22.4.2004, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 6
Всего: 360



Доброе время суток! Pебята, y меня тут возникла проблема.
  • Рисую на панельке диаграму Смита (там круги всякие, но это не важно).
  • Перед распечаткой масштабирую картинку (увеличиваю в 5 раз).
  • Так вот при попытке распечатать на принтер уходит разрешение 1:1. То есть печатается только часть картинки. Круги естественно все в ступеньках.
Пока решил проблему так:
Сохраняю GIF 5000*5000, потом в Corele или Paint Shop'e открываю и вывожу на принтер. Распечатывается замечательно!

Должен же быть какой нибудь мечанизм в Яве, что бы делать распечатку так же, как в Paint Shop'e..



--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
AntonSaburov
Дата 22.4.2004, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



А ты код печати не дашь ? Я, честно говоря, печатью никогда не занимался (ну вот как-то не удалось). Но повозиться было бы интересно. Если же сам найдешь какое-то решение - опубликуй по возможности.
Очень интересно посмотреть. Если я чего-то найду - обязательно скажу.
PM MAIL WWW ICQ   Вверх
sergejzr
Дата 22.4.2004, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 6
Всего: 360



2AntonSaburov
Вот постарался оставить только самое важное для принта.
В общем, если хочешь печатать, можно использовать весь "скелет" как есть.
Для адаптации: в комментаре написано, где менять.

Цитата

import javax.swing.*;
import java.awt.print.*;
import java.awt.event.*;
import java.awt.*;

public class GUJ extends JFrame
{
PrintableDiagramm diagramm=new PrintableDiagramm();
private JMenuItem printMenu=new JMenuItem("Print");
private JMenu file=new JMenu("File");
private JMenuBar menu=new JMenuBar();

public GUJ()
{
  super();
  file.add(printMenu);
  menu.add(file);
  this.setJMenuBar(menu);

  printMenu.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent e)
        {
    PrinterJob  pjob = PrinterJob.getPrinterJob();
 
                PageFormat  pf  = pjob.defaultPage();
                pjob.setPrintable(diagramm,pf);
                if(pjob.printDialog()==true) // PrinterDialog not cancelled               
              {
                  try
      {
                  pjob.print();
              }
                  catch ( PrinterException pe )
                  {
                          System.out.println("PrinterException!***");
                  }
              }
 
          }
        });
}   
}

class PrintableDiagramm extends  JPanel implements Printable
{
public int print(Graphics g, PageFormat pf, int pageIndex)
  {
  if ( pageIndex > 0 ) return Printable.NO_SUCH_PAGE;
 
      Graphics2D g2d = (Graphics2D) g;
      g2d.translate(pf.getImageableX(),pf.getImageableY());
//рисуем с g2d как с нормальным графиксом. Что нарисуем, что и напечатается 1:1.
//В этом случае я выбрал распечатку всей панели, как на экране.

  paint(g2d);
 
      return Printable.PAGE_EXISTS; 
  }
}



--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
AntonSaburov
Дата 23.4.2004, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Ок. Спасибо. Если что-то получится - обязательно напишу.
PM MAIL WWW ICQ   Вверх
sergejzr
Дата 23.4.2004, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 6
Всего: 360



Нашёл!
Проблема была в том, что искал не то.

Значит так:
ПЕРЕД тем, как рисовать в графикс принтера, мы скалируем сам графикс.

Цитата

public int print(Graphics g, PageFormat pf, int pageIndex)
  {
  if ( pageIndex > 0 ) return Printable.NO_SUCH_PAGE;
 
      Graphics2D g2d = (Graphics2D) g;
      g2d.translate(pf.getImageableX(),pf.getImageableY());
 
      /*
        вот тут скалируем. на N причём
                  0<N<1 увеличиваем разрешение
                    N>1 уменьшаем разрешение.
    */

      g2d.scale(0.25,0.25) ;

    //теперь просто рисуем на графиксе, который в 4 раза больше.
      paint(g2d);
 
      return Printable.PAGE_EXISTS; 
  }




Добавлено @ 14:43
AntonSaburov
Спасибо тебе!
Просто когда я стал заново перебирать печать, появились кое какие мысли. Иногда всё же стоит проработать задачу с нуля biggrin.gif biggrin.gif biggrin.gif .




--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
AntonSaburov
Дата 23.4.2004, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



ЗДОРОВО !!! Молодец

Если есть такая возможность - ты не мог бы подготовить маленький примерчик (работающий), чтобы можно было это отправить в FAQ. Это просто классно. Если нет времени, то я постараюсь сам. Буду крайне признателен.
PM MAIL WWW ICQ   Вверх
sergejzr
Дата 23.4.2004, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 6
Всего: 360



Постараюсь за выходные...


26.04.2004
2AntonSaburov
Чего-то сваял smile.gif послал тебе на приват для экспертизы biggrin.gif biggrin.gif biggrin.gif

Это сообщение отредактировал(а) sergej.z - 26.4.2004, 19:29


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0840 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.