Crear un PDF en Java utilizando la librería itext.jar, es gratis y se puede descargar en Itexdocs, cuyo manual está en Tutorial Itexdocs, puede ser muy útil cuando se requiere que en una aplicación web, el cliente reciba la respuesta en formato PDF al vuelo o en archivo, y escrupulosamente paginado del tipo página x de y, esto se logra programando metodos del tipo evento, por ejemplo cuando un documento es abierto (onOpenDocument), una página empieza (onStartPage), cuando una pagina termina (onEndPage), cuando se cierra el documento (onCloseDocument), Etc., estos métodos se programan y se ejecutan automáticamente siempre y cuando se extienda la clase en la que se encuentran a PdfPageEventHelper, de esta manera cuando ocurra un evento sucedera lo que se le programe a ese evento, pero para poner la paginación x de y, el valor de y lo sabremos al final cuando ya se va a cerrar el documento ó por programación se sabe, pero para poner en todas las páginas del documento el valor de y es una forma poner un lienzo (tipo Template) ese lienzo estará en blanco en el lugar de y, es como una variable que al final recibirá un valor y se pintará en todos lados del PDF donde lo pongamos, de esta manera ya cuando se sepa el valor de y se le asigna, este aparece pintado en el lienzo, ejemplo básico es el siguiente: