Your perception is correct that using iText your style information would be part of the
Java code (obviously, you could factor style info out into properties that get consulted when the PDF is created, but basically the Java code is where that information is specified).
FOP and iText are often mentioned together because FOP uses iText underneath; but that's completely transparent to FOP users.
FOP makes sense if your data is highly regular (lots of tables), or if you have XML data to begin with. Plus, maintaining XSL-FO stylesheets is a skill one needs to acquire, while iText's API approach should be familiar to every Java developer.