Nombre de page dans un pdf

petiflamand
Messages postés
675
Date d'inscription
samedi 31 mai 2003
Statut
Membre
Dernière intervention
26 mai 2013
- 17 juin 2012 à 09:49
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
- 19 juin 2012 à 08:58
Bonjour a tous ,

je cherche a savoir combien de page il y a dans un pdf.
J' ai trouvé ceci sur le forum , me seule probleme est quand dans mon pdf j'ai 235 page et que le split me donne 293
Merci d'avance
Private Function nbepagespdf(ByVal pdffilename As String) As Integer
Dim f As Integer
Dim buffer As String, table() As String

f = FreeFile

Open pdffilename For Binary As #f 'ouvrir le fichier
 buffer = Space$(LOF(f))
Get #f, , buffer 'copie du fichier dans la variable buffer
Close #f 'fermer le fichier

'découpage avec le split
table() = Split(buffer, "/Page")
'le nombre de pages correspond au nombre d'éléments
nbepagespdf = UBound(table())

End Function
Private Sub Command25_Click()

nombre_de_page_pdf = 0
nombre_de_page_pdf = nbepagespdf(App.Path & "\toto.pdf")
End Sub

21 réponses

ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
17 juin 2012 à 18:58
Bonjour,
Déjà : "éclater" (split) sur la chaîne "/Page" n'est pas très adroit. Il suffirait que, dans le texte même, cette chaîne soit présente sans pour autant "marquer" un saut de page pour que ton compte soit faussé.
La "marqueur de page" n'est pas "/Page", mais "/Type/Page"
Même avec cette précaution, il faut ignorer les "subpages" éventuelles. Or, elles sont elles-mêmes marquées par un "/type/Page"
Ta méthode utilisant le split ne saurait donc être valablement utilisée.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
17 juin 2012 à 19:03
Pour ton info : je vient d'ouvrir avec le bloc-note plusieurs fichiers pdf. Sur plusieurs d'entrre eux, j'ai trouvé une ou plusieurs fois la chaîne "/Pages", qui contient donc "/Page" mais n'est pas un séparateur de page.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
17 juin 2012 à 19:11
Même sur un Pdf de Acrobat (SignHere.pdf), je trouve plusieurs fois la chaîne "/Pages".
Dans ce document-là, de surcroît, je trouve des pages séparées par "/Type /Page"
(note bien : avec un espace après Type !


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
petiflamand
Messages postés
675
Date d'inscription
samedi 31 mai 2003
Statut
Membre
Dernière intervention
26 mai 2013
1
17 juin 2012 à 19:28
Bonjour ucfoutu
Je vient de tester sur plusieur pdf
et ça marche en partie car pour un pdf ce sera sur "/Typa /Page" ou "/Type/Page" ou "Type/Pages" ou "/Type/Page/Parent"
c'est trop aléatoire.
Faut que je trouve autre chose
a tu une idée
Merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
17 juin 2012 à 20:20
Bonsoir,

Tu peux suivre ce lien concernant la structure d'un fichier pdf.
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
17 juin 2012 à 21:40
Ouais ...
Je viens de "lire" avec le bloc-notes plusieurs fichiers pdf.
J'en tire le sentiment très personnel très désagréable suivant, pour l'instant :
Il semble que les "choses" peuvent varier d'un fichier à l'autre (comme si un "chef d'orchestre" réglait la musique à partir de données (où ?) que je n'ai pas localisées !
Tout semble "tourner" autour de la chaîne "/count", mais de la manière suivante :
Si une seule chaîne de l'espèce : le chiffre qui la suit est le nombre de pages
Si plusieurs chaînes de l'espèce : le chiffre qui suit la dernière est le nombre de pages
M A I S :
Si la chaîne "/Count" est précédée de la chaîne "<<" (donc "<</Count ", tout est alors différent et :
le nombre de pages est alors le total des chiffres qui suivent chacune des chaînes "<</Count " ! ... essayez ... vous allez voir !
Mais ce n'est pas tout !
On peut également tomber sur des pdf sans aucune chaîne "/count" (j'en ai trouvés !) Et ceux-là (TOUS) n'ont qu'une seule page !
Vos conclusions ? J'ose la mienne ? ===>> comme au bridge en tournoi ===>> on déclare une convention et on s'y tient obligatoirement. Différentes conventions déclarées sont acceptables, pourvu qu'elles le soient clairement (déclarées). Ces fichiers me paraissent répondre à ce type de démarches "honorables".
Si j'ai raison, ce qui n'est pas du tout prouvé puisque seul résultat de d'une démarche empirique (mon observation de quelques dizaines de fichiers seulement) ===>> la difficulté sera de déterminer dans quelle partie exacte du fichier se trouve la "convention" qui a été adoptée !!!
Moi, je suis trop vieux pour risquer d'y perdre ma vue. Qui s'en charge ? ===>> tiens (au hasard) je suggère : petiflamand
Ce serait assez juste, puisque le premier intéressé, d'une part et que, d'autre part, ce ne serait plus là VB, qui serait en cause, mais bel et bien Adobe.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
17 juin 2012 à 22:10
Hé bé !
Autre découverte, notamment -mais pas uniquement) lorsque la convention de chaîne "/count " est totalement absente :
On trouve à la deuxième ligne du fichier une chaîne "/N " ===> le chiffre qui la suit représente, selon le cas :
- soit directement le nombre de pages.
- soit le nombre de chaînes présentes "<</count "
Ya d'la joie !
Alors, petitflamand ===>> à toi d'y aiguiser ta vue, maintenant ...



________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
petiflamand
Messages postés
675
Date d'inscription
samedi 31 mai 2003
Statut
Membre
Dernière intervention
26 mai 2013
1
17 juin 2012 à 22:25
re,

vais essayer mais ça a l'aire galère
j'essaye plein de truc pour l'instant mais rien a faire
J' ai essayer de voir la première ligne qui est la version du pdf mais même avec des même version la structure est differente
pas cool
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
17 juin 2012 à 22:48
Je crois que tu as mal compris le travail de très longue haleine et de patience à faire !
Ce n'est pas un travail de développeur et il n'y a aucun "truc à essayer" !
Il s'agit (rien que çà !) :
D'ouvrir avec le bloc-notes des centaines de pdf, de taille et de versions différentes, de les examiner un par un à la loupe, d'y relever des pistes plausibles; de vérifier, au moins pour le fichier en cours, que la piste supposée reste vérifiée (comparaison du résultat de la supposition avec le nombre réel de pages, en ouvrant avec Adobe), de noter scupuleusement chaque "déduction plausible", etc ...
Ce ne sera que lorsqu'aura pu être dressée une liste quasi exhaustive de tous les cas de figure possibles que nous pourrons valablement commencer à écrire le code capable de faire face à tous ces différents cas de figure !
C'est là un travail de Romain (ou de Flamand ?) qui est laissé à ta volonté (tu es l'intéressé, non ?)
En conclusion : ce n'est pas VB, qu'il faut bûcher ! Il faut par contre sacrément avoir envie de "mouiller sa chemise" dans une démarche de type empirique tendant à "décortiquer" toutes les structures possibles de tous les pdf possibles.
Un travail pour jeune, quoi ...


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
petiflamand
Messages postés
675
Date d'inscription
samedi 31 mai 2003
Statut
Membre
Dernière intervention
26 mai 2013
1
17 juin 2012 à 22:53
Oui j' avait bien compris
c'est pour cela que j'ouvre les pdf avec notepad++
et je compare ,et je note les decouvertes.
pour pouvoir après essayer quelque chose.

adobe le fait bien , avec n'importe quel version du document , donc je regarde et essaye de comprendre , j'ai pas dit que ce sera fait pour demain mais bon j'en ai besoin
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
17 juin 2012 à 22:56
Observation ... "feeling" ... etc ... sont les qualités nécessaires .
Tu m'as vu commencer plus haut. Tu as vi le genre de démarche, hein ...
Regarde : j'ai par exemple mentionné ma "découverte" de la chaîne de caractère "/N " quelquefois présente en ligne 2.
J'ai cherché ensuite sur le Net, pour voir si quelqu'un d'autre l'avait également "repérée" ===>>> regarde ce que je viens de trouver ===>>
Tapez le texte de l'url ici.
Ah ! Je ne suis donc pas le seul ! Tiens tiens !
Mais je ne suis pas d'accord avec le code montré ! il ne tient pas compte de tout ce que j'ai de mon côté observé par ailleurs ...
Tu comprends ?


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
petiflamand
Messages postés
675
Date d'inscription
samedi 31 mai 2003
Statut
Membre
Dernière intervention
26 mai 2013
1
17 juin 2012 à 23:29
Oui mais c'est pas mal ce qu'il a fait la je vais chercher de ce coté
0
petiflamand
Messages postés
675
Date d'inscription
samedi 31 mai 2003
Statut
Membre
Dernière intervention
26 mai 2013
1
18 juin 2012 à 21:27
Bonjour Ucfoutu


Voila je vient de penché dessus , j' ai trouvé une astuce qui fonctionne sur les 40 premiers test que je vient de fiare , par contre j'ai un pdf avec la 3iem ligne le signe /N 477 et a l'intérieur aussi le /Count 477 mais adobe me mes 473 Lignes
Voici ce que j'ai fait c'est pas très propre mais ça fonctionne
Private Function nbepagespdf(ByVal pdffilename As String) As Integer
Dim f As Integer
Dim page_pdf_nb(1 To 5000)
Dim buffer As String, table() As String
Dim trt As Integer
f = FreeFile
Dim pdf_id As String

Open pdffilename For Binary As #f 'ouvrir le fichier
 buffer = Space$(LOF(f))
Get #f, , buffer 'copie du fichier dans la variable buffer
Close #f 'fermer le fichier
trt = 1
'découpage avec le split
table() = Split(buffer, "/Count")
'le nombre de pages correspond au nombre d'éléments
nbepagespdf = UBound(table())
pdf_id = ""
If nbepagespdf >= 1 Then
For i = 1 To nbepagespdf
For t = 1 To Len(Mid(table(0), 1, 4))
If Mid(table(i), t, 1) <> "/" Then
'MsgBox Mid(table(i), t, 1)

pdf_id = pdf_id + Mid(table(i), t, 1)
End If
Next t
pdf_id = Replace(pdf_id, "/N", "")
            pdf_id = Replace(pdf_id, "N", "")
            pdf_id = Replace(pdf_id, "/count", "")
            pdf_id = Replace(pdf_id, " ", "")
            pdf_id = Replace(pdf_id, "/", "")
            For t = 65 To 125
                    pdf_id = Replace(pdf_id, Chr(t), "")
            Next
            pages = Val(Trim(pdf_id))
            pdf_id = ""
            page_pdf_nb(trt) = pages
            List7.AddItem pages
trt = trt + 1



Next i
Dim plus_haut, quel_hauteur
plus_haut = 0
For i = 1 To trt
quel_hauteur = page_pdf_nb(i)
If quel_hauteur > plus_haut Then plus_haut = quel_hauteur




Next i
MsgBox (plus_haut)
End If

End Function
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
18 juin 2012 à 21:38
Tu as donc un peu (très peu) "adapté" le code que je contestais.
Tant que pas TOUJOURS vrai : manque un cas de "convention" et donc pas encore fiable
Pas bon, donc !


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
petiflamand
Messages postés
675
Date d'inscription
samedi 31 mai 2003
Statut
Membre
Dernière intervention
26 mai 2013
1
18 juin 2012 à 21:52
Sur 40 une erreur je vais encore chercher mais je ne trouve pas normale que dans le fichier il disent 477 et que a l'ouverture il dit 473

Mais je ne lache pas l' affaire
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
18 juin 2012 à 21:57
Bien sûr que non, que "ce n'est pas normal"
Ce n'est pas Adobe, qui se trompe, hein ... ===>> c'est le code !
Je te l'ai dit plus haut : je l'avais examiné et avais bien vu (d'entrée de jeu) qu'il ne traitait absolument pas toutes les observations de cas que j'avais par ailleurs faites moi-même, hein ...
Ce code n'est donc pas fiable.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
18 juin 2012 à 22:00
Et j'ose à peine (peur de te décourager) te dire le pire :
Lorsque (si l'on y parvient) l'on aura pu recenser la TOTALITE des "conventions" en l'état actuel des différentes versions .... nous aurons au-dessus de nos têtes une "convention" nouvelle (nouvelle version) éventuelle.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
petiflamand
Messages postés
675
Date d'inscription
samedi 31 mai 2003
Statut
Membre
Dernière intervention
26 mai 2013
1
18 juin 2012 à 22:05
tout a fait d'accord avec toi ,
mais je compte faire un module pour transformer
les version , ça c'est la seule chose qui est constante la premiere ligne est toujours la version
et j'ai trouver un soft qui fait la convertion de la version 1.1 a 1.6 donc c'est fesable ,
je cherche entre le travail .
courage,courage, on y arrivera

en Windev il importe le pdf dans un imagebox et la il dise le nombre d'image dans l' imagebox mais je n'y arrive pas en vb
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
19 juin 2012 à 08:10
Ceci, dans ton code, par exemple, me fait bondir :
table() = Split(buffer, "/Count")
'le nombre de pages correspond au nombre d'éléments
nbepagespdf = UBound(table())

et n'est pas exact. Relis calmement tout ce que j'ai écrit plus haut
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
petiflamand
Messages postés
675
Date d'inscription
samedi 31 mai 2003
Statut
Membre
Dernière intervention
26 mai 2013
1
19 juin 2012 à 08:46
Bonjour Ucfoutu ,

Oui je crois savoir ce que tu veux dire ,
par rapport a la version il y a sur la 3 iem ligne le /N xx , mais dans presque tout les pdf
que j'ai ouvert et j' en suis a quand même +- 120 (et j'ai pas encore fini) il y a presque toujours /Count la différence , c'est qu'il y a un /Count avec un grand nombre et des /Count avec des petit nombre , mais si on fait l' addition de c'est petit nombre on arrive au grand , c'est pour cela que je split dans un tableau et puis que je choisi le chiffre le plus élevé.
Mais je ne laisse pas tomber , je cherche toujours.
0