2011-01-28 27 views
16

Estoy usando la API de biblioteca Ghostscript (envolviendo desde C#) para imprimir documentos PDF desde mi aplicación.
Con los parámetros '-dFirstPage' y '-dLastPage', puedo seleccionar un rango de páginas para imprimir, pero ¿qué ocurre con el número total de páginas de un PDF?Ghostscript: PDF total de páginas

No es muy agradable permitir que un usuario seleccione un intervalo de página de 2 a 10 cuando, digamos, el documento PDF tiene solo 4 páginas.

Tenga en cuenta que estoy usando la biblioteca Ghostscript a través de gsapi_init_with_args biblioteca API llamada.

+1

Los archivos PDF DEBEN declarar su número de páginas en su catálogo de metadatos. Usted también podría correr en el s.th. como * gs -q -c "(en.pdf) (r) archivo runpdfbegin pdfpagecount = quit" * para hacer que Ghostscript cuente las páginas. –

+0

@pipitas Hola y gracias por tu ayuda; si no lo hago, tengo que usar "(en.pdf) (r) archivo runpdfbegin pdfpagecount = quit" como parámetro de entrada de una llamada GS? En caso afirmativo, 'in.pdf' será el archivo de entrada, pero ¿qué pasa con '(r)'? Gracias de nuevo. – lorenzoff

+0

Simplemente use '(r)' como está. Es un macro interno de Ghostscript que le dice a Ghostscript que lea/ejecute el archivo '(en.pdf)' ... Sí, la única variable es 'in.pdf'; reemplácela con el nombre de archivo [path +] de su PDF. –

Respuesta

31

Ghostscript puede contar y mostrar el número de páginas de un PDF en stdout. La línea de comandos es

gswin32c^
    -q^
    -dNODISPLAY^
    -c "(input.pdf) (r) file runpdfbegin pdfpagecount = quit" 

Aquí todas las cosas -c "..." es un fragmento de comandos PostScript (usando un par de extensiones de comando GS internos). Y input.pdf es el nombre de archivo PDF (también podría ser una ruta completa como (c:/path/to/my.pdf)).

Sin embargo, una herramienta mejor y más rápida para este tipo de trabajo sería usar pdfinfo (parte de las utilidades XPDF, también disponible en Windows).


Actualización:

@ebyrob quiere saber si se puede modificar mi ejemplo de línea de comandos para que también muestra el PDF en una sola operación. Prueba esto:

gswin32c^
    -q^
    -c "(input.pdf) (r) file runpdfbegin pdfpagecount ="^
    -f input.pdf 

Bueno, no es una sola operación - es sólo dos operaciones diferentes en una sola línea de comandos.

+0

Gracias otra vez – lorenzoff

+0

¿Se podría modificar esto para leer los metadatos mientras también se visualiza la imagen del PDF en una sola operación? (Diga con '-sDEVICE = display' y amigos especificados) Y también, al leer el archivo de' stdin'? (es decir: nombre de archivo gswin32 de '-') Ejecutando simplemente:' -c "pdfpagecount" 'parecía darme un error de" operación no existe ". Incluyendo el juego 'runpdfbegin' el nombre del archivo no es válido. –

+0

@ebyrob: necesita todos y cada uno de los caracteres del ejemplo de mi comando (solo puede cambiar '* input.pdf *' a un nombre de archivo o ruta diferente. No puede omitir ninguna parte cuando lo desee ... –

0

Traté de hacer este script:

gswin32c^
    -q^
    -c "(input.pdf) (r) file runpdfbegin pdfpagecount ="^
    -f input.pdf 

trabajo en un C# envuelto solución y cuidado para conseguir el error "/ undefinedfilename". En este caso, asegúrese de que su ruta de archivo tenga barras inclinadas "/" como DirectorySeperator y no barras diagonales inversas "\". Sé que Kurt Pfeifle ya lo escribió, pero me pasó que simplemente lo pasé por alto.

+0

Si desea utilizar barras diagonales inversas, debe usar dos de ellas cada vez ... –

Cuestiones relacionadas