Как отправить данные JTable в задание на печать из приложения Java? - PullRequest
2 голосов
/ 26 мая 2011

В моем Приложении у меня есть JTable с данными, и мне нужно добавить кнопку печати, которая добавляет функцию печати данных в таблице на бумаге для принтера (отправить задание на принтер), как это возможно при использовании PrinterJob' учебный класс? Я искал примеры, но не смог найти простой пример, который печатает некоторые данные из JComponent.

Это один из найденных мной сайтов: http://java.sun.com/products/java-media/2D/forDevelopers/sdk12print.html. Но я не уверен, на что нужно обратить внимание, чтобы понять, как работает печать (формат страницы и т. Д.).

Спасибо

Ответы [ 2 ]

3 голосов
/ 26 мая 2011

Я решил проблему, нарисовав всю таблицу на странице принтера, соответственно изменив ее размер и т. Д. Поскольку печать на самом деле рисует только для другого получателя.

@ Сахер, пожалуйста проверьте мой ответ на другой вопрос , где я представляю ссылки, которые были мне полезны для понимания того, как API работает / может применяться.

РЕДАКТИРОВАТЬ:

Пожалуйста, проверьте учебники, особенно нет.2. То, как я это делаю, заключается в том, что у меня есть класс MyPrintUtilityclass, который реализует интерфейс для печати.Его конструктор берет компонент, который я хочу напечатать.Когда он берет компонент, он вычисляет, сколько страниц он займет, и сохраняет конечные точки страницы.Затем у меня есть метод, который я вызываю для этого, который инициализирует диалоговое окно печати. ​​

    public void print()
    {
        PrinterJob printJob = PrinterJob.getPrinterJob();
        if(printJobName != null)
            printJob.setJobName(printJobName);
        printJob.setPrintable(this);    
        if(printJob.printDialog())
            try
            {
                //for faster printing, turn off double buffering
                disableDoubleBuffering(componentToPrint);
                System.out.println("Calling PrintJob.print()");
                printJob.print(new HashPrintRequestAttributeSet());
                System.out.println("End PrintJob.print()");
            }catch(PrinterException pe)
            {
                System.out.println("Error printing: " + pe);
            }finally//whatever happend (exception or not) turn back on the double buffering
            {
                enableDoubleBuffering(componentToPrint);
            }
    }

В методе public int print(Graphics g, PageFormat pf, int pageIndex) интерфейса Printable я перевожу рисунок соответствующим образом, обрезая таблицу для каждой страницы.

Дополнительные ресурсы для проверки:

http://www.java2s.com/Code/Java/2D-Graphics-GUI/PrintinJavaMultipage.htm --- печать на многих страницах

http://download.oracle.com/javase/tutorial/2d/printing/gui.html --- печать компонентов графического интерфейса.

http://www.sideofsoftware.com/print_preview_tutorial.htm --- учебное пособие по предварительному просмотру

http://www.java -tips.org / java-se-tips / java.awt.print / print-the-text-file-and-print-preview-them.html --- фантастический пример предварительного просмотра и печати текстовых файлов.

EDIT2:

Вы должны серьезно прочитать это. Здесь автор объясняет, как работает разбиение на многие страницы и как перевести графику, переместить клип и т. Д.

2 голосов
/ 26 мая 2011

хммм,

сегодня Java6 Oracle обучает о печати http://download.oracle.com/javase/tutorial/2d/printing/index.html содержит http://download.oracle.com/javase/7/docs/api/javax/swing/JTable.html#print%28%29, который описан в Учебное пособие по JTable , включая Примеры выполнения , тогда вы должны искать (и на этом форуме) правильные Печать страниц и ориентаций

например

PrintRequestAttributeSet set = new HashPrintRequestAttributeSet();
set.add(OrientationRequested.LANDSCAPE);
resultFxTable.print(JTable.PrintMode.FIT_WIDTH, header, footer, false, set, false);

примечание: я не уверен, чтовозможно правильно установить Font, FontSize и FOntColor для PrintHeader и PrintFooter для печати JTable

...