2010-07-09 9 views
5

J'ai besoin de convertir rtf en texte brut. J'avais l'habitude d'écrire une fonction qui supprime les en-têtes rtf mais ce n'est jamais parfait.Delphi: le meilleur moyen de convertir rtf en texte

Ainsi, une option peut être l'utilisation d'un TRichEdit créé lors de l'exécution (quelque chose comme décrit here mais fait bien sûr lors de l'exécution). Mais y a-t-il un autre moyen? Y at-il une fonction RTL pour cela ou une meilleure approche?

MISE À JOUR:

En this question j'ai écrit la version finale de mon rtf à la procédure de texte.

+0

Qu'est-ce qui ne va pas avec TRichEdit? Et qui génère le RTF que vous voulez convertir? Si l'espoir de convertir RTF généré à partir de Microsoft Word, le TRichEdit d'origine Microsoft pourrait être la meilleure option. –

+2

@Cosmin Prund: Il peut sembler un peu exagéré de créer un contrôle GUI (même s'il n'est jamais affiché à l'écran) juste pour faire une conversion de fichier en arrière-plan. Mais bien sûr, cela fonctionne. –

+1

Exactement, c'était ma préoccupation. Pour sûr que cela fonctionne. De toute façon, il semble que c'est le chemin. – LaBracca

Répondre

3

Si vous voulez vraiment trouver un moyen de faire cette conversion, vous devriez voir comment la classe TConversion est implémentée dans la classe TRichEditStrings. Ces classes sont dans ComCtrls.pas. En comprenant comment la conversion est effectuée dans les contrôles RichEdit, vous pourrez peut-être écrire les vôtres. Toutefois, en examinant les aspects pratiques de la mise en œuvre de ce système et en ne sachant pas quelles sont les exigences de performance pour votre question, je choisirais l'approche de conversion TRichEdit décrite dans votre lien.

+7

TRichEditStrings n'implémente aucune conversion, tout le travail est effectué par le contrôle RichEdit (TRichEdit n'est rien d'autre qu'un wrapper autour du contrôle RichEdit de Microsoft). L'écriture de votre propre implémentation RTF à TEXT est simple pour le cas simple et très compliqué pour les cas complexes. Microsoft Word peut enregistrer n'importe quel document au format RTF, en conservant tous les formats. Pensez au document Word le plus fasciné que vous ayez jamais vu, en utilisant la structure de table la plus tordue; Imaginez que quelqu'un enregistre cela comme RTF et vous demande de le convertir en texte! –

+0

Ok, je vais y aller. Il y a 2 problèmes qui devraient être résolus d'une autre manière: J'ai besoin de chercher dans un champ DB rtf (pour cela l'astuce que j'utilise est de chercher la chaîne dans le texte rtf, ce n'est pas l'astuce recherche de mots simples), je dois retourner "en texte" dans une grille le contenu de nombreux champs rtf (ici la solution de contournement renvoie le texte formaté rtf). Bien sûr, une alternative pourrait être d'enregistrer aussi un champ de texte, donc pour chaque RTF que je sauvegarde, je sauvegarde aussi la version texte seulement, peut être une bonne approche dans une nouvelle application. – LaBracca

0

La page

  • http://www.delphipraxis.net/152766-rtf-nach-html.html pour certains des pointeurs vers des composants, des bibliothèques et d'autres sources pour les convertisseurs RTF, certains d'entre eux comprennent une RTF à l'option de conversion de texte.

  • ScroogeXHTML, une bibliothèque pour la conversion RTF en HTML/XHTML, pourrait être utile. Il prend en charge un sous-ensemble de la norme RTF et est facile à personnaliser. Il a une option de format d'exportation PlainText. Note: Je suis l'auteur de ScroogeXHTML pour Delphi/ScroogeXHTML pour la plate-forme Java. C'est un produit commercial.