I have had the same question.
I made a rough test to understand more the drawing process, using and deriving the SDK example.
My first test contains that part:
List<GraphicsInfo> graphicsData = new ArrayList<GraphicsInfo>();
ZebraCardGraphics graphics = new ZebraCardGraphics(zebraCardPrinter); // Initialize graphics for ZXP Series printers
graphics.initialize(0, 0, OrientationType.Landscape, PrintType.MonoK, Color.WHITE);
byte frontSideImageData = FileUtils.readFileToByteArray(new File("C:\\Temp\\image16x9.png"));
graphics.drawImage(frontSideImageData, 100, 100, 790, 500, RotationType.RotateNoneFlipNone);
graphics.drawEllipse(150, 150, 700, 400, 5, Color.BLACK, null);
// graphics.drawRectangle(300, 200, 424, 248, 1, Color.BLACK, null);
graphics.drawText("This is a test", 300, 400, 424, 248, 0, Color.BLACK);
GraphicsInfo grInfo = new GraphicsInfo();
grInfo.graphicData = graphics.createImage();
grInfo.graphicType = GraphicType.BMP;
grInfo.side = CardSide.Front;
grInfo.printType = PrintType.MonoK;
int jobId = zebraCardPrinter.print(1, graphicsData);
This answers partially to your question : how to draw figures and text (but not barcodes).
Notice that trying to draw the rectangle always ends with a broken ribbon, this is why it is commented.