2011-06-13 34 views
1

M使用下面的代碼進行打印,但如果我的文本文件中有一些長行,它們會在打印時從邊上切下。我做錯了什麼?Prinitng文本文件問題?文本文件的長行從側面切斷?

import java.io.FileInputStream; 
    import java.io.FileNotFoundException; 

    import javax.print.Doc; 
    import javax.print.DocFlavor; 
    import javax.print.DocPrintJob; 
    import javax.print.PrintException; 
    import javax.print.PrintService; 
    import javax.print.PrintServiceLookup; 
    import javax.print.SimpleDoc; 
    import javax.print.attribute.HashPrintRequestAttributeSet; 
    import javax.print.attribute.PrintRequestAttributeSet; 
    import javax.print.attribute.standard.Copies; 
    import javax.print.attribute.standard.MediaSizeName; 
    import javax.print.attribute.standard.OrientationRequested; 

    public class PrintFileWithSpec { 

     public static void printFile(String filename,String printerindx){ 

     FileInputStream psStream=null; 
     int Printerinx=Integer.parseInt(printerindx); 
     try { 
      psStream = new FileInputStream(filename); 
     } catch (FileNotFoundException ffne) {} 
     if (psStream == null) { 
      return; 
     } 
     DocFlavor psInFormat = null; 

     int index=filename.lastIndexOf("."); 
     String extension=filename.substring(index+1); 

     if(extension.equals("txt"))//||extension.equals("log")||extension.equals("xml")||extension.equals("htm")||extension.equals("html")) 
     psInFormat = DocFlavor.INPUT_STREAM.AUTOSENSE; 

     else if(extension.equals("jpg")) 
      psInFormat = DocFlavor.INPUT_STREAM.JPEG; 

     else if(extension.equals("png")) 
      psInFormat = DocFlavor.INPUT_STREAM.PNG; 

     else if(extension.equals("gif")) 
      psInFormat = DocFlavor.INPUT_STREAM.GIF; 


     Doc myDoc = new SimpleDoc(psStream, psInFormat, null); 
     PrintRequestAttributeSet aset = 
      new HashPrintRequestAttributeSet(); 
     aset.add(new Copies(1)); 
     aset.add(MediaSizeName.ISO_A4); 

     //aset.add(Sides.DUPLEX); 
     aset.add(OrientationRequested.PORTRAIT); 
     PrintService[] services = 
     PrintServiceLookup.lookupPrintServices(psInFormat, null); 
     System.out.println("Printer Selected "+services[Printerinx]); 

     //PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService(); 

     DocFlavor[] docFalvor = services[Printerinx].getSupportedDocFlavors(); 
     for (int i = 0; i < docFalvor.length; i++) { 
      System.out.println(docFalvor[i].getMimeType()); 
     } 
     if (services.length > 0) { 
      DocPrintJob job = services[Printerinx].createPrintJob(); 
     try 
      { 
      job.print(myDoc, aset);  
       System.out.print("Printing Doc");  
      } catch (PrintException pe) 
      {   
       System.out.print(pe);   
      } 
     } 
     } 
     public static void main(String [] args) 
     {  
      printFile("D:/testStream.txt","3"); 
     } 
    } 
+0

你解決了嗎? – 2014-09-05 10:43:39

回答

1

你必須自己處理文本文件的換行。該javadoc for DocFlavor說:

此外,每個Java Print Service實例必須滿足對處理純文本打印數據這些要求:

  • 的字符對回車換行符(CR-LF)意味着「去到下一行的第1列「。
  • 回車(CR)字符本身意味着「轉到下一行的第1列」。
  • 換行(CR)字符本身意味着「轉到下一行的第1列」。 *

客戶端必須自己執行所有純文本打印數據格式不符合上述要求。