Récupérer le contenu des champs d'un pdf - formulaire

Signaler
Messages postés
13
Date d'inscription
vendredi 19 novembre 2004
Statut
Membre
Dernière intervention
3 juillet 2008
-
Messages postés
13
Date d'inscription
vendredi 19 novembre 2004
Statut
Membre
Dernière intervention
3 juillet 2008
-
Bonjour à toutes et à tous !

Je souhaiterais contrôler l'ouverture de fichier pdf (ça c'est fait) pour ensuite récupérer le contenu de certains champs - les pdf étant tous en formulaire avec les mêmes champs (ça c'est ce qu'il me reste à faire...).

Pour l'ouverture des fichiers pdf j'utilise le code suivant :

Call Shell("C:\CHEMIN\Acrobat.exe C:\MonPdf.pdf", vbNormalFocus)

Quelqu'un pourrait-il m'indiquer comment récupérer les info contenues dans les champs du pdf qui a été ouvert ?

Merci d'avance et bonne journée à tous le monde.

Nicdouille
A voir également:

15 réponses

Messages postés
672
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
2 juin 2016
1
Bonjour

peux-tu donner un example de champ recherché?
Messages postés
13
Date d'inscription
vendredi 19 novembre 2004
Statut
Membre
Dernière intervention
3 juillet 2008

Le pdf a été créé en mode formulaire avec des champs pouvant porter des noms comme "nom_prenom_candidat_1"

Je ne sais pas si cela répond à ta question. Donnes-moi plus de précisions si je t'ai répondu à côté de la plaque...

Nicdouille
Messages postés
672
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
2 juin 2016
1
Je crois que Acrobat enregistre sous un format assez simple commencant par un slash , le nom du champ puis un espace et la valeur duc champ encadré d'une parenthèse ouvrante et d'une parenthèse fermante soit:

"/" + nom_de_champ + " ("+ valeur_du_champ + ")"
Rien de scientifique, je récupére ainsi des champs assez classiques (titre et auteur princuiaplement) donc rien à voir avec ton formulaire

Bon courage
Messages postés
13
Date d'inscription
vendredi 19 novembre 2004
Statut
Membre
Dernière intervention
3 juillet 2008

Merci pour cette info.

Pourrais-tu juste me préciser quel code tu utilise pour "accéder" au fichier pdf (un peu à l'image des classeurs excel : "activeworkbook.activesheet."). Pour le moment je n'ai pas encore trouvé les bons "termes" pour obtenir "l'accès" à la feuille active de mon pdf.


Merci d'avance pour ton coup de pouce.

Nicdouille
Messages postés
672
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
2 juin 2016
1
Je n'utilise aucun objet pariculier

'
Public Type FileProp
sTitle As String
sAuthor As String
sComments As String
sSubject As String
sKeyWords As String
End Type

Sub ReadPdf(sFile As String, sDataSearched As String, ByRef sDataFound As String)
Dim iFile1 As Integer
Dim i As Integer
Dim sLine As String
Dim sBuf As String
Dim iFrom As Integer, iTo As Integer

iFile1 = FreeFile
sDataFound = ""
Open sFile For Input As #iFile1
sBuf = String(LOF(iFile1), " ")
Line Input #iFile1, sBuf
If InStr(sBuf, sDataSearched) Then
iFrom = InStr(sBuf, sDataSearched) + Len(sDataSearched)
iTo = InStr(sBuf, ")")
sDataFound = Mid(sLine, iFrom, iTo)
End If
Close #iFile1
End Sub

Public Sub readPDFHeadProperties(sFile As String, _
ByRef oProp As FileProp)

Dim s As String
Call ReadPdf(sFile, "/Author (", s)
oProp.sAuthor = s
Call ReadPdf(sFile, "/Title (", s)
oProp.sTitle = s
Call ReadPdf(sFile, "/Subject (", s)
oProp.sSubject = s
Call ReadPdf(sFile, "/Keywords (", s)
oProp.sKeyWords = s

End Sub
Messages postés
13
Date d'inscription
vendredi 19 novembre 2004
Statut
Membre
Dernière intervention
3 juillet 2008

Merci beaucoup pour ta réponse !

Je pense que ça doit correspondre à ce que je recherche mais j'ai juste une dernière petite question :

Comment fais-tu pour lancer ces lignes sous vba Excel (dès qu'il y a des propriétés dans les parenthèses de la fonction Sub, vb ne les considère plus comme des macros et ne les propose pas à l'exécution).

Merci d'avance pour ta réponse et pour le moment, un grand merci pour ton aide précieuse !

Nicdouille
Messages postés
672
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
2 juin 2016
1
Milles excuses c'est du VB et pas du VBA

Le mode d'ouverture du fichier PDF est à revoir (en VB : open sfile for binary access read as #) en VBA je sais pas trop
Messages postés
13
Date d'inscription
vendredi 19 novembre 2004
Statut
Membre
Dernière intervention
3 juillet 2008

Je viens d'installer Visual Basic 6 mais je ne parviens pas à lancer les fonctions.

J'ai créé une "form1" avec un bouton et j'ai placé ton code dans un "module1".

La fonction associée à mon bouton est :

Private Sub Command1_Click()
Call readPDFHeadProperties
End Sub

En utilisant le bouton j'ai l'indication : "Erreur de compilation : Cet argument n'est pas facultatif."

Pourrais-tu m'envoyer le code pour utiliser ces fonctions stp ou m'envoyer par la messagerie du site ton projet contenant ce code si tu le veux bien. J'avoue que cela fais un bon moment que je ne me suis pas replongé dans du visual basic pur...

Merci d'avance.

Nicdouille
Messages postés
672
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
2 juin 2016
1
TOn code doit être

Private Type FileProp
sTitle As String
sAuthor As String
sComments As String
sSubject As String
sKeyWords As String
End Type

Private Sub Command1_Click()
Dim prop as FileProp
Call readPDFHeadProperties(("C:\CHEMIN\Acrobat.exe C:\MonPdf.pdf",Prop)
' soit ceci
if prop.sTitle<>"" then Msgbox prop.sTitle
if prop.sAuthor<>"" then Msgbox prop.sAuthor
' soit remplir des champs TextBox "Title" et "Author" dans ta form
Title.text=prop.sTitle
Author.text=prop.sAuthor

End Sub
Messages postés
13
Date d'inscription
vendredi 19 novembre 2004
Statut
Membre
Dernière intervention
3 juillet 2008

C'est encore moi !

Désolé pour le dérangement...

Je bloque sur l'ouverture du pdf : message d'erreur "Erreur d'exécution '52' : Nom ou numéro de fichier incorrect." se rapportant à la  ligne :

Open sFile For Binary Access Read As #iFile1

de la fonction Sub ReadPdf
Pour info, mon code est :

Private Sub Command1_Click()
Dim prop As FileProp
Call readPDFHeadProperties("C:\Program Files\Adobe\Acrobat 7.0\Acrobat\Acrobat.exe C:\INITIAL 03_03_06.pdf", prop)

If prop.sTitle <> "" Then MsgBox prop.sTitle
If prop.sAuthor <> "" Then MsgBox prop.sAuthor
end sub

Merci d'avance pour ton coup de pouce.

P.S. : Je n'ai pas copier le code :
Private Type FileProp
  sTitle As String
  sAuthor   As String
  sComments As String
  sSubject As String
  sKeyWords As String
End Type

puisqu'il est déjà déclaré dans public (et me bloque si je le déclare en Private)

Nicdouille
Messages postés
672
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
2 juin 2016
1
Bonjour

as tu
iFile1=FreeFile
avant open?

Sinon inverse la lecture des propriétés et le chargement de ton fichier par Acrobat
Messages postés
13
Date d'inscription
vendredi 19 novembre 2004
Statut
Membre
Dernière intervention
3 juillet 2008

Re-salut,

Je suis désolé mais je n'ai pas tout à fait saisi ce que tu me demande de faire...

Si ça peut te donner une orientation sur la source d'erreur, voici le code inscrit dans mon projet :

MODULE 1 :

Public Type FileProp
  sTitle As String
  sAuthor   As String
  sComments As String
  sSubject As String
  sKeyWords As String
End Type


Sub ReadPdf(sFile As String, sDataSearched As String, ByRef sDataFound As String)
Dim iFile1 As Integer
Dim i As Integer
Dim sLine As String
Dim sBuf As String
Dim iFrom As Integer, iTo As Integer
iFile1 = FreeFile
sDataFound = ""
Open sFile For Binary Access Read As #iFile1


sBuf = String(LOF(iFile1), " ")
Line Input #iFile1, sBuf
If InStr(sBuf, sDataSearched) Then
   iFrom = InStr(sBuf, sDataSearched) + Len(sDataSearched)
   iTo = InStr(sBuf, ")")
   sDataFound = Mid(sLine, iFrom, iTo)
End If
Close #iFile1
End Sub


Public Sub readPDFHeadProperties(sFile As String, ByRef oProp As FileProp)
    
Dim s As String
    Call ReadPdf(sFile, "/Author (", s)
    oProp.sAuthor = s
    Call ReadPdf(sFile, "/Title (", s)
    oProp.sTitle = s
    Call ReadPdf(sFile, "/Subject (", s)
    oProp.sSubject = s
    Call ReadPdf(sFile, "/Keywords (", s)
    oProp.sKeyWords = s
   
End Sub




FORM 1 :

Private Sub Command1_Click()
Dim prop As FileProp
Call readPDFHeadProperties("C:\Program Files\Adobe\Acrobat 7.0\Acrobat\Acrobat.exe C:\Documents and Settings\Nicolas\Bureau\INITIAL 03_03_06.pdf", prop)

If prop.sTitle <> "" Then MsgBox prop.sTitle
If prop.sAuthor <> "" Then MsgBox prop.sAuthor


End Sub

Je te rmercie pour l'aide que tu m'apporte,

A bientôt,

Nicdouille
Messages postés
672
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
2 juin 2016
1
L'argument Dans l'appel à ReadPdfHeadProperties
est le chemin du fichier pdf seulement
Enlève l'appel à Acrobat.exe
Call readPDFHeadProperties("C:\Documents and Settings\Nicolas\Bureau\INITIAL 03_03_06.pdf", prop)
Messages postés
13
Date d'inscription
vendredi 19 novembre 2004
Statut
Membre
Dernière intervention
3 juillet 2008

L'erreur est passée... merci.

Seulement, j'en arrive à une autre erreur : "Erreur d'exécution '62' : L'entrée dépasse la fin de fichier"

avec un focus sur la ligne :

Line Input #iFile1, sBuf

(avec, donné par le débogage : sBuf="" et iFile1=1)

Nicdouille
Messages postés
13
Date d'inscription
vendredi 19 novembre 2004
Statut
Membre
Dernière intervention
3 juillet 2008

OK,

j'ai changé le chemin de mon fichier pdf en le mettant directement à la racine du disque C: (ce qui évite le message d'erreur 62)

j'ai indiqué dans les propriétés du fichier des infos dans les lignes "auteur" et "titre", mais je n'ai aucun retour...

Nicdouille