The purpose of your factory object is to create PDF objects, that is all it should do.
The activities of looking up data in a database should not be handled by the factory object for creating PDF objects.
Don't forget that there is a client object that is using the factory object, so whatever other operations are needed, e.g. populating
the data fields of a PDF Object, then the client object is most likely where this code belongs, or somewhere else in the application.
One method = one return statement leads to cleaner, understandable code...