2008-09-30 17 views
2

J'ai un script qui prend un document RTF téléchargé par l'utilisateur et fusionne des données de personne dans la lettre (nom, adresse, etc), et le fait pour plusieurs personnes. Je fusionne le contenu de la lettre, puis le combine avec le contenu de la prochaine lettre de fusion, pour tous les enregistrements de personnes.Concaténer des fichiers RTF en PHP (REGEX)

Affectivement, je combine un seul document RTF en lui-même pour autant d'enregistrements de personnes auxquels j'ai besoin de fusionner la lettre. Cependant, je dois d'abord retirer le balisage RTF de fermeture et l'ouverture du balisage RTF de chaque fusion, sinon le RTF ne sera pas rendu correctement. Cela ressemble à un travail pour les expressions régulières.

Essentiellement, je besoin d'une regex qui enlèvera toute la chaîne:

} \ n \ Page QUELQUE CHOSE \ par

Exemple, cette regex correspondrait à ceci:

crap 
} 
\page{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fswiss\fcharset0 Arial;}} 
{\*\generator Msftedit 5.41.15.1515;}\viewkind4\uc1\pard\f0\fs20 September 30, 2008\par 
more crap 

Ainsi pourrais-je rends simplement:

crap 
\page 
more crap 

RegEx est-il la meilleure approche ici?

MISE À JOUR: Pourquoi dois-je utiliser RTF?

Je souhaite autoriser l'utilisateur à télécharger une lettre type que le système utilisera ensuite pour créer les lettres fusionnées. Comme RTF est un texte simple, je peux le faire assez facilement dans le code. Je sais, RTF est un désastre d'une spécification, mais je ne connais pas d'autre bonne alternative.

Répondre

2

Je voudrais remettre en question l'utilisation de RTF dans ce cas. Ce n'est pas tout à fait clair pour moi ce que vous essayez de faire globalement, donc je ne peux pas nécessairement suggérer quelque chose de mieux, mais si vous pouvez essayer d'expliquer votre projet plus largement, peut-être que je peux vous aider.

Si cela est vraiment la façon dont vous voulez aller bien, ce regex m'a donné la sortie correcte compte tenu de votre entrée:

$output = preg_replace("/}\s?\n\\\\page.*?\\\\par\s?\n/ms", "\\page\n", $input); 
+0

Je pense que je vais reposer cette question comme une meilleure question. Merci de votre aide. – Justin

+0

Cette réponse m'a vraiment aidé parce que j'ai vu des solutions qui ne fonctionnent que pour PHP 5.4 et ainsi de suite, mais en quelque sorte je suis coincé sur 5.3 –

1

Pour cela, je peux dire beurk beurk beurk. Néanmoins, le cludge de rcar fonctionnera probablement, sauf dans certains cas bizarres où RTF ne se termine pas réellement sous cette forme, ou les styles à l'échelle du document contiennent des informations importantes qui gâchent complètement le formatage, ou tout autre mode de défaillance.