Я пытаюсь написать программу photobooth, но мне трудно печатать без полей. Я очень близок, но изображение не заполняет печать размером 4 "x 6". Я был бы признателен за любые советы по достижению печати без полей.Печать без полей
Cheers!
final BufferedImage img = ImageIO.read(new File(image));
// Assuming that images are going to be 300 DPI
PrinterResolution pr = new PrinterResolution(300, 300,
PrinterResolution.DPI);
PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
pras.add(pr);
// Set print job so the image name shows (in the print queue)
this.pj.setJobName(new File(image).getName());
PageFormat pf = this.pj.getPageFormat(null);
Paper paper = pf.getPaper();
paper.setSize(4 * 72, 6 * 72);
paper.setImageableArea(
0.0, 0.0,
paper.getWidth(), paper.getHeight()
);
if(img.getWidth(null) > img.getHeight(null))
pf.setOrientation(PageFormat.LANDSCAPE);
else
pf.setOrientation(PageFormat.PORTRAIT);
pf.setPaper(paper);
// Create the page
this.pj.setPrintable(new Printable() {
public int print(Graphics g, PageFormat pf, int i) throws
PrinterException {
if (i != 0)
return NO_SUCH_PAGE;
double width = img.getWidth(null);
double height = img.getHeight(null);
double w = Math.floor(pf.getImageableWidth() -
pf.getImageableX())/(width * 1.0);
double h = Math.floor(pf.getImageableHeight() -
pf.getImageableY())/(height * 1.0);
double scale = Math.min(w, h);
Graphics2D g2 = (Graphics2D) g;
g2.translate(0, 0);
g2.scale(scale, scale);
g2.drawImage(img, 0, 0, (int)width, (int)height, null);
return PAGE_EXISTS;
}
}, this.pj.validatePage(pf));
// Get number of copies
int nCopies = SetPrintQuantity.getPrintQuantity(new File(image));
// Print
if(nCopies != 0)
for(int i = 0; i < nCopies; i++)
this.pj.print(pras);
System.out.println(nCopies + ((nCopies == 1) ? " copy" : " copies"));
this.pj = PrinterJob
Если принтер не поддерживает [full bleed] (http://en.wikipedia.org/wiki/Bleed_%28printing%29), это может быть невозможно. – trashgod
Я не уверен, что принтеры могут выполнять полное удаление, но я знаю, что я могу получать печати без полей, используя функцию печати в Windows Image Viewer. Поэтому я предполагаю, что моя цель - добиться чего-то подобного. – Johnny
У меня такая же ситуация, как на Mac. 'lp' из командной строки не имеет проблем с печатью полного истечения 4x6, но Java ставит огромные поля с каждой стороны, которые, как представляется, не может удалить setImageableArea. –