Простая настройка размера страницы при печати JTextPane?

У меня есть очень простая функция печати в моем приложении, которая печатает содержимое Jtextpane. Я хочу установить размер страницы по умолчанию на A4, но после поиска я нашел множество способов, которые включают форматирование книг и документов и т. Д., Я хочу, чтобы это было как можно проще.

Мой код в настоящее время:

public void printy(){
    JTextPane jtp = new JTextPane();
    jtp.setBackground(Color.white);
     try {
            //  open the file we have just decrypted

                File myFile = new File(deletefile + "mx.txt");
                FileInputStream fIn = new FileInputStream(myFile);
                BufferedReader myReader = new BufferedReader(
                        new InputStreamReader(fIn));
                String aDataRow = "";
                String aBuffer = "";
                while ((aDataRow = myReader.readLine()) != null) {
                    aBuffer += aDataRow + "\n";
                }   

                String[] splitdata = aBuffer.split("`"); //recover the file and split it based on `
             String lines = "";
            for(String line : splitdata){
            lines = lines + line + System.getProperty("line.separator") + System.getProperty("line.separator");
            }

                myReader.close();

                System.out.println(Arrays.toString(splitdata));
                System.out.println(lines);

                jtp.setText(lines);
                boolean show = true;
                try {
                    //set the header and footer data here
                    MessageFormat headerFormat = new MessageFormat("HEADER HERE");
                    MessageFormat footerFormat = new MessageFormat("FOOTER HERE");
                    Paper A4 = new Paper();
                    A4.setSize(595, 842);
                    A4.setImageableArea(43, 43, 509, 756);


                    jtp.print(headerFormat, footerFormat, show, null, null, show);


                } catch (java.awt.print.PrinterException ex) {
                    ex.printStackTrace();
                }
            } catch (Exception ez) {
                System.out.println("error in array building");
            }
}
}

Я установил размер бумаги A4, но не знаю, как установить его в атрибутах .print для JtextPane.

Спасибо за помощь;

Энди


person andy    schedule 07.05.2013    source источник
comment
Может это помочь?   -  person Mateusz    schedule 08.05.2013
comment
Вроде того, но я изо всех сил пытаюсь понять, как использовать пример в моем коде. Я надеялся, что смогу сохранить в основном тот же код (поскольку он простой), но заменить один из нулевых параметров каким-то размером бумаги?   -  person andy    schedule 08.05.2013


Ответы (2)


Вы можете использовать подход http://java-sl.com/JEditorPanePrinter.html

Там вы можете передать нужный вам PageFormat, где вы можете указать желаемый размер / тип бумаги.

person StanislavL    schedule 08.05.2013
comment
Спасибо, это похоже на простое решение, которое мне нужно. Я сообщу, как только попробую. - person andy; 08.05.2013

На самом деле, попробовав ссылку, предоставленную StanislavL, я нашел в руководствах по оракулу то, что я считаю лучшим способом решения моей проблемы, код, с которым я пошел, был;

public void printy(){
    JTextPane jtp = new JTextPane();
    jtp.setBackground(Color.white);
     try {
            //  open the file we have just decrypted

                File myFile = new File(deletefile + "mx.txt");
                FileInputStream fIn = new FileInputStream(myFile);
                BufferedReader myReader = new BufferedReader(
                        new InputStreamReader(fIn));
                String aDataRow = "";
                String aBuffer = "";
                while ((aDataRow = myReader.readLine()) != null) {
                    aBuffer += aDataRow + "\n";
                }   

                String[] splitdata = aBuffer.split("`"); //recover the file and split it based on `
             String lines = "";
            for(String line : splitdata){
            lines = lines + line + System.getProperty("line.separator") + System.getProperty("line.separator");
            }

                myReader.close();

                System.out.println(Arrays.toString(splitdata));
                System.out.println(lines);

                jtp.setText(lines);
                boolean show = true;
                try {
                    //set the header and footer data here
                    MessageFormat headerFormat = new MessageFormat("Your header here - {0}");  //sets the page number
                    MessageFormat footerFormat = new MessageFormat("Your footer here");

                    PrintRequestAttributeSet attr_set = new HashPrintRequestAttributeSet();
                    attr_set.add(MediaSizeName.ISO_A4);
                    attr_set.add(Sides.DUPLEX);

                    jtp.print(headerFormat, footerFormat, show, null, attr_set, show);


                } catch (java.awt.print.PrinterException ex) {
                    ex.printStackTrace();
                }

            } catch (Exception ez) {
                System.out.println("error in array building");
            }

}
}

Надеюсь, это поможет кому-то еще, не говоря о том, что это идеально, но работает хорошо и по умолчанию добавляет дуплекс.

person andy    schedule 13.05.2013