OVH Cloud OVH Cloud

Gros fichiers d'impression

6 réponses
Avatar
Bertrand Mellé
Bonjour,

J'ai un problème dans un réseau longue distance avec l'impression de
fichiers comportants plusieurs centaines de page : l'impression se met à
bouclede façon catastrophique de telle sorte qu'il faut la stopper par
cancel, ce qui n'arrive jamais avec des plus petits documents.

Je cherche donc un moyen propre de tronçonner les gros fichiers via un shell
:
- j'ai regardé la commande split, mais je crains d'obtenir des sauts de
pages intempestifs en tronçonnant arbitrairement par un nombre fixe de
lignes.
- le fichier comportant des documents de taille variables, mais n'excédant
jamais 10 pages, il serait intéressant d'utiliser la séquence
d'initialisation de bac présente en début de chaque document, comment ?
- comment également genérer la commande 'lp' qui imprimera les fichiers
générés et faire le ménage ensuite ?

Merci d'avance
B.Mellé

6 réponses

Avatar
Rakotomandimby (R12y) Mihamina
Bonjour,

Quel est le format des fichiers?

Si ils sont en PDF, tu as pdftk (PDF toolkit) qui peut splitter proprement
les documents en lignes de commande:

http://www.accesspdf.com/article.php/20041129175231241

--
Mirroir de logiciels libres http://www.etud-orleans.fr
Développement de logiciels libres http://aspo.rktmb.org/activites/developpement
Infogerance de serveur dédié http://aspo.rktmb.org/activites/infogerance
(En louant les services de l'ASPO vous luttez contre la fracture numerique)
Avatar
Pascal Bourguignon
"Bertrand Mellé" writes:
J'ai un problème dans un réseau longue distance avec l'impression de
fichiers comportants plusieurs centaines de page : l'impression se met à
bouclede façon catastrophique de telle sorte qu'il faut la stopper par
cancel, ce qui n'arrive jamais avec des plus petits documents.

Je cherche donc un moyen propre de tronçonner les gros fichiers via un shell
:
- j'ai regardé la commande split, mais je crains d'obtenir des sauts de
pages intempestifs en tronçonnant arbitrairement par un nombre fixe de
lignes.
- le fichier comportant des documents de taille variables, mais n'excédant
jamais 10 pages, il serait intéressant d'utiliser la séquence
d'initialisation de bac présente en début de chaque document, comment ?
- comment également genérer la commande 'lp' qui imprimera les fichiers
générés et faire le ménage ensuite ?



Tu peux agir à trois niveaux:

- au niveau de l'application qui génère les impressions
(lancer plusieurs impressions au lieu d'une en spécifiant les
intervales de pages)

- au niveau des fichier d'impression; la question est alors de savoir
quel est le format de ces fichiers pour savoir comment mesurer le
nombre de pages et faire une couper par page. On ne coupe pas de la
même manière un fichier texte qu'un fichier postscript ou autre...

- au niveau des filtres du démon d'impression. Par exemple on peut
créer une queue spéciale pour ces grosses impression avec un filtre
qui coupera les fichiers postscripts générés par 20 ou 50 pages
avant de transmettre ces jobs à la queue d'impression normale.


Pour traiter les fichiers postscripts, voir le package psutils et la
commandes psselect.



Pour les fichiers textes, si des sauts de pages (ASCII FF) sont
insérés pour indiquer les sauts de page, on peut facilement les
couper. Par exemple (en supposant que le FF se trouve tout seul sur
une ligne, ce qui n'est pas forcément le cas):

file=grosfichier
awk -v ppr% -v name=${file}-range- '
BEGIN{p=0;r=0;rf=name sprintf("%03d",r);system("rm " rf);}
//{p++;if(p>=ppr){p=0;r++;rf=name sprintf("%03d",r);system("rm " rf);next;}}
{print $0>>rf;}
' < "${file}"


--
__Pascal Bourguignon__ http://www.informatimago.com/
Until real software engineering is developed, the next best practice
is to develop with a dynamic system that has extreme late binding in
all aspects. The first system to really do this in an important way
is Lisp. -- Alan Kay

Avatar
Bertrand Mellé
J'ai tardé à répondre mais je n'avais pas la possibilité de faire d'essais
jusqu'à ce jour ..

Voici quelques précisions :
-je ne peux pas intervenir sur l'application génératrice des fichiers
-les fichiers générés sont du texte avec des séquences PCL (donc ni PDF, ni
postcript)
-le système est un Solaris

-la petite moulinette 'awk' me parait sympathique, par contre elle me génére
des messages d'erreurs : syntax error near line 1 et bailing out near line
1.

que faire ?
Cordialement
B.Mellé

"Pascal Bourguignon" a écrit dans le message de
news:
"Bertrand Mellé" writes:
J'ai un problème dans un réseau longue distance avec l'impression de
fichiers comportants plusieurs centaines de page : l'impression se met à
bouclede façon catastrophique de telle sorte qu'il faut la stopper par
cancel, ce qui n'arrive jamais avec des plus petits documents.

Je cherche donc un moyen propre de tronçonner les gros fichiers via un
shell
:
- j'ai regardé la commande split, mais je crains d'obtenir des sauts de
pages intempestifs en tronçonnant arbitrairement par un nombre fixe de
lignes.
- le fichier comportant des documents de taille variables, mais
n'excédant
jamais 10 pages, il serait intéressant d'utiliser la séquence
d'initialisation de bac présente en début de chaque document, comment ?
- comment également genérer la commande 'lp' qui imprimera les fichiers
générés et faire le ménage ensuite ?



Tu peux agir à trois niveaux:

- au niveau de l'application qui génère les impressions
(lancer plusieurs impressions au lieu d'une en spécifiant les
intervales de pages)

- au niveau des fichier d'impression; la question est alors de savoir
quel est le format de ces fichiers pour savoir comment mesurer le
nombre de pages et faire une couper par page. On ne coupe pas de la
même manière un fichier texte qu'un fichier postscript ou autre...

- au niveau des filtres du démon d'impression. Par exemple on peut
créer une queue spéciale pour ces grosses impression avec un filtre
qui coupera les fichiers postscripts générés par 20 ou 50 pages
avant de transmettre ces jobs à la queue d'impression normale.


Pour traiter les fichiers postscripts, voir le package psutils et la
commandes psselect.



Pour les fichiers textes, si des sauts de pages (ASCII FF) sont
insérés pour indiquer les sauts de page, on peut facilement les
couper. Par exemple (en supposant que le FF se trouve tout seul sur
une ligne, ce qui n'est pas forcément le cas):

file=grosfichier
awk -v ppr% -v name=${file}-range- '
BEGIN{p=0;r=0;rf=name sprintf("%03d",r);system("rm " rf);}
//{p++;if(p>=ppr){p=0;r++;rf=name sprintf("%03d",r);system("rm "
rf);next;}}
{print $0>>rf;}
' < "${file}"


--
__Pascal Bourguignon__ http://www.informatimago.com/
Until real software engineering is developed, the next best practice
is to develop with a dynamic system that has extreme late binding in
all aspects. The first system to really do this in an important way
is Lisp. -- Alan Kay



Avatar
Pascal Bourguignon
"Bertrand Mellé" writes:

J'ai tardé à répondre mais je n'avais pas la possibilité de faire d'essais
jusqu'à ce jour ..

Voici quelques précisions :
-je ne peux pas intervenir sur l'application génératrice des fichiers
-les fichiers générés sont du texte avec des séquences PCL (donc ni PDF, ni
postcript)
-le système est un Solaris

-la petite moulinette 'awk' me parait sympathique, par contre elle me génére
des messages d'erreurs : syntax error near line 1 et bailing out near line
1.

que faire ?


Elle ne va pas fonctionner sur des fichiers PCL. Par contre c'est un
format de fichier d'impression assez bien documenté.

Il y a des outils et bibliothèques pour manipuler ces fichiers,
http://www.google.com/search?hl=en&lr=&as_qdr=all&q=PCL+print+file+format&btnG=Search
malheureusement, la majorité sont pour des systèmes Microsoft et pas libres...


D'après:
http://h10025.www1.hp.com/ewfrf/wc/genericDocument?cc=us&docname=bpu00167&lc=en
on devrait pouvoir couper les pages sur les séquences:
Eject Page : 027 038 108 048 072 (decimal)

Mais c'est surement plus compliqué que ça, car il y a surement des
informations à reproduire en entête et en queue de fichier. Il faut
bien étudier le format PCL, et écrire un programme (libre! ;-) pour
couper les pages.

Il faut aussi peut être tenir compte des variantes de PCL pour chaque
type d'imprimantes.

http://www.hp.com/cgi-bin/cposupport/ccsearch/search-product?pname=&qry=PCL+Escape+Sequences&submit.x=7&submit.y=7&ctry=us&lang=en&dlc=en&sni=&search=0


Peut être le plus prometteur sera:
http://www.artifex.com/downloads/doc/ghostpcl.pdf



--
__Pascal Bourguignon__ http://www.informatimago.com/
Litter box not here.
You must have moved it again.
I'll poop in the sink.

Avatar
Bertrand Mellé
Merci pour vos recherche, je connais exactement la séquence d'échappement
qui débute chaque sous-document dans le fichier : E&l0E&l1H (avec
7)

Je n'ai pas grande compétence en shell Unix, mon problème est donc de
savoir s'il est possible de créer un nouveau fichier à partir de chaque
nouvelle occurence de cette séquence, sans la perdre bien entendu.

J'ai remplacé awk par nawk dans votre formule et j'obtiens un résultat, à
savoir des fichiers de 25 lignes donc avec une troncature arbitraire.

Cordialement
B.Mellé
Avatar
Pascal Bourguignon
"Bertrand Mellé" writes:

Merci pour vos recherche, je connais exactement la séquence d'échappement
qui débute chaque sous-document dans le fichier : E&l0E&l1H (avec
7)

Je n'ai pas grande compétence en shell Unix, mon problème est donc de
savoir s'il est possible de créer un nouveau fichier à partir de chaque
nouvelle occurence de cette séquence, sans la perdre bien entendu.

J'ai remplacé awk par nawk dans votre formule et j'obtiens un résultat, à
savoir des fichiers de 25 lignes donc avec une troncature arbitraire.


C'est une séquence binaire, alors que awk, grep, sed, split, etc, sont
conçut pour travailler avec des fichiers textes. Je conseillerais
d'écrire un programme dans son langage de programmation préféré pour
ce travail.

Mais je doute que simplement couper les pages ainsi suffise: les pages
suivantes s'imprimerons surement mal, car il y a des séquences qui
configurent l'imprimante, et si elles ne sont pas répétée dans chaque
document, ça ne donnera pas un bon résultat. C'est pour ça qu'il
faudra surement interpréter tout le PCL, collecter les séquences
établissant l'état, et les reproduire au début de chaque document.

--
__Pascal Bourguignon__ http://www.informatimago.com/
Until real software engineering is developed, the next best practice
is to develop with a dynamic system that has extreme late binding in
all aspects. The first system to really do this in an important way
is Lisp. -- Alan Kay