В настоящее время у меня проблема с моим принтером, он отлично подходит для портретных изображений, но для пейзажных изображений он отсекает часть изображения и вместо этого заполняет пробел.java printerjob landscape white space
Это мой код
EDIT
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();
Это позволяет мне печатать портретные фотографии, чтобы соответствовать данной бумаге и без границ (подходят к бумаге), мне это нужно делать то же самое для пейзажных фотографий пожалуйста.
Это примеры того, что происходит, когда я пытаюсь создать портретное и ландшафтное изображение, чтобы увидеть, что я имею в виду. Изображения должны всегда соответствовать размеру бумаги и безграничного, который в данном случае является 10x15cm,
я сделал то, что у сказал, заменить GetWidth и getHeight для getImageableWidth и getImageableHeight .... я также добавил строку g2.translate после g2.drawrenderedimage ... если я напечатаю портретное изображение, то это хорошо, но для пейзажа теперь он обрезает изображение еще больше ... он удаляет левый и правый размер изображения и просто позиция части изображение в центре бумаги.См. Edit – anonimoo90
Проверить обновление с помощью запускаемого примера отлично работает для меня – MadProgrammer
спасибо, но он по-прежнему не заполняет бумагу по ландшафту, она режет ландшафтное изображение, левую и правую сторону. Он просто печатает центр изображения – anonimoo90