Como posso determinar a contagem de páginas a partir de um arquivo postscript (gerado pelo Opera)?

2

Eu não conheço o idioma do postscript.

Eu tenho um sistema de emulação de impressão duplex escrito em bash. Imprime as páginas ímpares primeiro e depois as páginas pares. Ele precisa saber se há uma contagem de páginas ímpares para que possa ejetar a última página ímpar que não tenha um lado par correspondente. Também usa contagens de páginas para fins de relatório.

Eu não sabia como fazer isso corretamente, então escrevi um código que olha para o final e, se necessário, o início do arquivo postscript pesquisando por "%% Pages:" que é seguido por uma contagem de páginas. Isso funciona em quase tudo, exceto arquivos impressos pelo navegador Opera.

Alguém pode sugerir outra maneira de obter essas informações?

Os arquivos postscript tendem a ser bastante grandes, com muito conteúdo não legível para humanos, então ainda não passei muito tempo derramando sobre os que saem do Opera.

TIA

O código atual está em:

http://sourceforge.net/projects/duplexpr/

function ps_page_ct
    
por Joe 09.12.2011 / 13:56

3 respostas

5

O seguinte comando do Ghostscript contará confiavelmente as páginas no seu arquivo PostScript - mas pode ser bastante lento, porque requer que o arquivo seja completamente interpretado (executado), como @afrazier já declarado em um comentário:

gs \
 -o /dev/null \
 -sDEVICE=bbox \
  input.ps 2>&1 \
| grep HiResBoundingBox \
| wc -l
    
por 27.06.2012 / 22:09
5

Infelizmente, não há uma maneira simples de encontrar páginas em um arquivo Postscript bruto. É por isso que %%Pages convention foi criada (Convenções de estruturação de documentos da Adobe).

O comando para emitir uma página é showpage . Em casos simples, você só precisa contá-los.

Mas este comando pode ser embutido no corpo de uma função e então você precisa de um analisador Postscript.

    
por 09.12.2011 / 14:22
2

Encontrei este pequeno trecho em algum lugar, ele processará o documento rapidamente e imprimirá a contagem de páginas. Isso pode ajudar se o exiftool não imprimir essas informações de metadados porque o documento não foi gerado corretamente:

gs -dNODISPLAY -dBATCH -dNOPAUSE -o /dev/null source|grep -P '^Page'|wc -l
    
por 24.04.2013 / 12:04