2014-07-11 3 views
2

J'ai un script qui utilise Ghostscript pour convertir des fichiers PDF en PostScript. De plus, ces fichiers doivent être remplis avec des pages vierges, car ils sont imprimés sur les deux côtés du papier et chaque document doit être conservé séparément. Le processus d'un niveau élevé va comme ceci:Comportement de Ghostscript avec ps2write

  1. Convertir tous les fichiers PDF dans un répertoire de fichiers PostScript individuels et pendant ce tampon de processus chacun avec une page blanche si elle a un nombre impair de pages comme indiqué au début de l'en-tête PostScript .

  2. La liste de tous ces fichiers PostScript est ensuite transmise à Ghostscript pour créer un seul document PostScript à imprimer.

  3. Ceci est une exigence du processus que tous les documents sont soumis en tant que travail d'impression unique.

La première partie du processus se déroule sans problème, mais la deuxième partie semble se heurter à des problèmes après un certain seuil (grand nombre de fichiers PDF) est atteint. La ligne de commande que j'utilise pour la deuxième partie est:

gs -q -dNOPAUSE -dBATCH -sDEVICE=ps2write -sOutputFile=$print_tmp $list_tmp 

print_tmp est le seul fichier PostScript à imprimer et list_tmp représente la liste des fichiers PostScript individuels à combiner dans un seul fichier.

Je n'ai vu aucun émis lors de l'impression de plus de 750 fichiers, mais après environ 1000, j'ai observé le comportement suivant. Le processus gs semble se répercuter dans chaque fichier et l'utilisation de la mémoire augmente lentement. Après avoir alloué environ 675 Mo de mémoire, le processus semble ralentir de manière significative et ne semble jamais se terminer.

Pour 500 fichiers, le processus a pris environ 45 minutes. Avec environ 1400 fichiers, le processus continuait après 5 heures et la consommation de mémoire était d'environ 1 Go. L'utilisation de la mémoire pour les 500 fichiers était d'environ 600 Mo. J'imagine qu'à un moment donné, le processus se terminerait, mais j'ai un créneau temporel auquel je dois m'attacher.

Y at-il quelque chose qui doit être réglé pour cela ou ai-je atteint une limitation de l'appareil ps2write? En utilisant le périphérique pswrite, je peux traiter plus de 2000 fichiers en 2 heures, donc il semble que la tâche est au moins possible, mais je préfère m'éloigner de pswrite depuis son obsolète.

Répondre

1

Je voudrais suggérer un chemin de processus différent pour vous d'explorer:

  1. Passez votre étape 1 tout à fait (où vous convertir vos fichiers PDF d'entrée en ps2write fichiers -generated PS d'abord et ajouter une page vide à ceux qui contiennent des numéros de page impairs).

  2. Traitez tous vos fichiers PDF d'entrée directement (et ajoutez un extrait de code PostScript -c showpage après chaque fichier PDF impaire).

Cela vous oblige à récupérer le même/informations page impaire des fichiers PDF d'entrée par d'autres moyens (que je ne vais pas traiter avec ici pour l'instant - juste vous dire pouvez utiliser une commande pdfinfo pour gagner cette info).

Cela conduirait à une ligne de commande qui ressemble à ceci:

gs \ 
    -o ps2-output.ps \ 
    -sDEVICE=ps2write \ 
    -f even1.pdf \ 
    -f odd1.pdf -c showpage \ 
    -f odd2.pdf -c showpage \ 
    -f even2.pdf \ 
    -f even3.pdf \ 
    -f odd3.pdf -c showpage \ 
    [...] 

-c showpage ajoute une page vide à chaque fois qu'il apparaît dans la liste des fichiers d'entrée.

Notez que vous êtes nécessaire d'utiliser le commutateur -f après chaque utilisation du commutateur -c (mais je l'utilise pour chaque fichier d'entrée ici de toute façon).

Bien sûr, je ne sais pas avec certitude si cette méthode vous apporterait une amélioration en ce qui concerne le nombre de fichiers d'entrée traités par Ghostscript, mais ça vaut le coup d'essayer ...