Nombre de page dans un pdf

Signaler
Messages postés
675
Date d'inscription
samedi 31 mai 2003
Statut
Membre
Dernière intervention
26 mai 2013
-
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
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

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
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
Messages postés
675
Date d'inscription
samedi 31 mai 2003
Statut
Membre
Dernière intervention
26 mai 2013
1
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

Bonsoir,

Tu peux suivre ce lien concernant la structure d'un fichier pdf.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
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
Messages postés
675
Date d'inscription
samedi 31 mai 2003
Statut
Membre
Dernière intervention
26 mai 2013
1
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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
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
Messages postés
675
Date d'inscription
samedi 31 mai 2003
Statut
Membre
Dernière intervention
26 mai 2013
1
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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
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
Messages postés
675
Date d'inscription
samedi 31 mai 2003
Statut
Membre
Dernière intervention
26 mai 2013
1
Oui mais c'est pas mal ce qu'il a fait la je vais chercher de ce coté
Messages postés
675
Date d'inscription
samedi 31 mai 2003
Statut
Membre
Dernière intervention
26 mai 2013
1
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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
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
Messages postés
675
Date d'inscription
samedi 31 mai 2003
Statut
Membre
Dernière intervention
26 mai 2013
1
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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
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
Messages postés
675
Date d'inscription
samedi 31 mai 2003
Statut
Membre
Dernière intervention
26 mai 2013
1
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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
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
Messages postés
675
Date d'inscription
samedi 31 mai 2003
Statut
Membre
Dernière intervention
26 mai 2013
1
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.