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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> задать пераметры печати, jtextarea print 
:(
    Опции темы
izver84
Дата 16.6.2010, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 5.11.2007

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



Возник вопрос.
пользователь выбирает файл(txt).
содержимое файла высвечивается в  jtextarea(для просмотра).
Код

jButton2.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent e) {            
                
                    open();
                    
                }
            });
******
public void open() {
        JFileChooser fc = new JFileChooser();
        FileFilter jpegFilter = new  ExtensionFileFilter(null, new String[] { "txt" });
        fc.addChoosableFileFilter(jpegFilter);    
        if( fc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
              File f = fc.getSelectedFile();           
              currentFile = f;           
              try{            
                    Reader file_reader =    new InputStreamReader(new FileInputStream( currentFile), "cp866");

                char buffer[] = new char[4096];
                         int len;
                          while ((len = file_reader.read(buffer)) != -1){
                    String s = new String (buffer, 0, len);
                              jTextArea.append(s);
                           }
                    
                       }
                catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
            
        }
        jTextArea.setCaretPosition(1);  
      }

 затем печатают содержимое документа 
делал так
Код

    try {
                        jTextArea.print();
                    } catch (PrinterException e1) {
                        // TODO Автоматически созданный блок catch
                        e1.printStackTrace();
                    }

сейчас стоит задача задать жестко параметры печати.
ориентация landscape
отступы  слева и сверху 10 миллиметров.
формат бумаги А4
как такое сделать?


--------------------
Если новая программа с первого раза компилируется без ошибок, значит, она написана принципиально неправильно. 
PM MAIL   Вверх
izver84
Дата 16.6.2010, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 5.11.2007

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



нашел пример
Код

public class Print2File{

public static void main(String[] args){ 

if (args.length < 1){

System.err.println("Usage: Print2File path"); 

System.exit(0); 

}

PrinterJob pj = PrinterJob.getPrinterJob(); 

PageFormat pf = pj.pageDialog(pj.defaultPage()); 

pj.setPrintable(new FilePagePainter(), pf);

if (pj.printDialog()){ 

try{

pj.print();

}catch(PrinterException e){} 


System.exit(0); 

} 

}

class FilePagePainter implements Printable{ 

private BufferedReader br; 

private String file; 

private int page = -1; 

private boolean eof; 

private String[] line; 

private int numLines;



public FilePagePainter(String file){

this.file = file;

try{

br = new BufferedReader(new FileReader(file));

}catch(IOException e){ eof = true; } 

} 

public int print(Graphics g, PageFormat pf, int ind)

throws PrinterException{

g.setColor(Color.black);

g.setFont(new Font("Serif", Font.PLAIN, 10));

int h = (int)pf.getImageableHeight();

int x = (int)pf.getImageableX() + 10;

int у = (int)pf.getImageableY() + 12;

try{

// Если система печати запросила эту страницу первый раз 

if (ind != page){

if (eof) return Printable.NO_SUCH_PAGE;

page = ind;

line = new String[h/12];           // Массив строк на странице

numLines =0;                       // Число строк на странице

// Читаем строки из файла и формируем массив строк 

while (у + 48 < pf.getImageableY() + h){ 

line[numLines] = br.readLine(); 

if (line[numLines] == null){ 

eof = true; break; }

numLines++; 

у += 12;

}

}

// Размещаем колонтитул 

у = (int)pf.getImageableY() + 12; 

g.drawString("Файл: " + file + ", страница " +

(ind + 1), x, у); 

// Оставляем две пустые строки 

у += 36;

// Размещаем строки текста текущей страницы 

for (int i = 0; i < numLines; i++){ 

g.drawString(line[i], x, у) ; 

у += 12; 

}

return Printable.PAGE_EXISTS; 

}catch(IOException e1){

return Printable.NO_SUCH_PAGE; 

} 

} 

}
}


вопрос
Код

pj.setPrintable(new FilePagePainter(arg[0]), pf);//какой параметр передать?
 


--------------------
Если новая программа с первого раза компилируется без ошибок, значит, она написана принципиально неправильно. 
PM MAIL   Вверх
aleksandy
Дата 17.6.2010, 05:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 260
Регистрация: 17.12.2006

Репутация: 1
Всего: 5



В смысле какой? Судя по 
Цитата(izver84 @  16.6.2010,  19:10 Найти цитируемый пост)
Usage: Print2File path
 это путь к печатаемому файлу.

PM   Вверх
izver84
Дата 17.6.2010, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 5.11.2007

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



вопрос .
усложнили задачу: при нажатии на кнопку выбранный файл сразу печатается на принтере по умолчанию.
условия печати:
ориентация landscape
все отступы   10 миллиметров.
формат бумаги А4.
на листе не более 75 строк(76 строка переходит на следующий лист).
Код

new Font("Courier New", Font.PLAIN,8)

кодировка файла cp866.


Мне послать их или можно как-то решить?


--------------------
Если новая программа с первого раза компилируется без ошибок, значит, она написана принципиально неправильно. 
PM MAIL   Вверх
Su_
Дата 18.6.2010, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 386
Регистрация: 1.8.2007

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



Когда то делал для себя , печать сразу без вызова драйвера принтера ( без job.printDialog(); )
С параметрами заданными в программе , печатать форму которую отображается. 

По идее можно все отображать в JtextPane , там задать интервал, и ограничение на кол-во строк, 
потом вызывать метод , потом следующую страницу и далее.

Код

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.

*/

package Jservers;
import java.awt.*;
import javax.swing.*;
import java.awt.print.*;
import javax.print.attribute.DocAttributeSet;
import javax.print.attribute.HashDocAttributeSet;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.Copies;
import javax.print.attribute.standard.MediaPrintableArea;
import javax.print.attribute.standard.MediaSizeName;
import javax.print.attribute.standard.OrientationRequested;
import javax.print.attribute.standard.PrintQuality;

public class PrintUIWindow implements Printable, Runnable  {

    JFrame frameToPrint;
Thread t;


    public void run()
    {
     System.out.println("Try to print");
      startPrint();
    }

    public int print(Graphics g, PageFormat pf, int page) throws
                                                        PrinterException {

        if (page > 0) {
            return NO_SUCH_PAGE;
        }

        //User (0,0) is typically outside the imageable area, so we must
        // translate by the X and Y values in the PageFormat to avoid clipping
        Graphics2D g2d = (Graphics2D)g;
        g2d.translate(pf.getImageableX(), pf.getImageableY());

        /* Now print the window and its visible contents */
        frameToPrint.printAll(g);

        /* tell the caller that this page is part of the printed document */
        return PAGE_EXISTS;
    }

    public void startPrint() {
         PrinterJob job = PrinterJob.getPrinterJob();
         job.setPrintable(this);
       DocAttributeSet docAttributes=new HashDocAttributeSet();
    docAttributes.add(OrientationRequested.LANDSCAPE);
    PrintRequestAttributeSet printAttributes=new HashPrintRequestAttributeSet();
    printAttributes.add(new Copies(1));
        printAttributes.add(OrientationRequested.LANDSCAPE);
        printAttributes.add(PrintQuality.DRAFT);
        printAttributes.add(new MediaPrintableArea(
      0,                  // отсуп слева
      0,                  // отсуп сверху
      600, // ширина
      600, // высота
      MediaPrintableArea.MM));
      printAttributes.add(MediaSizeName.ISO_A4);

      //   boolean ok = job.printDialog();
      boolean ok;
      ok=true;
         if (ok) {
             try {
                  job.print(printAttributes);
             } catch (PrinterException ex) {
              /* The job did not successfully complete */
             }
         }
    }

    public PrintUIWindow(JFrame f) {
        frameToPrint = f;
        t=new Thread(this,"Prints");
        t.start();
    }
   
}


кнопка печати
Код

PrintService printService= PrintServiceLookup.lookupDefaultPrintService();
        info_print.setText(""+printService.getName());
   PrintUIWindow pr=new PrintUIWindow(this);


Это сообщение отредактировал(а) Su_ - 18.6.2010, 16:31


--------------------
user posted image

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

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

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


 




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


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

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