2011-09-22 5 views
3

J'ai le contenu suivant de code PostScript qui est initialement généré par l'imprimante Ghostscript sur Windows XP.Comment échanger du texte en PostScript

/Euro /Times-BoldItalic /Times-BoldItalic-Copy BuildNewFont 
} if 
F /F1 0 /256 T /Times-BoldItalic mF 
/F1S52 F1 [82.664 0 0 -82.664 0 0 ] mFS 
F1S52 Ji 
581 547 M (This is just a little test content)[55 42 42 23 46 37 42 37 28 21 51 42 21 51 46 42 32 66 42 21 60 42 55 21 21 21 55 37 32 46 55 42 
23 0]xS 
; 

Je veux juste modifier le texte mais si je tente de modifier le texte entre les crochets le texte est déformé, peu importe si le nouveau texte est plus ou moins.

J'ai essayé de comprendre ce que le code ci-dessus fait, mais je n'ai pas trouvé de documentation appropriée pour cela.

Pourriez-vous s'il vous plaît m'aider à comprendre ce que le code - en particulier la ligne commençant par '581' signifie et comment je peux éditer le texte sans détruire la mise en page?

Merci d'avance!

PS: Je besoin de cela pour un script python qui échange automatiquement certains paragraphes et donc je ne suis pas à la recherche d'un outil tiers pour l'édition, un outil d'édition de PDF ou quelque chose comme ça;)

Répondre

2

La ligne commençant par ' 581 'se déplace apparemment vers le point 581 547 puis pousse une chaîne et un tableau qui est utilisé par xS en quelque sorte. Je soupçonne que xS est une version étendue de show qui utilise ce tableau, mais je ne sais pas comment. Vous devez regarder le début du fichier PS pour trouver la définition de xS. Aussi mFS semble être une transformation parce qu'elle obtient une matrice. Quoi qu'il en soit, si le fichier PS contient du texte composé, il est peu probable que vous puissiez changer le texte à l'intérieur sans casser la composition.

+0

@Ihf je vous remercie pour cet indice, vous aviez raison!Juste une dernière question: Pourriez-vous s'il vous plaît me dire quel est le sens du colon et du point-virgule dans Postscript? Je ne les ai pas trouvés dans aucune référence aussi. Merci d'avance! – muffel

+1

Je ne pense pas que le colon et le point-virgule aient une signification prédéfinie, mais ils peuvent être définis pour avoir n'importe quoi, comme une procédure nommée. Regardez le début du fichier PS pour trouver la définition. – lhf

+0

@muffel, j'ai trouvé un fichier à jouer avec [ici] (http://www.megaskills.org/media/docs/source/EducationalAccountability.prn). 'xs' est juste' xshow', qui utilise le tableau pour déplacer les lettres. D'où le désordre quand vous changez la longueur du texte (et même si vous ne le faites pas). Le deux-points signifie 'gsave' et le point-virgule signifie' grestore'. Les définitions sont près de '%% BeginResource: fichier Pscript_Win_Basic'. – lhf

1

Je suis d'accord avec @lhf. Vous devriez vraiment faire ce genre d'édition "en amont" du niveau postscript. Quelle que soit l'application source, les scripts doivent être pris en compte. Si l'application n'a pas de script natif, vous pouvez toujours l'interfacer avec quelque chose comme WinBatch. J'ai utilisé WinBatch pour créer des assistants de macro pour alimenter des séquences de touches sur un client telnet3270: activation des opérations "batch" via le système interactif. Pour unix, il faut s'attendre.

2

Le xS est presque certainement juste xshow qui prend la chaîne et le tableau et en utilisant le tableau pour créner le texte. Vous pouvez remplacer le texte en utilisant show simple. Où que vous voyez:

(This is just a little test content)[...]xS 

remplacer par:

(This is my replacement content) show 

Le préambule de votre fichier aura un nom raccourci pour show mais vous ne devez pas l'utiliser. Ce texte peut toujours échouer, mais si vous modifiez simplement une entrée dans un formulaire ou quelque chose d'aussi isolé (un titre, une note de bas de page, etc.), tout ira probablement bien.

Si vous voulez vous faire plaisir, vous pouvez profiter du fait que PostScript est un langage de programmation à part entière. Vous pouvez écrire une fonction qui détermine la largeur de l'ancienne chaîne (pour ce xshow vous trouverez le bon bord du dernier élément du tableau plus le stringwidth du dernier caractère de la chaîne) puis calcule la longueur de votre nouvelle chaîne (stringwidth) puis utilise ashow pour comprimer/étirer votre chaîne à sa place.

Questions connexes