Так как я разрабатываю приложение с использованием java, я хочу, чтобы эта функциональность распечатывала изображение 950x250 png на Epson TM-C3500. Я использую этикетки размером 90x20 мм.
Печать с использованием другого приложения windows идеально помещается на этикетке, но если я сделаю это с моим приложением, я получу очень странные результаты с отпечатками на нескольких этикетках и так далее.
Я перепробовал много вещей, которые нашел на этом сайте, но не смог найти решение. У кого-нибудь есть опыт с этим или знает, как это сделать? Я думаю, что я мог бы масштабировать свой PNG, но я понятия не имею, как.
мой текущий код:
PrintService[] factories = PrinterJob.lookupPrintServices();
AttributeSet aset = new HashAttributeSet();
aset.add(new PrinterName("EPSON TM-C3500 Ver2", null));
PrintService[] pservices =
PrintServiceLookup.lookupPrintServices(null, aset);
PrinterJob printerJob = PrinterJob.getPrinterJob();
printerJob.setPrintService(pservices[0]);
PrintRequestAttributeSet attributeSet = new HashPrintRequestAttributeSet();
attributeSet.add(OrientationRequested.LANDSCAPE);
attributeSet.add(new MediaPrintableArea(0,0,90,20, MediaPrintableArea.MM));
BufferedImage image = ImageIO.read(new File("C:\\Users\\Simon\\Downloads\\Distribib-master\\testprinter\\src\\com\\company\\label (1).png"));
printerJob.setPrintable(new Printable() {
@Override
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {
if (pageIndex !=0) {
return NO_SUCH_PAGE;
}
graphics.drawImage(image,0,0, image.getWidth(),image.getHeight(),null);
return PAGE_EXISTS;
}
});
try {
printerJob.print(attributeSet);
} catch (PrinterException e1) {
e1.printStackTrace();
}
Я пробовал множество вещей. Как перевод изображения в соответствующий размер, выбор поддерживаемого MediaSize, получение его через «getSupportedAttributeValues», попытка изменить pageFormat, ...
Но эти вещи всегда просто пытались, потому что я нашел документацию по печати png очень запутанно