2008-11-14 18 views
1

J'ai besoin de déterminer quelles pages d'un document Word sur lequel un mot-clé se produit. J'ai quelques outils qui peuvent m'obtenir le texte du document, mais rien qui me indique sur quelles pages le texte se produit dessus. Est-ce que quelqu'un a un bon point de départ pour moi? J'utilise .NETComment puis-je récupérer chaque page de texte dans un document Word séparément (en utilisant .NET)?

Merci!

edit: Contrainte supplémentaire: Je ne peux pas utiliser l'interopérabilité.

edit2: Si quelqu'un connaît des bibliothèques stables capables de faire cela, cela serait également utile. J'utilise Aspose, mais pour autant que je sache, cela n'a rien.

Répondre

2

Voici comment j'obtiens le texte, je crois que vous pouvez définir définir la plage de sélection à une page, alors vous pouvez tester ce texte, peut-être un peu en arrière de ce dont vous avez besoin, mais pourrait être un bon point de départ.

Microsoft.Office.Interop.Word.Application wordApplication = new Microsoft.Office.Interop.Word.Application(); 
object missing = Type.Missing; 
object fileName = @"c:\file.doc"; 
object objFalse = false; 

wordApplication.DisplayAlerts = Microsoft.Office.Interop.Word.WdAlertLevel.wdAlertsNone; 
Microsoft.Office.Interop.Word.Document doc = wordApplication.Documents.Open(ref fileName, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,ref objFalse, ref missing, ref missing, ref missing, ref missing); 

//I belevie you can define a SelectionRange and insert here 
doc.ActiveWindow.Selection.WholeStory(); 
doc.ActiveWindow.Selection.Copy(); 

IDataObject data = Clipboard.GetDataObject(); 
string text = data.GetData(DataFormats.Text).ToString(); 

doc.Close(ref missing, ref missing, ref missing); 
doc = null; 

wordApplication.Quit(ref missing, ref missing, ref missing); 
wordApplication = null; 
+0

Merci! J'apprécie vraiment la réponse. Je suppose que je devrais avoir mentionné mes contraintes - ne peut pas utiliser Interop. –

+0

Je marque ceci comme la meilleure réponse que je pourrais obtenir. J'espère que ça aidera quelqu'un d'autre dans le futur. –

0

Comment définissez-vous une page?

Si vous ne comptez que les sauts de page/page, c'est complexe, mais faisable. Si vous voulez compter les sauts de page souples, la tâche devient très très difficile et quelque peu insignifiante. Considérons que la détermination de l'endroit où les pauses soft-page atterrissent est générée dynamiquement au moment de l'exécution et n'est pas stockée dans le fichier lui-même. Cela dépend d'un grand nombre de facteurs, y compris le pilote d'imprimante actif (oui, il peut changer pour le même fichier sur un autre ordinateur), les polices, le crénage, l'interlignage, les marges, etc., etc.

+0

Malheureusement, je veux la version douce, très très difficile. Je ne dirais pas que c'est inutile. C'est la seule définition de page qui signifie réellement quelque chose dans le monde réel (tout le reste n'est pas vraiment WYSIWYG). J'apprécie vraiment la clarification, et merci beaucoup pour votre réponse. –

+0

Dans ce cas, vous devrez probablement imprimer sur un format de page fixe tel que tiff ou PDF pour cela, mais assurez-vous de toujours effectuer l'opération sur la même machine avec les mêmes pilotes d'impression sélectionnés pour obtenir des résultats cohérents . – JohnFx

0

Une façon merdique de le faire avec Aspose est de convertir le fichier Word en format PDF, puis de saisir du texte sur chaque page.

Je ne sais rien sur les internes d'Aspose ou comment ils définissent leurs pages souples lors de la conversion, mais c'est le meilleur que j'ai jusqu'à présent.

0

Merci d'utiliser Aspose.Words.

Dans l'API publique, nous n'avons pour l'instant que les informations "flux-document", par ex. paragraphes, tableaux, listes, etc. En interne, nous construisons un modèle de mise en page qui a des classes comme la page, le bloc de texte, la ligne de texte et ainsi de suite. Il y a bien sûr des liens internes entre le modèle de document et le modèle de mise en page et il est possible de savoir quelle page se termine où et tout. Rendre cette information disponible via l'API publique est (encore, toujours) en haut de notre liste de priorités.

Avez-vous enregistré votre demande dans les forums de support Aspose.Words? Nous utilisons cette information pour maintenir un système de vote et nous allons travailler sur les fonctionnalités qui obtiennent plus de votes en premier.

+0

Je ne suis pas sûr de consigner la demande, mais j'ai posé des questions à ce sujet sur un thread existant. On m'a dit que cela arrivait et que je n'ai plus jamais entendu. Convertir en PDF, puis en utilisant GetNextPageText a fonctionné pour moi, mais ne sera probablement pas bien à l'échelle dans le futur.Si vous avez fini par le rendre public, ce serait vraiment génial. Merci de votre intérêt! –