title: Printing plain text files to PDF printer using javax.print results in an empty file
body: <p>I need to create a pdf file from plain text files. I supposed that the simplest method would be read these files and print them to a PDF printer.
  My problem is that if I print to a pdf printer, the result will be an empty pdf file. If I print to Microsoft XPS Document Writer, the file is created in plain text format, not in oxps format.
  I would be satisfied with a two or three step solution. (Eg. converting to xps first then to pdf using ghostscript, or something similar). 
  I have tried a couple of pdf printers such as: CutePDF, Microsoft PDF writer, Bullzip PDF. The result is the same for each one.</p>
  
  <p>The environment is Java 1.7/1.8 Win10</p>
  
  <pre><code>private void print() {
  
      try {
          DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PRINTABLE;
  
          PrintRequestAttributeSet patts = new HashPrintRequestAttributeSet();                   
          PrintService[] ps = PrintServiceLookup.lookupPrintServices(flavor, patts);
          if (ps.length == 0) {
              throw new IllegalStateException("No Printer found");
          }
          System.out.println("Available printers: " + Arrays.asList(ps));
          PrintService myService = null;
          for (PrintService printService : ps) {
              if (printService.getName().equals("Microsoft XPS Document Writer")) { // 
                  myService = printService;
                  break;
              }
          }
          if (myService == null) {
              throw new IllegalStateException("Printer not found");
          }
  
          myService.getSupportedDocFlavors();
          DocPrintJob job = myService.createPrintJob();
  
  
     FileInputStream fis1 = new FileInputStream("o:\\k\\t1.txt");
  
          Doc pdfDoc = new SimpleDoc(fis1, DocFlavor.INPUT_STREAM.AUTOSENSE, null);
  
          HashPrintRequestAttributeSet pr = new HashPrintRequestAttributeSet();
          pr.add(OrientationRequested.PORTRAIT);
          pr.add(new Copies(1));
          pr.add(MediaSizeName.ISO_A4);
          PrintJobWatcher pjw = new PrintJobWatcher(job);
          job.print(pdfDoc, pr);
          pjw.waitForDone();
          fis1.close();
  
      } catch (PrintException ex) {
          Logger.getLogger(Docparser.class.getName()).log(Level.SEVERE, null, ex);
      } catch (Exception ex) {
          Logger.getLogger(Docparser.class.getName()).log(Level.SEVERE, null, ex);
      }
  }
  
  
  class PrintJobWatcher {
  
      boolean done = false;
  
      PrintJobWatcher(DocPrintJob job) {
          job.addPrintJobListener(new PrintJobAdapter() {
              public void printJobCanceled(PrintJobEvent pje) {
                  allDone();
              }
  
              public void printJobCompleted(PrintJobEvent pje) {
                  allDone();
              }
  
              public void printJobFailed(PrintJobEvent pje) {
                  allDone();
              }
  
              public void printJobNoMoreEvents(PrintJobEvent pje) {
                  allDone();
              }
  
              void allDone() {
                  synchronized (PrintJobWatcher.this) {
                      done = true;
                      System.out.println("Printing done ...");
                      PrintJobWatcher.this.notify();
                  }
              }
          });
      }
  
      public synchronized void waitForDone() {
          try {
              while (!done) {
                  wait();
              }
          } catch (InterruptedException e) {
          }
      }
  }
  </code></pre>