Печать Java на определенный размер страницы с использованием принтера этикеток
Я пытаюсь использовать принтер этикеток (точнее, EPSON TM-T88V), чтобы выплевывать изображения в формате PNG.
Я могу заставить его печатать нормально, за исключением случаев, когда я печатаю размеры изображения (220x175 при 72dpi, чтобы быть более точным), там есть пачка белого пространства поверх напечатанного изображения, которое я считаю пустой тратой бумаги.
Любые идеи о том, как я могу свести к минимуму бумажные отходы? Я хочу, чтобы он напечатал только изображение, минимальный пробел, а затем обрезал бумагу.
Вот мой код
AttributeSet aset = new HashAttributeSet();
aset.add(new PrinterName(printerName, null));
/* locate a print service that can handle the request */
PrintService[] services = PrintServiceLookup.lookupPrintServices(DocFlavor.INPUT_STREAM.PNG, aset);
if (services.length >= 1) {
/* create a print job for the chosen service */
DocPrintJob pj = services[0].createPrintJob();
DocAttributeSet das = new HashDocAttributeSet();
das.add(PrintQuality.HIGH);
das.add(MediaSizeName.ISO_A7); // I know the problem is here somewhere. This Media size seems to work best currently
try {
/*
* Create a Doc object to hold the print data.
*/
Doc doc = new SimpleDoc(imageByteIs, DocFlavor.INPUT_STREAM.PNG, das);
/* print the doc as specified */
pj.print(doc, null);
} catch (PrintException e) {
System.err.println(e);
}
}
3 ответа
Вы можете найти доступные размеры бумаги через:
PrintService printService = PrintServiceLookup.lookupDefaultPrintService();
Media[] res = (Media[]) printService.getSupportedAttributeValues(Media.class, null, null);
for (Media media : res) {
if (media instanceof MediaSizeName) {
MediaSizeName msn = (MediaSizeName) media;
MediaSize ms = MediaSize.getMediaSizeForName(msn);
float width = ms.getX(MediaSize.INCH);
float height = ms.getY(MediaSize.INCH);
System.out.println(media + ": width = " + width + "; height = " + height);
}
}
Как только вы найдете доступное MediaSizeName, которое наиболее соответствует вашему размеру бумаги, просто добавьте его вместо MediaSizeName.ISO_A7.
Добавьте MediaPrintableArea:
das.add(new MediaPrintableArea(0.05, 0.05, 0.05, 0.05, MediaPrintableArea.INCH));
Это настройки, которые я использую для печати на бумаге формата А4 с полем 10 мм.
int width = Math.round(MediaSize.ISO.A4.getX(MediaSize.MM));
int height = Math.round(MediaSize.ISO.A4.getY(MediaSize.MM));
das.add(new MediaPrintableArea(10, 10, width-20, height-20, MediaPrintableArea.MM));