Вы можете использовать либо xsl-fo (если вам нравятся xml и xsl-t), либо Lowagie iText (Java ) / iTextSharp (C #).