Printing in Java to Label Printer

enter image description here

    #After a long hour of analysis found 100% solution     
    
    
    
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.math.BigInteger;
    
    import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
    import org.apache.poi.util.Units;
    import org.apache.poi.xwpf.usermodel.XWPFDocument;
    import org.apache.poi.xwpf.usermodel.XWPFParagraph;
    import org.apache.poi.xwpf.usermodel.XWPFRun;
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBody;
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTDocument1;
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPageMar;
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPageSz;
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSectPr;
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.STPageOrientation;
    
    public class CreateWord {
        public static void main(String[] args) throws FileNotFoundException, IOException {
            XWPFDocument doc = new XWPFDocument();
    
            CTDocument1 document = doc.getDocument();
            CTBody body = document.getBody();
    
            if (!body.isSetSectPr()) {
                body.addNewSectPr();
            }
            CTSectPr section = body.getSectPr();
    
            if (!section.isSetPgSz()) {
                section.addNewPgSz();
            }
    
            if (!section.isSetPgMar()) {
                CTPageMar margin = section.addNewPgMar();
                margin.setTop(BigInteger.valueOf(500));
                margin.setBottom(BigInteger.valueOf(100));
                margin.setLeft(BigInteger.valueOf(0));
                margin.setRight(BigInteger.valueOf(0));
            }
            CTPageSz pageSize = section.getPgSz();
    
            pageSize.setOrient(STPageOrientation.LANDSCAPE);
            pageSize.setW(BigInteger.valueOf(6000));
            pageSize.setH(BigInteger.valueOf(2000));
    
            XWPFParagraph title = doc.createParagraph();
            XWPFRun run = title.createRun();
            // run.setText("Fig.1 A Natural Scene");
            // run.setBold(true);
            // title.setAlignment(ParagraphAlignment.CENTER);
    
            String imgFile = "E:\\barcode.png";
            FileInputStream is = new FileInputStream(imgFile);
            // run.addBreak();
            try {
                run.addPicture(is, XWPFDocument.PICTURE_TYPE_JPEG, imgFile, Units.toEMU(300), Units.toEMU(70));
            } catch (InvalidFormatException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } // 200x200
                // pixels
            is.close();
    
            FileOutputStream fos = new FileOutputStream("E:\\test4.docx");
            doc.write(fos);
            fos.close();
        }
    }


  [1]: https://i.stack.imgur.com/VA0IL.png
  [2]: https://i.stack.imgur.com/9aSv4.png

Wow, I can't tell you how much I love printing in Java, when it works, it's great...

.

public class PrinterTest {

    public static void main(String[] args) {

        PrinterJob pj = PrinterJob.getPrinterJob();
        if (pj.printDialog()) {
            PageFormat pf = pj.defaultPage();
            Paper paper = pf.getPaper();    
            double width = fromCMToPPI(3.5);
            double height = fromCMToPPI(8.8);    
            paper.setSize(width, height);
            paper.setImageableArea(
                            fromCMToPPI(0.25), 
                            fromCMToPPI(0.5), 
                            width - fromCMToPPI(0.35), 
                            height - fromCMToPPI(1));                
            System.out.println("Before- " + dump(paper));    
            pf.setOrientation(PageFormat.PORTRAIT);
            pf.setPaper(paper);    
            System.out.println("After- " + dump(paper));
            System.out.println("After- " + dump(pf));                
            dump(pf);    
            PageFormat validatePage = pj.validatePage(pf);
            System.out.println("Valid- " + dump(validatePage));                
            //Book book = new Book();
            //book.append(new MyPrintable(), pf);
            //pj.setPageable(book);    
            pj.setPrintable(new MyPrintable(), pf);
            try {
                pj.print();
            } catch (PrinterException ex) {
                ex.printStackTrace();
            }    
        }    
    }

    protected static double fromCMToPPI(double cm) {            
        return toPPI(cm * 0.393700787);            
    }

    protected static double toPPI(double inch) {            
        return inch * 72d;            
    }

    protected static String dump(Paper paper) {            
        StringBuilder sb = new StringBuilder(64);
        sb.append(paper.getWidth()).append("x").append(paper.getHeight())
           .append("/").append(paper.getImageableX()).append("x").
           append(paper.getImageableY()).append(" - ").append(paper
       .getImageableWidth()).append("x").append(paper.getImageableHeight());            
        return sb.toString();            
    }

    protected static String dump(PageFormat pf) {    
        Paper paper = pf.getPaper();            
        return dump(paper);    
    }

    public static class MyPrintable implements Printable {

        @Override
        public int print(Graphics graphics, PageFormat pageFormat, 
            int pageIndex) throws PrinterException {    
            System.out.println(pageIndex);                
            int result = NO_SUCH_PAGE;    
            if (pageIndex < 2) {                    
                Graphics2D g2d = (Graphics2D) graphics;                    
                System.out.println("[Print] " + dump(pageFormat));                    
                double width = pageFormat.getImageableWidth();
                double height = pageFormat.getImageableHeight();    
                g2d.translate((int) pageFormat.getImageableX(), 
                    (int) pageFormat.getImageableY());                    
                g2d.draw(new Rectangle2D.Double(1, 1, width - 1, height - 1));                    
                FontMetrics fm = g2d.getFontMetrics();
                g2d.drawString("0x0", 0, fm.getAscent());    
                result = PAGE_EXISTS;    
            }    
            return result;    
        }
    }
}

I'm aware of a number of inconsistencies with the PrintDialog doing werid and wonderful things if you try and specify Paper sizes and margins, but honestly, that's a question for another day.

The code I've posted was capable for printing two labels one after the other without issue on my Dymo LabelWriter 400 Turbo

UPDATED Should also mention, I think you were basically missing PageFormat.setPaper

UPDATED with Barbaque BarCode

Print from file example...

Barcode b = BarcodeFactory.createCode128("Hello");
b.setResolution(72);

File f = new File("mybarcode.png");
// Let the barcode image handler do the hard work
BarcodeImageHandler.savePNG(b, f);

.
.
.

public static class PrintFromFile implements Printable {

    @Override
    public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {

        int result = NO_SUCH_PAGE;
        if (pageIndex == 0) {

            graphics.translate((int)pageFormat.getImageableX(), (int)pageFormat.getImageableY());

            result = PAGE_EXISTS;

            try {

                // You may want to rescale the image to better fit the label??
                BufferedImage read = ImageIO.read(new File("mybarcode.png"));
                graphics.drawImage(read, 0, 0, null);

            } catch (IOException ex) {

                ex.printStackTrace();

            }

        }

        return result;

    }

}

Printing direct to the Graphics context

Barcode b = BarcodeFactory.createCode128("Hello");
b.setResolution(72);

.
.
.

public static class PrintToGraphics implements Printable {

    private Barcode b;

    private PrintToGraphics(Barcode b) {

        this.b = b;

    }

    @Override
    public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {

        int result = NO_SUCH_PAGE;
        if (pageIndex == 0) {

            result = PAGE_EXISTS;

            int x = (int)pageFormat.getImageableX();
            int y = (int)pageFormat.getImageableY();

            int width = (int)pageFormat.getImageableWidth();
            int height = (int)pageFormat.getImageableHeight();

            graphics.translate(x, y);
            try {
                b.draw((Graphics2D)graphics, 0, 0);
            } catch (OutputException ex) {

                ex.printStackTrace();

            }

        }

        return result;

    }

}

Last but not least, directly from the "examples" directory of the download

public class PrintingExample
{

    public static void main(String[] args)
    {
        try
        {
            Barcode b = BarcodeFactory.createCode128("Hello");
            PrinterJob job = PrinterJob.getPrinterJob();
            job.setPrintable(b);
            if (job.printDialog())
            {
                job.print();
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }

    }

}