Recientemente me enfrenté al siguiente problema: Tenía un documento PDF creado uniendo varios otros documentos, varios de ellos de varias páginas. Yo necesitaba mostrar los números de página. ¡LaTeX y pdftk al rescate!
El Problema
Yo necesitaba generar un PDF uniendo varios documentos de diferentes fuentes, lo que resultó en un archivo de 57 páginas. Después, necesitaba mostrar el número de página como “Folio x/57”, donde “x” representaba el número de la página actual.
La Solución
Mi plan para resolver este problema es de dos pasos:
- Generar un nuevo PDF sólo con los encabezados (“Folio x/57”) en cada página.
- Combinar este documento con el original, de tal forma que los encabezados quedaran sobrepuestos.
Generando un PDF Sólo con Números de Página
Yo necesitaba crear 57 páginas mayormente vacías con “Folio x/57” en la esquina superior derecha. El número de página debía actualizarse dinámicamente para cada página. Aunque hay varias formas de lograr esto, generar un PDF era la solución que más sentido tenía.
Hay varias herramientas con las que se puede crear un documento así, pero yo escogí LaTeX porque ofrece la solución más simple y personalizable. La personalización es crucial, particularmente por el ajuste en los márgenes, ya que en el documento original todos los márgenes eran inconsistentes. Los paquetes geometry y fancyhdr de LaTeX me daban la flexibilidad que necesitaba.
Aquí está el código que usé en el archivo pagination.tex:
\documentclass[12pt]{article}
\usepackage[paperwidth=8.5in,
paperheight=11in,
top=0.7in,
right=0.5in,
left=0.5in,
bottom=0.5in]{geometry}
\usepackage{fancyhdr}
\usepackage{pgffor}
\pagestyle{fancy}
\fancyhf{}
\rhead{Folio \thepage/57}
\begin{document}
\setcounter{page}{1}
\foreach \n in {1,...,57} {
\null\vfill\eject
}
\end{document}
Este script establece el tamaño de papel y márgenes del documento, define el formato del encabezado y finalmente genera las páginas usando un loop, insertando un salto de página en cada iteración.
Si te estás preguntando por qué utilicé \vfill\eject en lugar de \newpage, te recomiendo que chequeés esta pregunta en tex.stackexchange.com (está en Inglés, sorry 🇬🇧).
Después de compilar el archivo de LaTeX, se obtiene pagination.pdf, un hermoso documento en blanco con los números de página presentados en los lugares apropiados.
Combinando el Nuevo Documento con el PDF Original
El paso final era combinar los dos PDFs. No sólo unirlos, sino realmente sobreponerlos, de tal forma que los encabezados de mi nuevo documento aparecieran sobre el contenido original.
Para esto utilicé pdftk un fantástica herramienta para manipular PDFs. La siguiente línea de código hizo la magia:
pdftk original.pdf multistamp pagination.pdf output numbered.pdf
original.pdfes el documento principal.pagination.pdfcontenía los encabezados.- La opción
multistample dice a pdftk que sobreponga cada página enpagination.pdfsobre la página correspondiente enoriginal.pdf. - La opción
outputgenera el nuevo PDF numerado comonumbered.pdf.
Y ¡ya está! Logré resolver un problema tedioso con sólo unas pocas líneas de código. Ahora estoy compartiendo esto con vos –y con mi yo futuro 😉.