2011-01-22 23 views
6

Así que me gustaría añadir un "pie de página" (una atribución) a la parte inferior de cada página de un archivo pdf que estoy generando a través de postscript con groff en Linux. Estoy convirtiendo el archivo de ps a pdf, con la herramienta ps2pdf, así que tengo acceso a ambos formatos.¿Cómo puedo agregar un pie de página al pie de cada página de un archivo postscript o pdf en Linux?

Estos dos mensajes han sido algo útil:

How to add page numbers to Postscript/PDF

How can I make a program overlay text on a postscript file?

no estoy en contra de usar el primer método, pero no tienen acceso a la utilidad pdflatex mencionado en el primer script, ni tengo la opción de instalarlo en la máquina que necesita hacer el trabajo.

Parece que el segundo método podría funcionar, pero tengo instalada la versión 8.15 de ghostscript y no vi muchos de los indicadores enumerados en la página del manual (http://unix.browserdebug.com/man/gs/). Creo que tengo acceso al indicador "-c" para insertar algún código postscript, aunque no esté en la lista. De todos modos, aquí hay dos comandos que he intentado, sin éxito:

 
gs -o output.pdf -sDEVICE=pdfwrite -g5030x5320 \ 
-c "/Helvetica-Italic findfont 15 scalefont setfont 453 482 moveto (test-string) show" \ 
-f input.ps 

que me da esto:

 
Unknown switch -o - ignoring 
ESP Ghostscript 815.02 (2006-04-19) 
Copyright (C) 2004 artofcode LLC, Benicia, CA. All rights reserved. 
This software comes with NO WARRANTY: see the file PUBLIC for details. 
ERROR: /undefinedfilename in (output.pdf) 
Operand stack: 

Execution stack: 
    %interp_exit .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- --nostringval-- --nostringval-- false 1 %stopped_push 
Dictionary stack: 
    --dict:1117/1686(ro)(G)-- --dict:0/20(G)-- --dict:102/200(L)-- 
Current allocation mode is local 
Last OS error: 2 
ESP Ghostscript 815.02: Unrecoverable error, exit code 1 

Así que, obviamente, la opción -o tiene un problema y por lo que hicieron una investigación y trataron esta sintaxis:

 

gs -sOUTPUTFILE=output.pdf -sDEVICE=pdfwrite -g5030x5320 \ 
-c "/Helvetica-Italic findfont 15 scalefont setfont 453 482 moveto (test-string) show" \ 
-f input.ps 

que da salida a esto y hace que me golpeó de retorno 4 veces (tal vez hay 4 páginas en input.ps)

 

ESP Ghostscript 815.02 (2006-04-19) 
Copyright (C) 2004 artofcode LLC, Benicia, CA. All rights reserved. 
This software comes with NO WARRANTY: see the file PUBLIC for details. 
Can't find (or can't open) font file /usr/share/ghostscript/8.15/Resource/Font/Helvetica-Italic. 
Can't find (or can't open) font file Helvetica-Italic. 
Querying operating system for font files... 
Didn't find this font on the system! 
Substituting font Helvetica-Oblique for Helvetica-Italic. 
Loading NimbusSanL-ReguItal font from /usr/share/fonts/default/Type1/n019023l.pfb... 3742416 2168114 2083056 759694 1 done. 
Loading NimbusRomNo9L-ReguItal font from /usr/share/fonts/default/Type1/n021023l.pfb... 3781760 2362033 2365632 1015713 1 done. 
Loading NimbusRomNo9L-Medi font from /usr/share/fonts/default/Type1/n021004l.pfb... 3865136 2547267 2365632 1029818 1 done. 
Loading NimbusRomNo9L-Regu font from /usr/share/fonts/default/Type1/n021003l.pfb... 4089592 2759001 2365632 1032885 1 done. 
Using NimbusRomanNo9L-Regu font for NimbusRomNo9L-Regu. 
>>showpage, press <return> to continue<< 

>>showpage, press <return> to continue<< 

>>showpage, press <return> to continue<< 

>>showpage, press <return> to continue<< 


por lo que parece que sería bastante simple de usar gs simplemente insertar algo en un archivo ps, pero está demostrando ser bastante complicado ...

Respuesta

5

ESP Ghostscript es O-o-o-o-viejo. No lo use más a menos que absolutamente, absolutamente no lo pueda evitar. Era un tenedor del Ghostscript original que utilizó CUPS durante un tiempo. (Y después de algunos problemas entre los desarrolladores, donde resuelto, las versiones más recientes de Copas ahora también utilizar la GPL Ghostscript de nuevo ...) versiones

reciente GPL Ghostscript están aquí: http://www.ghostscript.com/releases/

Además, -o out.pdf es sólo una forma abreviada de -dBATCH -dNOPAUSE -sOutputFile=outpdf. Entonces deberías probar esto. (La parte -dNOPAUSE lo alivia de golpear <return> por cada avance de página ....).

Por último, no espere que la gama completa de documentación sea provista por un terceroman gs página. Más bien se refiere a la documentación original Ghostscript para la versión que utilice, las partes más importantes son:


Actualización: Ghostscript se ha trasladado a Git (en lugar de Subversion) para su repositorio de código fuente . Para ello los siguientes enlaces han cambiado, en repetidas ocasiones:

+0

Estoy usando un sistema que tiene ESP instalado sin privilegios para instalar una versión mejorada. Me pregunto si hay una forma de que pueda hacerlo funcionar con ESP ... – cwd

+0

ESP Ghostscript ya no se mantiene ... La única forma de que esto funcione como un usuario sin privilegios es instalar adicionalmente una versión más nueva de Ghostscript en su directorio personal (o en cualquier otro lugar que pueda escribir en su cuenta). –

6

En su El archivo PostScript puede usar un contador de página y redefinir la página de presentación para mostrarla en el pie de página. Aquí está un ejemplo de programa:

4 dict begin 

/showpage_org /showpage load def   % you'll need this later! 
/page_num 0 def 
/page_str 3 string def      % Page numbers -99 to 999 supported, error if > 3 char 

/showpage         % with page number footer 
{ 
    gsave 
    /Courier findfont 10 scalefont setfont % Set the font for the footer 
    /page_num page_num 1 add def   % increment page number counter 
    10 10 moveto (Page) show     
    page_num page_str cvs show    % convert page number integer to a string and show it 
    grestore 
    showpage_org       % use the original showpage 
} def 

%Page 1 
/Courier findfont 22 scalefont setfont 
100 500 moveto (Hello) show 
showpage 

%Page 2 
100 500 moveto (World) show 
showpage 

end 
+0

gracias por la respuesta! no he tenido tiempo de probar esto todavía (escribió la pregunta hace un rato) pero si vuelvo a esto y funciona bien, cambiaré mi respuesta aceptada. – cwd

+0

Puede usar "bind def" en su nueva función "showpage". De esta manera, utiliza la "página de presentación" original en el interior, sin la necesidad de un método auxiliar, evitando así la recursión. –

+0

¿Cómo se aplica ese comando a todas/varias páginas? (en lugar de copiar y pegar el código #NumOfPages veces ...) – Dor

1

El lugar más lógico para añadir pies de página se encuentra en la fuente groff. La forma exacta de hacerlo dependerá, por supuesto, del macro paquete que esté utilizando. Para -ms, que puede hacer:

.ds RF "Page \\n(PN 

para agregar el número de página como el pie derecho. Para -mm, es más como:

.PF "'''Page \\\\nP'" 

donde las comillas simples delimitan la 'parte part'center part'right izquierda' del pie de página.

Cuestiones relacionadas