I am currently using PDF Sharp in .NET to generate PDF documents which heavily use direct drawing methods to generate the output due to the format of these types of documents. This is an efficient format that creates vector based documents which are very small yet highly detailed.
I now have a need to do the exact same thing in Java. I have used iText in the past but found it restrictive and had to embed images which made the document very large and didn't scale well.
In iText too you can use direct drawing. You can use iText APIs or even awt API on the graphic device. Example of drawing a line:
PdfContentByte cb = writer.getDirectContentUnder();
cb.saveState();
cb.setLineWidth(1.2);
cb.setColor(BaseColor.DARK_GRAY);
cb.moveTo(x, y);
cb.lineTo(x + width, y);
cb.stroke();
cb.restoreState();