2014-11-20 2 views
1

현재 내 printerjob에 문제가있어 세로 이미지에 효과적이지만 가로 이미지의 경우 이미지의 일부를 자르고 공백으로 채 웁니다. java printerjob landscape white space

이 나에게 주어진 종이와 국경 (종이에 맞게), 내가 같은 행동을 할 필요없이 맞게 세로 사진을 인쇄 할 수 있습니다

PrintService printService = PrintServiceLookup.lookupDefaultPrintService(); 
BufferedImage bufferedImage = ImageIO.read(new File("house.jpg")); 

boolean isLandscape = bufferedImage.getWidth() > bufferedImage.getHeight(); 
PrinterJob printerJob = PrinterJob.getPrinterJob(); 
printerJob.setPrintService(printService); 
printerJob.setCopies(copies); 

PageFormat pageFormat = printerJob.defaultPage(); 
pageFormat.setOrientation(isLandscape ? PageFormat.LANDSCAPE : PageFormat.PORTRAIT); 

Paper paper = new Paper(); 
paper.setSize(pageFormat.getWidth(), pageFormat.getHeight()); 
paper.setImageableArea(0.0, 0.0, paper.getWidth(), paper.getHeight()); 

pageFormat.setPaper(paper); 

printerJob.setPrintable(new Printable(){ 
    @Override 
    public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException{ 
     if (pageIndex == 0) { 
      Graphics2D g2 = (Graphics2D)graphics; 
      double xScale = 1; 
      double xTranslate = 0; 
      double yScale = 1; 
      double yTranslate = 0; 
      double widthScale = (pageFormat.getImageableWidth()/bufferedImage.getWidth()) * xScale; 
      double heightScale = (pageFormat.getImageableHeight()/bufferedImage.getHeight()) * yScale; 

      AffineTransform affineTransform = AffineTransform.getScaleInstance(widthScale, heightScale); 
      affineTransform.translate(xTranslate, yTranslate); 

      g2.drawRenderedImage(bufferedImage, affineTransform); 
      g2.translate((int)pageFormat.getImageableX(), (int)pageFormat.getImageableY()); 

      return PAGE_EXISTS; 
     }else return NO_SUCH_PAGE; 
    } 
}, pageFormat); 

printerJob.print(); 

EDIT 내 코드입니다 풍경 사진은 제발.

이것은 내가 초상화와 풍경 이미지를 시도 할 때 일어나는 일의 예입니다. 그래서 나는 무엇을 의미하는지 봅니다.

풍경 이미지 :

답변