Java печать изображения 90x20 мм с Epson TM-C3500 не работает - PullRequest
0 голосов
/ 09 марта 2020

Так как я разрабатываю приложение с использованием 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 очень запутанно

1 Ответ

0 голосов
/ 13 марта 2020

Поскольку я пробовал много вещей, таких как поиск различных размеров носителя, изменение настроек драйвера, вместо этого использование docPrintJob, ... Я не смог найти правильное рабочее решение. Я решил использовать инструмент командной строки из irfanView и соответствующий файл настроек ini, чтобы распечатать его как правильную метку. Я просто вызвал следующую команду в java, которая отлично работала.

Runtime.getRuntime().exec("C:\Programme\IrfanView\i_view32.exe C:\FileToPrint.png /ini="C:\" /print");

http://www.etcwiki.org/index.php/IrfanView_Command_Line_Options

...