Когда-то занимался этим вопросом. Стоит посмотреть какие есть сейчас бесплатные библиотеки.
iTextSharp уже назвали
NFop — XSL-FO процессор, порт FOP с Java
Также стоит учитывать такую вещь: если вам понадобится подписывать (шифровать) PDF — эта функция лицензируется у Adobe, поэтому бесплатные библиотеки в принципе такую функциональность обеспечить НЕ смогут.