Важность текстового вопроса: длинные строки текстового файла обрезаются сбоку? - PullRequest
1 голос
/ 13 июня 2011

M, используя следующий код для печати, но если в моем текстовом файле есть длинные строки, они обрезаются по бокам во время печати. ​​Что я делаю не так?

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

1 Ответ

1 голос
/ 13 июня 2011

Вы должны самостоятельно справиться с переносом строк текстовых файлов. javadoc для DocFlavor говорит:

Кроме того, каждый экземпляр службы печати Java должен удовлетворять этим требованиям для обработки данных печати в обычном тексте:

  • Перевод строки перевода строки (CR-LF) пары символов означает «перейти к столбцу 1 следующей строки».
  • Символ возврата каретки (CR), стоящий сам по себе, означает «перейти к столбцу 1 следующегоline. "
  • Символ перевода строки (CR), стоящий сам по себе, означает" перейти к столбцу 1 следующей строки ".*

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...