title: JavaFX Printable to Image very pix-elated, but perfect to printer
body: <p>I have a printable object that prints perfectly fine to a printer, but when i print it to an Image, then it is very pixelated?</p>
  
  <p>Here is my code to setup a printer for printing and to an image</p>
  
  <pre><code>private PageFormat setupPrinter() {
      // sizing (standard is 72dpi, so multiple inches by this)
      Double height = 4d * 72d;
      Double width = 3d * 72d;
      Double margin = 0.1d * 72d;
  
      // now lets print it
      AttributeSet attributes = new HashAttributeSet();
      attributes.add(new Copies(1));
  
      PrinterJob printJob = PrinterJob.getPrinterJob();
      PageFormat pageFormat = printJob.defaultPage();
  
      // if there are more than 10 items, up the paper size to 6inch. 
      // This will handle up to 24 different items
      if (1 == 2) height = 6d * 72d;
  
      // set page size
      Paper paper = pageFormat.getPaper();
  
      paper.setSize(width, height);
      paper.setImageableArea(margin, margin, width - (margin * 2), height - (margin * 2));
  
      // set orientation and paper
      pageFormat.setOrientation(PageFormat.PORTRAIT);
      pageFormat.setPaper(paper);
  
      return pageFormat;
  }
  
  private void printToImage() {
  
      MyPrintable myPrintable = new MyPrintable();
  
      // setup our printer
      PageFormat pageFormat = setupPrinter();
  
      // set size of imageView, using the hieght and width values
      double imageHeight = pageFormat.getHeight();
      double imageWidth = pageFormat.getWidth();
  
      // create our image/graphics
      BufferedImage image = new BufferedImage((int)imageWidth, (int)imageHeight, BufferedImage.TYPE_INT_ARGB);
      Graphics graphics = image.getGraphics();
  
      // color background white
      graphics.setColor(Color.WHITE);
      ((Graphics2D) graphics).fill(new Rectangle.Float(0, 0, (float)imageWidth, (float)imageHeight));
  
      // directly call our print method, passing graphics, pageFormat and pageIndex
      try {
          myPrintable.print(graphics, pageFormat, 0);
      } catch (PrinterException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
      }
  
      graphics.dispose();
  
      // set our image
      imgReport.setImage(SwingFXUtils.toFXImage(image, null));
  
      // now lets show the preview pane
      reportPane.setVisible(true);
  }
  
  public void printToPrinter(ActionEvent event) {
      PrinterJob printJob = PrinterJob.getPrinterJob();
      PageFormat pageFormat = setupPrinter();
  
      printJob.setPrintable(new MyPrintable(), pageFormat);
  
      try {
          printJob.print();
      } catch (Exception e) {
          e.printStackTrace();    
      }
  
  }
  
  public MyPrintable() {
      public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {
          if (pageIndex &gt; 0) {
              return NO_SUCH_PAGE;
          }
  
          // user (0,0) is typically outside the imageable area, so we must translate
          // by the X and Y values in the pageFormat to avoid clipping
          Graphics2D g2d = (Graphics2D) graphics;
          g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
  
          // add text etc here
          ........
      }
  }
  </code></pre>
  
  <p>Here is an example of how pixelated it is.  Bit it fits in the image perfectly....</p>
  
  <p><img src="https://i.stack.imgur.com/eARtk.gif" alt="enter image description here"></p>