Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Caractéristiques d'un fichier PDF | |
| | Auteur | Message |
---|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Caractéristiques d'un fichier PDF Ven 17 Mai 2013 - 16:35 | |
| Une petite (moyenne) sub, qui fait appel à KGF.dll, qui renvoie dans le clipboard les caractéristiques d'un fichier pdf: date de création, auteur, etc. Avec un exemple d'utilisation, sur KGF.pdf... - Code:
-
DIM f$ f$ = "C:\PANORAMIC\KLAUS\DLLs\KGF.pdf": ' fichier pdf à examiner WIDTH 0, 440: HEIGHT 0,180: color 0,180,255,255 MEMO 1: TOP 1,20: WIDTH 1,400: HEIGHT 1,110: FONT_NAME 1,"Lucida Console" DLL_ON "C:\PANORAMIC\KLAUS\DLLs\KGF.dll" PRINT f$ PdfInfo(f$) CLIPBOARD_PASTE 1 END ' ============================================================================== SUB PdfInfo(f$) ' Caractéristiques d'un fichier pdf -> clipboard IF LABEL("Extra") = 0 THEN LABEL Extra DIM_LOCAL inf$, pa$, pb$, pc$, pd$, pr%, pk%, pf%, ps1$, ps2$ IF FILE_EXISTS(f$) = 0 THEN EXIT_SUB FILEBIN_OPEN_READ 9, f$: pa$ = STRING$(FILEBIN_SIZE(9)," "): FILEBIN_CLOSE 9 pr% = DLL_CALL2("ReadBinaryFileToString",ADR(f$),ADR(pa$)) pb$ = "/CreationDate": ' séquence cherchée GOSUB Extra inf$ = "Date Création:"+STRING$(5," ") inf$ = inf$ + MID$(pb$,7,2)+"/"+MID$(pb$,5,2)+"/"+LEFT$(pb$,4)+" " inf$ = inf$ + MID$(pb$,9,2)+":"+MID$(pb$,11,2) pb$ = "/ModDate": GOSUB Extra inf$ = inf$ + CHR$(13)+CHR$(10)+"Date Modification: " inf$ = inf$ + MID$(pb$,7,2)+"/"+MID$(pb$,5,2)+"/"+LEFT$(pb$,4)+" " inf$ = inf$ + MID$(pb$,9,2)+":"+MID$(pb$,11,2) pb$ = "/Producer": GOSUB Extra inf$ = inf$ + CHR$(13)+CHR$(10)+"Producteur:"+STRING$(8," ") inf$ = inf$ + pb$ pb$ = "/Author": GOSUB Extra inf$ = inf$ + CHR$(13)+CHR$(10)+"Auteur:"+STRING$(12," ") inf$ = inf$ + pb$ pb$ = "/Creator": GOSUB Extra inf$ = inf$ + CHR$(13)+CHR$(10)+"Créateur:"+STRING$(10," ") inf$ = inf$ + pb$ pb$ = "/Title": GOSUB Extra inf$ = inf$ + CHR$(13)+CHR$(10)+"Titre:"+STRING$(13," ") inf$ = inf$ + pb$ CLIPBOARD_STRING_COPY inf$ IF 2 = 3 Extra: ' pb$: séquence cherchée dans pa$ pk% = INSTR(pa$, pb$): IF pk% = 0 THEN pb$ = "?": RETURN: ' non trouvé FOR pr% = pk%+LEN(pb$) TO pk%+100 pc$ = MID$(pa$, pr%, 1) IF pc$ = "<" OR pc$ = "(" THEN EXIT_FOR: ' début de donnée NEXT pr% ps1$ = pc$: ' balise de début ('<' ou '(') en pr% ps2$=">": IF ps1$ = "(" THEN ps2$=")" FOR pf% = pr% TO pr%+1000 IF MID$(pa$, pf%, 1) = ps2$ THEN EXIT_FOR: ' balise de fin NEXT pf% ' extraction de la donnée entre les balises IF pf% = (pr%+1) THEN pb$ = "?": RETURN: ' donnée vide pd$ = MID$(pa$, pr%+1, pf%-pr%-1): ' séquence entre balises pb$ = "" IF ps1$ = "(": ' données en clair ascii pb$ = MID$(pa$, pr%+1, pf%-pr%-1) IF LEFT$(pb$, 2) = "D:" THEN pb$ = MID$(pb$,3,12): ' date ELSE IF LEFT$(pd$,4) = "443A": ' donnée numérique en hexa (date) FOR pf% = 5 TO LEN(pd$) STEP 2 pb$ = pb$ + CHR$(HEX(MID$(pd$, pf%, 2))) NEXT pf% ELSE: ' donnée alpha en hexa, suppression des 00 FOR pf% = 5 TO LEN(pd$) STEP 2 pc$ = MID$(pd$, pf%, 2) IF pc$ <> "00" THEN pb$ = pb$ + CHR$(HEX(pc$)) NEXT pf% END_IF END_IF RETURN END_IF END_SUB Ce qui donne: Bon, avant que vous me sautiez dessus, je veux bien reconnaître que le IF 2=3 n'est peut-être pas ce qui se fait de plus élégant... Edit 23h25: modif, prise en compte des délimiteurs () en plus de () et des données en clair ou en hexa ... et quelques corrections de présentation, pour le test.
Dernière édition par JL35 le Ven 17 Mai 2013 - 23:45, édité 4 fois | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Caractéristiques d'un fichier PDF Ven 17 Mai 2013 - 16:59 | |
| Excellent, merci JL35 J'ai très légèrement modifié l'affichage (je pense que le forum à mangé 2 des espaces dans les chaines de caractères et il y avait un petit problème de centrage de l'affichage) , j'ai adapté les chemins à ceux de mon poste de travail au boulot et j'ai remplacé le print par ce que c'est pas beau en fait le print ... mais je n'ai rien changé d'important. Une procédure à mettre de côté. Je mets quand même ma version si ça interesse quelqu'un (puisque c'est quasiement la même) - Code:
-
DIM f$ f$ = "C:\TEMP\DLL\KGF.pdf": ' fichier pdf à examiner WIDTH 0, 430: HEIGHT 0,135: color 0,180,255,255 MEMO 1: LEFT 1,10 : TOP 1,10: WIDTH 1,400: HEIGHT 1,80: FONT_NAME 1,"Lucida Console" DLL_ON "C:\TEMP\DLL\KGF.dll" CAPTION 0, " Infos sur -> " + f$ PdfInfo(f$) CLIPBOARD_PASTE 1 END ' ============================================================================== SUB PdfInfo(f$) ' Caractéristiques d'un fichier pdf -> clipboard IF LABEL("Extra") = 0 THEN LABEL Extra DIM_LOCAL inf$, pa$, pb$, pc$, pd$, pr%, pk%, pf% IF FILE_EXISTS(f$) = 0 THEN EXIT_SUB FILEBIN_OPEN_READ 9, f$: pa$ = STRING$(FILEBIN_SIZE(9)," "): FILEBIN_CLOSE 9 pr% = DLL_CALL2("ReadBinaryFileToString",ADR(f$),ADR(pa$)) pb$ = "/CreationDate <": ' séquence cherchée pk% = INSTR(pa$, pb$): IF pk% = 0 THEN EXIT_SUB pa$ = MID$(pa$, pk%, 1000) GOSUB Extra inf$ = " Date Création: " inf$ = inf$ + MID$(pb$,7,2)+"/"+MID$(pb$,5,2)+"/"+LEFT$(pb$,4)+" " inf$ = inf$ + MID$(pb$,9,2)+":"+MID$(pb$,11,2) pb$ = "/ModDate <": GOSUB Extra inf$ = inf$ + CHR$(13)+CHR$(10)+" Date Modification: " inf$ = inf$ + MID$(pb$,7,2)+"/"+MID$(pb$,5,2)+"/"+LEFT$(pb$,4)+" " inf$ = inf$ + MID$(pb$,9,2)+":"+MID$(pb$,11,2) pb$ = "/Producer <": GOSUB Extra inf$ = inf$ + CHR$(13)+CHR$(10)+" Producteur: " inf$ = inf$ + pb$ pb$ = "/Author <": GOSUB Extra inf$ = inf$ + CHR$(13)+CHR$(10)+" Auteur: " inf$ = inf$ + pb$ pb$ = "/Creator <": GOSUB Extra inf$ = inf$ + CHR$(13)+CHR$(10)+" Créateur: " inf$ = inf$ + pb$ pb$ = "Title <": GOSUB Extra inf$ = inf$ + CHR$(13)+CHR$(10)+" Titre: " inf$ = inf$ + pb$ CLIPBOARD_STRING_COPY inf$ IF 2 = 3 Extra: ' séquence cherchée pb$ dans pa$ pk% = INSTR(pa$, pb$): IF pk% = 0 THEN RETURN FOR pr% = pk% TO 1000 IF MID$(pa$, pr%, 1) = "<" THEN EXIT_FOR: ' début de donnée NEXT pr% ' extraction de la donnée en hexa entre les balises '<' et '>' FOR pf% = pr% TO 1000 IF MID$(pa$, pf%, 1) = ">" THEN EXIT_FOR: ' fin de la donnée NEXT pf% pd$ = MID$(pa$, pr%+1, pf%-pr%-1): ' séquence pk% = INSTR(pd$,"2B"): IF pk%>0 THEN pd$ = lEFT$(pd$, pk%-1) pb$ = "" IF LEFT$(pd$,4) = "443A": ' donnée numérique en hexa (date) FOR pf% = 5 TO LEN(pd$) STEP 2 pb$ = pb$ + CHR$(HEX(MID$(pd$, pf%, 2))) NEXT pf% ELSE: ' donnée alpha en hexa, suppression des 00 FOR pf% = 5 TO LEN(pd$) STEP 2 pc$ = MID$(pd$, pf%, 2) IF pc$ <> "00" THEN pb$ = pb$ + CHR$(HEX(pc$)) NEXT pf% END_IF RETURN END_IF END_SUB | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Caractéristiques d'un fichier PDF Ven 17 Mai 2013 - 17:24 | |
| Tu as raison, ce qui compte c'est la sub, le reste (l'appel) n'était qu'un exemple vite fait. Mais c'est vrai qu'on a parfois des surprises avec le forum qui intervient parfois intempestivement dans le contenu des codes en faisant sauter des caractères...
En fait, en ayant eu besoin, j'avais téléchargé un freeware: pdfinfo.exe, qui rendait le même résultat, en moins clair, et je me suis rendu compte qu'on pouvait faire aussi bien en panoramic avec la dll de Klaus, en farfouillant un peu dans la structure du pdf. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Caractéristiques d'un fichier PDF Ven 17 Mai 2013 - 17:55 | |
| Perso, je suis preneur de toutes ces procédures (celles ci permet d'ailleurs facilement de compléter ton explorateur de fichier ...) | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Caractéristiques d'un fichier PDF Ven 17 Mai 2013 - 18:08 | |
| Super ! Merci pour cette belle application d'une de mes fonctions ! | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Caractéristiques d'un fichier PDF Ven 17 Mai 2013 - 22:40 | |
| Après quelques essais, je remarque que les données ne sont pas toujours stockées de la même façon dans le pdf, parfois en clair, parfois en hexa... avec des délimiteurs différents. Désolé, du coup je regarde à faire quelque chose d'un peu plus universel... | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Caractéristiques d'un fichier PDF Ven 17 Mai 2013 - 22:51 | |
| OK, moi les fichiers testés avaient bien fonctionnés. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Caractéristiques d'un fichier PDF Ven 17 Mai 2013 - 23:28 | |
| Bon, c'est corrigé sans trop de mal, je n'ai pas trouvé d'autres cas avec mes pdf. En fait certains ont les données en clair entre parenthèses (), et d'autres les données en hexadécimal entre <>... et dans des ordres différents, évidemment, ce serait trop simple sinon ! Jusqu'ici, après pas mal de pdfs, je n'ai vu (et traité) que ces deux cas.
Il faut dire que je n'ai pas étudié les spécifications pdf, mais cherché plutôt dans les fichiers eux-mêmes ce que je pouvais y trouver, alors ma méthode est un peu empirique. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Caractéristiques d'un fichier PDF Sam 18 Mai 2013 - 15:34 | |
| Mis à jour - Testé OK (mais bon sur mes fichiers, ça marchait déjà de toute façon et ça marche toujours ) | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Caractéristiques d'un fichier PDF Sam 18 Mai 2013 - 18:39 | |
| Dans les renseignements fournis, je rajoute la taille (facile), je voulais ajouter le nombre de pages (utile), mais là je me casse les dents, c'est n'importe où et sous des formes diverses dans le fichier, je ne vois pas de caractéristique bien définie...
PS j'ai bien fait quelque chose pour le nombre de pages, mais il y a encore des cas ambigus et récalcitrants, en plus des données parfois volontairement codées et illisibles, alors je vais en rester là pour le moment. | |
| | | Contenu sponsorisé
| Sujet: Re: Caractéristiques d'un fichier PDF | |
| |
| | | | Caractéristiques d'un fichier PDF | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |