2013-05-07 44 views
0

我的应用程序中有一个非常简单的打印功能,可以打印Jtextpane的内容。我想将默认页面大小设置为A4,但是在搜索后我发现很多涉及书籍和文档formater等的方法,我希望尽可能简单。打印JTextPane时的简单页面大小设置?

我的代码目前是:

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纸大小,但不知道如何在对的JTextPane的属性.PRINT设置。

感谢您的帮助;

安迪

+0

Can [this](http://stackoverflow.com/questions/13558152/how-can-i-print-a-custom-paper-size-cheques-8-x-4)有帮助吗? – Mateusz 2013-05-07 21:00:59

+0

排序,但我很努力地看到如何在我的代码中使用示例。我希望我可以保持大致相同的代码(如其简单),但用某种纸张大小替换空参数之一? – andy 2013-05-07 21:32:43

回答

1

实际上,在尝试StanislavL提供的链接后,我在Oracle指南中发现了我认为是解决问题的更好方法,我使用的代码是;

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"); 
      } 

} 
} 

希望这可以帮助其他人,不是说其完美的,但它确实工作得很好,默认情况下增加了复式。

2

您可以使用的方法http://java-sl.com/JEditorPanePrinter.html

在那里,你可以传递的PageFormat你需要,你可以指定所需的纸张尺寸/类型。

+0

谢谢,这看起来像我以后的简单解决方案。一旦我尝试一下,我会报告回来。 – andy 2013-05-08 19:03:51