paginas pagina online numero numerarpdf numeradas numeracion insertar hojas pdf postscript

pagina - Cómo agregar números de página a Postscript/PDF



numero pagina pdf (12)

¿Quizás los pstops (parte de psutils ) se pueden usar para esto?

Si tiene un documento grande (500 páginas +) en Postscript y desea agregar números de página, ¿alguien sabe cómo hacerlo?


Además de la solución de captaincomic, la extendí para apoyar el inicio de la numeración de páginas en cualquier página.

Requiere enscript, pdftk 1.43 o mayor y pdfjam (para la utilidad pdfjoin)

#!/bin/bash input="$1" count=$2 blank=$((count - 1)) output="${1%.pdf}-header.pdf" pagenum=$(pdftk "$input" dump_data | grep "NumberOfPages" | cut -d":" -f2) (for i in $(seq "$blank"); do echo; done) | enscript -L1 -B --output - | ps2pdf - > /tmp/pa$$.pdf (for i in $(seq "$pagenum"); do echo; done) | enscript -a ${count}- -L1 -F Helvetica@10 --header=''||Page $% of $='' --output - | ps2pdf - > /tmp/pb$$.pdf pdfjoin --paper letter --outfile /tmp/join$$.pdf /tmp/pa$$.pdf /tmp/pb$$.pdf &>/dev/null cat /tmp/join$$.pdf | pdftk "$input" multistamp - output "$output" rm /tmp/pa$$.pdf rm /tmp/pb$$.pdf rm /tmp/join$$.pdf

Por ejemplo, coloque esto en /usr/local/bin/pagestamp.sh y ejecute como:

pagestamp.sh doc.pdf 3

Esto iniciará el número de página en la página 3 .. útil cuando tenga hojas de portadas, páginas de título y tabla de contenido, etc.

Lo desafortunado es que la opción de enscript --footer está rota, por lo que no puede obtener la numeración de la página en la parte inferior utilizando este método.


Basado en la solución propuesta de rcs, hice lo siguiente:

Convirtió el documento en example.pdf y ejecutó pdflatex addpages , donde addpages.tex dice:

/documentclass[8pt]{article} /usepackage[final]{pdfpages} /usepackage{fancyhdr} /topmargin 70pt /oddsidemargin 70pt /pagestyle{fancy} /rfoot{/Large/thepage} /cfoot{} /renewcommand {/headrulewidth}{0pt} /renewcommand {/footrulewidth}{0pt} /begin{document} /includepdfset{pagecommand=/thispagestyle{fancy}} /includepdf[fitpaper=true,scale=0.98,pages=-]{example.pdf} % fitpaper & scale aren''t always necessary - depends on the paper being submitted. /end{document}

o alternativamente, para páginas a dos caras (es decir, con el número de página consistentemente en el exterior):

/documentclass[8pt]{book} /usepackage[final]{pdfpages} /usepackage{fancyhdr} /topmargin 70pt /oddsidemargin 150pt /evensidemargin -40pt /pagestyle{fancy} /fancyhead{} /fancyfoot{} /fancyfoot[LE,RO]{/Large/thepage} /renewcommand{/headrulewidth}{0pt} /renewcommand{/footrulewidth}{0pt} /begin{document} /includepdfset{pages=-,pagecommand=/thispagestyle{fancy}} /includepdf{target.pdf} /end{document}

Una forma sencilla de cambiar los márgenes del encabezado:

% set margins for headers, won''t shrink included pdfs % you can remove the topmargin/oddsidemargin/evensidemargin lines /usepackage[margin=1in,includehead,includefoot]{geometry}


Escribí el siguiente script de shell para resolver esto para las diapositivas de estilo de beamer LaTeX producidas con inkscape ( pdftk cat las diapositivas juntas en la presentación final en PDF y luego pdftk cat los números de diapositivas usando la secuencia de comandos a continuación):

#!/bin/sh # create working directory tmpdir=$(mktemp --directory) # read un-numbered beamer slides PDF from STDIN & create temporary copy cat > $tmpdir/input.pdf # get total number of pages pagenum=$(pdftk $tmpdir/input.pdf dump_data | awk ''/NumberOfPages/{print $NF}'') # generate latex beamer document with the desired number of empty but numbered slides printf ''%s'' '' /documentclass{beamer} /usenavigationsymbolstemplate{} /setbeamertemplate{footline}[frame number] /usepackage{forloop} /begin{document} /newcounter{thepage} /forloop{thepage}{0}{/value{thepage} < ''$pagenum''}{ /begin{frame} /end{frame} } /end{document} '' > $tmpdir/numbers.tex # compile latex file into PDF (2nd run needed for total number of pages) & redirect output to STDERR pdflatex -output-directory=$tmpdir numbers.tex >&2 && pdflatex -output-directory=$tmpdir numbers.tex >&2 # add empty numbered PDF slides as background to (transparent background) input slides (page by # page) & write results to STDOUT pdftk $tmpdir/input.pdf multibackground $tmpdir/numbers.pdf output - # remove temporary working directory with all intermediate files rm -r $tmpdir >&2

El script lee STDIN y escribe STDOUT STDERR diagnostic pdflatex output en STDERR .

Así que solo copia y pega el código anterior en un archivo de texto, digamos enumerate_slides.sh , hazlo ejecutable ( chmod +x enumerate_slides.sh ) y llámalo así:

./enumerate_slides.sh < input.pdf > output.pdf [2>/dev/null]

Debería ser fácil ajustar esto a cualquier otro tipo de documento ajustando la plantilla LaTeX para usar las clases de documentclass , el tamaño del papel y las opciones de estilo adecuadas.

edit: Reemplacé echo por $(which echo) ya que en ubuntu symlinks /bin/sh to dash que anula el comando echo por un intérprete interno, interpreta las secuencias de escape de forma predeterminada y no proporciona la opción -E para anular este comportamiento. Tenga en cuenta que alternativamente puede escapar de todo / en la plantilla LaTeX como // .

editar: Reemplacé $(which echo) por printf ''%s'' ya que en zsh , which echo devuelve echo: shell built-in command lugar de /bin/echo . Vea esta pregunta para más detalles sobre por qué decidí usar printf al final.


Esta podría ser una solución:

  1. convertir postscript a pdf usando ps2pdf
  2. cree un archivo LaTeX e inserte las páginas usando el paquete pdfpages ( /includepdf )
  3. use pagecommand={/thispagestyle{plain}} o algo del paquete fancyhdr en los argumentos de /includepdf
  4. si se requiere una salida postscript, convierta la salida de pdf2ps a postscript via pdf2ps

Intenté con pspdftool ( http://sourceforge.net/projects/pspdftool ).

Finalmente conseguí que funcionara, pero al principio obtuve este error:

pspdftool: xreftable read error

El archivo de origen se creó con pdfjoin de pdfjam, y contenía un conjunto de escaneos de mi Epson Workforce, así como páginas de etiquetas generadas. No pude encontrar una manera de arreglar la tabla de referencias externas, así que convertí a ps con pdf2ps y de vuelta a PDF con pdf2ps. Entonces podría usar esto para obtener buenos números de página en la esquina inferior derecha:

pspdftool ''number(start=1, size=20, x=550 pt, y=10 pt)'' input.pdf output.pdf

Desafortunadamente, significa que las páginas con búsqueda de texto ya no se pueden buscar porque el texto se rasterizó en la conversión ps. Afortunadamente, en mi caso no importa.

¿Hay alguna forma de corregir o vaciar la tabla de referencias externas de un archivo pdf sin perder las páginas en las que se puede buscar?


Me gustó la idea de usar pspdftool ( página man ) pero lo que pspdftool era la página x fuera del formato y el estilo de fuente para que coincida con el resto de la página.

Para conocer los nombres de las fuentes utilizadas en el documento:

$ strings input.pdf | grep Font

Para obtener el número de páginas:

$ pdfinfo input.pdf | grep "Pages:" | tr -s '' '' | cut -d" " -f2

pspdftool junto con algunos comandos de pspdftool :

$ in=input.pdf; / out=output.pdf; / indent=30; / pageNumberIndent=49; / pageCountIndent=56; / font=LiberationSerif-Italic; / fontSize=9; / bottomMargin=40; / pageCount=`pdfinfo $in | grep "Pages:" | tr -s '' '' | cut -d" " -f2`; / pspdftool "number(x=$pageNumberIndent pt, y=$bottomMargin pt, start=1, size=$fontSize, font=/"$font/")" $in tmp.pdf; / pspdftool "text(x=$indent pt, y=$bottomMargin pt, size=$fontSize, font=/"$font/", text=/"page /")" tmp.pdf tmp.pdf; / pspdftool "text(x=$pageCountIndent pt, y=$bottomMargin pt, size=$fontSize, font=/"$font/", text=/"out of $pageCount/")" tmp.pdf $out; / rm tmp.pdf;

Aquí está el resultado:


Oh, es un largo tiempo desde que usé PostScript, pero un rápido vistazo al libro azul te dirá :) www-cdf.fnal.gov/offline/PostScript/BLUEBOOK.PDF

Por otro lado, Adobe Acrobat y un poco de javascript también harían maravillas;)

Alternativamente, encontré esto: http://www.ghostscript.com/pipermail/gs-devel/2005-May/006956.html , que parece ajustarse a la factura (no lo intenté)


Solía ​​agregar números de página a mi pdf usando látex como en la respuesta aceptada.

Ahora encontré una manera más fácil: use enscript para crear páginas vacías con un encabezado que contenga el número de página, y luego use pdftk con la opción de multistamp pdftk para poner el encabezado en su archivo.

Este script bash espera el archivo pdf como su único parámetro:

#!/bin/bash input="$1" output="${1%.pdf}-header.pdf" pagenum=$(pdftk "$input" dump_data | grep "NumberOfPages" | cut -d":" -f2) enscript -L1 --header=''||Page $% of $='' --output - < <(for i in $(seq "$pagenum"); do echo; done) | ps2pdf - | pdftk "$input" multistamp - output $output


Supongo que está buscando una solución basada en PS. No hay operador de nivel de página en PS que le permita hacer esto. PageSetup agregar un pie de página, una especie de cosa en la sección de PageSetup de página para cada página. Cualquier lenguaje de scripting debería poder ayudarte.


Tomé la solución de captaincomic y agregué soporte para nombres de archivos que contenían espacios, además de dar más información sobre el progreso

#!/bin/bash clear echo echo This skript adds pagenumbers to a given .pdf file. echo echo This skript needs the packages pdftk and enscript echo if not installed the script will fail. echo use the command sudo apt-get install pdftk enscript echo to install. echo input="$1" output="${1%.pdf}-header.pdf" echo input file is $input echo output file will be $output echo pagenum=$(pdftk "$input" dump_data | grep "NumberOfPages" | cut -d":" -f2) enscript -L1 --header=''||Page $% of $='' --output - < <(for i in $(seq "$pagenum"); do echo; done) | ps2pdf - | pdftk "$input" multistamp - output "$output" echo done.