как напечатать несколько этикеток при правильном выравнивании по рулону термопринтером - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь напечатать QR-коды на этикетках, используя термопринтер pos80 из проекта java, используя собственный API печати awt, вот как выглядит результат.

Пожалуйста, помогите мне, как решить эту проблему и напечатать QR-коды в центре этикетки один за другим.

Я использую javac 1.8.0_101, netbeans11.0 , qrgen4 для генерации QR-кодов.

results are shown in snapshot

Код, который я использовал для считывания изображения QR-кода из dir и печати через awt, выглядит следующим образом:

    public class PrinterService implements Printable {

    private PrinterJob printerJob;
    private PageFormat pageFormat;
    private Paper paper;
    private final int MARGIN = 1;

    public PrinterService() {
        printerJob = PrinterJob.getPrinterJob();
        pageFormat = printerJob.defaultPage(); // Getting the page format.
        paper = new Paper(); // Create a new paper...

        paper.setImageableArea(MARGIN, MARGIN, pageFormat.getWidth(), pageFormat.getHeight());
        pageFormat.setPaper(paper);
        pageFormat.setOrientation(PageFormat.PORTRAIT);
        printerJob.setPrintable(this, pageFormat);
        try {
            printerJob.print();
        } catch (PrinterException ex) {
            JOptionPane.showMessageDialog(null, "Printing Failed, Error: " + ex.toString());
        }
    }

    @Override
    public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {
        if (pageIndex > 0) {
            return NO_SUCH_PAGE;
        }

        float marginTop = (float) 70.83;
        Graphics2D g2d = (Graphics2D) graphics;
        ImageIcon imageIcon = new ImageIcon("qrcode75b75.gif");
        Image image = imageIcon.getImage();
        g2d.drawImage(image, 20, (int) (marginTop + 10), imageIcon.getImageObserver());
        g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
        return PAGE_EXISTS;
    }

}
...