olá, alguém poderia me ajudar a descobrir como faço pra saber quantas paginas vai ter um arquivo que vai ser impresso?
obrigado
olá, alguém poderia me ajudar a descobrir como faço pra saber quantas paginas vai ter um arquivo que vai ser impresso?
obrigado
olá chester, tudo bom! vc esta utilizando o cups, vou dar uma olhada ver se acho alguma coisa pra te ajudar. Eu apenas pediria para você não duplicar seus topicos, pois vc já havia postado esta menssagem. Aguarde que se alguem souber ira te ajudar. Oks!
A maioria dos editores de textos decentes, vem especificando no rodapé da janela a quantidade de páginas que o documento possui exemplo deles são o Kword e o Writer (para Linux) se vc estiver usando um editor de texto que não possui essa função, o melhor é copiar o conteudo, colar num editor desse que numeram no rodapé.
Consequentemente o numero de páginas que o documento possui, é o mesmo que será impresso.
é realmente o cups q estou usando, se puder me dar uma ajuda agradeço
se a impressora for postscript pode ser utilizada a seguinte linha para obter a quantidade de páginas do arquivo na fila de impressão:
cat arq_fila_impressao | grep '%%PAGES:' | tail -1 | cut -d' ' -f2
se a impressora for pcl vc pode usar o programa abaixo pra fazer a contagem de paginas:
#define Version 20040107
#include <stdio.h>
#include <libgen.h>
// Mostra o help da linha de comandos
void ShowUsage() {
printf("pclcount (v.%d): Conta o numero de paginas em um arquivo
PCL.\n" \
"Copyright (c) 2003, by Eduardo Gielamo Oliveira & Rodolfo
Broco Manin\n" \
"Este programa e' distribuido nos termos da Licenca Publica
GPL.\n" \
"Para maiores informacoes, consulte
http://www.gnu.org/copyleft/gpl.html\n\n" \
"Sintaxe: pclcount <nome_do_arquivo> [-v][-h]\n" \
" -v -- Exibe informacoes detalhadas durante a
execucao\n" \
" -h -- Informa os parametros validos para linha de
comandos\n", Version);
}
int main (int argc, char **argv) {
FILE *InputFile;
char ch, EndTag, tag[2], *InputFileName;
int n, BlockSize, Pages, Copies, Quiet;
unsigned long FileSize, FilePos;
BlockSize = Pages = FileSize = FilePos = 0;
Copies = Quiet = 1;
InputFileName = NULL;
// Intepreta os parametros da linha de comandos
for(n = 1; n <= argc - 1; n++) {
if(! memcmp(argv[n], "-h", 2)) {
ShowUsage();
exit(0);
} else if(! memcmp(argv[n], "-v", 2))
Quiet = 0;
else if(argv[n][0] == '-') {
fprintf(stderr, "-- Parametro incorreto: '%s'.\n",
argv[n]);
exit(1);
} else
InputFileName = argv[n];
}
if(InputFileName == NULL) {
fprintf(stderr, "-- Nao foi informado um nome de arquivo.\n" \
" Use 'pclcount -h' para obter ajuda.\n");
exit(1);
}
// Tenta abrir o arquivo de entrada
if(! (InputFile = fopen(InputFileName, "r"))) {
fprintf(stderr, "--Erro abrindo arquivo: %s\n", argv[1]);
exit(-1);
};
// Obtem o tamanho do arquivo, para exibir as estatisticas caso
especificado '-v' na linha de comandos
if(! Quiet) {
fseek(InputFile, 0, SEEK_END);
FileSize = ftell(InputFile);
fseek(InputFile, 0, SEEK_SET);
}
while(fread(&ch, 1, 1, InputFile)) {
switch(ch) {
case 12:
// Encontrado FormFeed: incrementa o contador de paginas
Pages ++;
break;
case 27:
// Encontrado <ESC>
fread(tag, 2, 1, InputFile);
if(! (memcmp(tag, "*b", 2) && memcmp(tag, "(s", 2) &&
memcmp(tag, ")s", 2) && memcmp(tag, "&p", 2))) {
/*
Detecta os operadores:
<ESC>*b###W -> Inicio de Bloco Binario
<ESC>(s###W -> Inicio de Bloco de Descricao de
Caracteres
<ESC>)s###W -> Inicio de Bloco de Descricao de Fontes
<ESC>&p###X -> Inicio de Bloco de Caracteres
nao-imprimiveis
Nesses operadores, '###' eh o tamanho do bloco
respectivo.
*/
// Define o caracter terminador do bloco
EndTag = memcmp(tag, "&p", 2) ? 'W' : 'X';
do {
fread(&ch, 1, 1, InputFile);
if((ch >= '0') && (ch <= '9')) {
// Foi lido um numero: compoe o tamanho do
bloco
BlockSize = 10 * BlockSize + ch - '0';
}
} while ((ch >= '0') && (ch <='9'));
if(ch == EndTag) {
// O operador terminou com 'W': eh um dos
operadores esperados
// Efetua um 'seek' para pular o bloco
fseek(InputFile, BlockSize, SEEK_CUR);
FilePos = ftell(InputFile);
// Atualizando a mensagem de status aqui (inves de
faze-lo o tempo todo) nao deixa o processamento tao lento
if(! Quiet) printf("Processando... %ld de %ld
bytes (%ld%%)\r", FilePos, FileSize, (FilePos * 100) / FileSize);
}
// Nao era um dos operadores esperados: reinicializa
BlockSize
BlockSize = 0;
} else if(! (memcmp(tag, "&l", 2))) {
// O operador <ESC>&l###X informa o numero de copias
('###') solicitadas
n = 0;
for(ch = '0'; (ch >= '0') && (ch <= '9'); fread(&ch,
1, 1, InputFile)) {
n = 10 * n + ch - '0';
}
if(ch == 'X') {
// O operador terminou com 'X' (como esperado).
Obtem o numero de copias
Copies = n;
}
}
break;
}
}
fclose(InputFile);
if(Quiet)
// Caso nao tenha sido especificado '-v' na linha de comandos,
imprime apenas o numero total de folhas do trabalho
printf("%d\n", Pages * Copies);
else
printf("Processando...
Conluido. \n" \
"Numero de Paginas.....: %d\n" \
"Numero de Copias......: %d\n" \
"Total de Paginas......: %d\n", Pages, Copies, Pages *
Copies);
return(0);
}