[R] Fonction de recherche dans un PDF
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
[R] Fonction de recherche dans un PDF
Bonjour,
Pourriez-vous me renseigner sur les fonctions d'autoit concernant le traitement des fichiers PDF ?
Je serais surtout intéressé par une fonction de recherche dans ce type de fichier avec affichage de la page contenant l'objet de la recherche. Existe-t-elle ?
Je vous remercie.
Pourriez-vous me renseigner sur les fonctions d'autoit concernant le traitement des fichiers PDF ?
Je serais surtout intéressé par une fonction de recherche dans ce type de fichier avec affichage de la page contenant l'objet de la recherche. Existe-t-elle ?
Je vous remercie.
Modifié en dernier par aulus le dim. 08 déc. 2013 13:10, modifié 1 fois.
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: [..] fonction de recherche dans un PDF
A ma connaissance il n'existe pas de fonctions Autoit dédiées, du moins les udf existantes sur le sujet ne sont pas franchement convaincantes
Le plus simple est d'utiliser un soft externe libre en ligne de commande depuis Autoit pour convertir le pdf en txt - on fait ensuite la recherche dans le txt
Personnellement j'utilise pdftotext, dans celui-là les options permettent de traiter une page après l'autre (ce qui permet de mettre un n° de page sur un résultat de recherche), de respecter la mise en forme initiale (donc avoir un index de ligne)... autre option possible (pas testé) la sortie du texte en stdout plutôt qu'en fichier txt
Le plus simple est d'utiliser un soft externe libre en ligne de commande depuis Autoit pour convertir le pdf en txt - on fait ensuite la recherche dans le txt
Personnellement j'utilise pdftotext, dans celui-là les options permettent de traiter une page après l'autre (ce qui permet de mettre un n° de page sur un résultat de recherche), de respecter la mise en forme initiale (donc avoir un index de ligne)... autre option possible (pas testé) la sortie du texte en stdout plutôt qu'en fichier txt
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Re: [..] fonction de recherche dans un PDF
Ca à l'air excellent XPDF, Mikell ! J'avais déjà vu passer 2-3 liens, mais je pensais que c'était que sous Linux.
Du coup, pour m'amuser, j'ai essayé de faire deux petites fonctions qui pourraient être sympa.
@aulus : si ça te convient, il te restera à gérer l'ouverture du PDF à la page souhaité. Perso, j'utiliserais Sumatra PDF qui te permettra de faire ça super-facilement.

Du coup, pour m'amuser, j'ai essayé de faire deux petites fonctions qui pourraient être sympa.
@aulus : si ça te convient, il te restera à gérer l'ouverture du PDF à la page souhaité. Perso, j'utiliserais Sumatra PDF qui te permettra de faire ça super-facilement.
► Afficher le texteLe petit exemple
► Afficher le texteXPDF.au3
Modifié en dernier par jguinch le sam. 07 déc. 2013 21:59, modifié 1 fois.
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Re: [..] fonction de recherche dans un PDF
Bonjour et merci à tous deux pour vos pistes et vos codes. Je vais tester tout ça ce week-end.
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: [..] Fonction de recherche dans un PDF
@jguinch
Cela dit ces outils sont super, le seul truc dommage c'est que le viewer ne fonctionne pas sous Windows ...
Sans création de fichier txt :

Code : Tout sélectionner
; Name...........: _XFDF_Info
; Description....: Disables the specified network adapter.
; Remark.........: Doesn't make the coffee
Sans création de fichier txt :
► Afficher le texte
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Re: [..] Fonction de recherche dans un PDF
J'ai testé les 2 codes, après avoir installé pdftotext.exe , pdfinfo.exe et xpdf.au3. Je n'obtiens rien à l'exécution.
Cette ligne est-elle correcte (code de jguinch) :
Et (code de mikell) :
Cette ligne est-elle correcte (code de jguinch) :
Code : Tout sélectionner
$sMyPDF = @ScriptDir & "\mon_fichier.pdf"
$sTextToSearch = "mot_a_trouver"
Code : Tout sélectionner
$run = Run( "pdftotext.exe mon_fichier.pdf", "", @SW_HIDE, $STDOUT_CHILD)
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: [..] Fonction de recherche dans un PDF
Il faut indiquer comment sortir le texte
syntaxe : "pdftotext.exe -options entrée.pdf sortie.txt"
Pour mon code :-layout : option pour respecter la mise en forme
- : impose une sortie en stdout
A tester en mettant tout dans le même dossier
Voilà mon test (XP 32 bits)
syntaxe : "pdftotext.exe -options entrée.pdf sortie.txt"
Pour mon code :
Code : Tout sélectionner
$run = Run( "pdftotext.exe [color=#FF0000]-layout[/color] mon_fichier.pdf [color=#FF0000][size=150][b]-[/b][/size][/color]", "", @SW_HIDE, $STDOUT_CHILD)
- : impose une sortie en stdout
A tester en mettant tout dans le même dossier
Voilà mon test (XP 32 bits)
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Re: [..] Fonction de recherche dans un PDF
Effectivement, mon code n'était pas bon. Le test a réussi. Toutefois, la recherche s'effectue uniquement sur la page 1.
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: [..] Fonction de recherche dans un PDF
Si le test dans mon zip t'affiche 2 msgbox c'est que dans le principe ça fonctionne
Ensuite tu peux y remplacer mon pdf par le tien, pour voir
Si ça fonctionne encore c'est probablement dans ton code que ça se passe mais difficile de dire quoi que ce soit sans le voir...
Ensuite tu peux y remplacer mon pdf par le tien, pour voir
Si ça fonctionne encore c'est probablement dans ton code que ça se passe mais difficile de dire quoi que ce soit sans le voir...
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Re: [..] Fonction de recherche dans un PDF
J'utilise votre code tel quel, ne modifiant que le nom du fichier pdf à ouvrir et ajoutant le nom du fichier txt à créer. Avec votre fichier pdf, j'obtiens bien 2 msgbox. Mais avec mon propre fichier pdf, ne s'ouvre qu'une seule msgbox nommée page 1, alors que mon pdf en compte pas mal.
Je me demande si tous les fichiers pdf sont structurés de la même manière.
Je me demande si tous les fichiers pdf sont structurés de la même manière.
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: [..] Fonction de recherche dans un PDF
Aucune idée... faut faire des tests
Ce code est censé retourner l'intégralité du pdf dans le txtSi ça ne retourne que la page 1, faut essayer de forcer la lecture de la page 2Pas moyen de voir le pdf en question ?
Ce code est censé retourner l'intégralité du pdf dans le txt
Code : Tout sélectionner
Run("pdftotext.exe mon_fichier.pdf sortie.txt")
Code : Tout sélectionner
Run("pdftotext.exe -f 2 -l 2 page_2.txt")
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Re: [..] Fonction de recherche dans un PDF
Le fichier txt contient bien tout le contenu du pdf. Mais une seule msgbox s'affiche, et non une par page.
Fichier pdf : ftp://ftp.bnf.fr/582/N5821613_PDF_1_-1DM.pdf
Fichier pdf : ftp://ftp.bnf.fr/582/N5821613_PDF_1_-1DM.pdf
Re: [..] Fonction de recherche dans un PDF
@mikell : oui, j'ai fais un copié-collé depuis une des mes fonctions... un peu trop vite, je vais corriger
aulus, j'ai testé avec mon code et ton PDF, ça marche plutôt bien...

aulus, j'ai testé avec mon code et ton PDF, ça marche plutôt bien...
► Afficher le texte
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: [..] Fonction de recherche dans un PDF
@jguinch
j'avais compris - it was a joque
Sinon je sais pas trop quoi dire...
Je viens de tester ce script (en renommant le pdf en '3.pdf')qui m'a bien retourné 85 fichiers txt
Et aussi 85 msgbox (donc une recherche par page sans création de fichier est possible)
j'avais compris - it was a joque

Sinon je sais pas trop quoi dire...
Je viens de tester ce script (en renommant le pdf en '3.pdf')
Code : Tout sélectionner
#include <Constants.au3>
$run = Run( "pdftotext.exe -layout 3.pdf -", "", @SW_HIDE, $STDOUT_CHILD)
Local $txt
While 1
$txt &= StdoutRead($run)
If @error Then ExitLoop
WEnd
$txt = StringRegExpReplace($txt, '(\s*$)', "")
Local $aPages = StringSplit($txt, chr(12) )
For $i = 1 to $aPages[0]
; MsgBox(0, "page " & $i, $aPages[$i])
FileWrite(StringFormat("%02i", $i) & ".txt", $aPages[$i])
Next
Et aussi 85 msgbox (donc une recherche par page sans création de fichier est possible)
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Re: [..] Fonction de recherche dans un PDF
Bonjour,
Ca fonctionne aussi chez moi. Merci encore pour tout ce travail. Je pense que les dysfonctionnements provenaient du nom de fichier long du pdf qui me servait de test.
Afin que la page contenant le ou les mots cherchés s'ouvre dans le lecteur pdf, j'ai codé comme ceci :
Grand merci pour votre temps de réflexion, de codage et de tests.
Ca fonctionne aussi chez moi. Merci encore pour tout ce travail. Je pense que les dysfonctionnements provenaient du nom de fichier long du pdf qui me servait de test.
Afin que la page contenant le ou les mots cherchés s'ouvre dans le lecteur pdf, j'ai codé comme ceci :
Code : Tout sélectionner
#include <Constants.au3>
$run = Run("pdftotext32.exe -layout 3.pdf -", "", @SW_HIDE, $STDOUT_CHILD)
Local $txt
Local $sTextToSearch = "desinat in piscem"
While 1
$txt &= StdoutRead($run)
If @error Then ExitLoop
WEnd
$txt = StringRegExpReplace($txt, '(\s*$)', "")
Local $aPages = StringSplit($txt, chr(12) )
For $i = 1 to $aPages[0]
If StringInStr($aPages[$i], $sTextToSearch) Then
Local $pdf = ' "' & @ScriptDir & '\3.pdf' & '"'
Run("C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe /A page=" & $i & $pdf)
EndIf
Next
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: [R] Fonction de recherche dans un PDF
Cette recherche ça ferait une belle fonction à rajouter au XPDF.au3 de jguinch
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Re: [R] Fonction de recherche dans un PDF
C'est vrai mikell, on pourrait l'intégrer et proposer ça dans la section UDF, ça peut être utile.
Mais comment tu vois ça, toi ?
La fonction de recherche va faire la conversion en txt (directement dans stdout), ça c'est OK. Mais qu'est-ce qu'elle va retourner ?
- 1 si le mot a été trouvé et 0 si pas trouvé ?
- le nombre d’occurrences trouvées ?
- un tableau à 2 dimensions avec le numéro de page et le nombre d'occurrences dans la page ?
- ... ?
On peut faire ça :
T'en penses quoi ?
Mais comment tu vois ça, toi ?
La fonction de recherche va faire la conversion en txt (directement dans stdout), ça c'est OK. Mais qu'est-ce qu'elle va retourner ?
- 1 si le mot a été trouvé et 0 si pas trouvé ?
- le nombre d’occurrences trouvées ?
- un tableau à 2 dimensions avec le numéro de page et le nombre d'occurrences dans la page ?
- ... ?
On peut faire ça :
► Afficher le texte
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: [R] Fonction de recherche dans un PDF
Hem ça me rappelle quelque chose ce flag...
Le flag 3 est-il vraiment utile ?
Par contre peut-être une array 2D avec [0] n° de page - [1] nb d'occurences dedans ? et
$result[0][0] = number of matching pages
$result[0][1] = global number of occurrences found in ze whole pdf (un peu comme dans les FileList*) faut voir
Peut-être aussi (puisque les options de pdftotxt le permettent)Et préciser que la recherche est case insensitive par défaut
Mais c'est que des idées comme ça, globally en fait je te fais la plus entière confiance

Code : Tout sélectionner
Flag - Values
0 - Returns 1 (matched) or 0 (no match)
1 - Return array of matches.
Par contre peut-être une array 2D avec [0] n° de page - [1] nb d'occurences dedans ? et
$result[0][0] = number of matching pages
$result[0][1] = global number of occurrences found in ze whole pdf (un peu comme dans les FileList*) faut voir
Peut-être aussi (puisque les options de pdftotxt le permettent)
Code : Tout sélectionner
; start - Page number to start searching at (default is 1)
; end - Page number to stop searching (default is 0 = eof)
Mais c'est que des idées comme ça, globally en fait je te fais la plus entière confiance

" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )