Connaitre le nombre de pages d'un fichier pdf?

Résolu
gnieark Messages postés 53 Date d'inscription jeudi 17 août 2006 Statut Membre Dernière intervention 22 octobre 2010 - 14 nov. 2006 à 22:51
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 26 mars 2009 à 15:11
en vb6, je cherche comment connaitre le nombre de pages d'un fichier .pdf

j'ai essayé en utilisant le composant acropdf, en ouvrant un fichier, je n'ai pas trouvé de fonction de type "acropdf1.getnombredepages"
ensuite j'ai cherché si en ouvrant un pdf en mode texte ("open for binary as #1") les sauts de pages n'étaient pas indiqués par un séparateur. le nombre de fois que je trouve "stream" ne correspond pas au nombre de pages  et n'est pas un multiple. Bref rien trouvé, pas de séparateur qui paraisse être un saut de page... point de départ

Quelqu'un aurait une idée, juste une piste (ou carrément la solution ;) ) SVP?

Merci d'avance.

______________________
Gnieark, le cri du cochon fou!

9 réponses

ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
20 nov. 2006 à 11:19
salut,

ouverture en mode text et recherche du page tree qui n'a pas de /Parent :
http://partners.adobe.com/public/developer/en/pdf/PDFReference16.pdf
pages 117 et 984

ShareVB
3
gnieark Messages postés 53 Date d'inscription jeudi 17 août 2006 Statut Membre Dernière intervention 22 octobre 2010
20 nov. 2006 à 15:13
voila ça donne ça le code: et ile s'appelle comme ça: i = nbepagespdf(c:\lepdf.pdf)

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, "<</Type/Page")
'le nombre de pages correspond au nombre d'éléments
nbepagespdf = UBound(table())


End Function
3
gnieark Messages postés 53 Date d'inscription jeudi 17 août 2006 Statut Membre Dernière intervention 22 octobre 2010
20 nov. 2006 à 14:19
^^ la méthode est bonne.
Et ça m'a permis de me mettre sur la voie. Un grand merci. En fait je vais tester le nombre de fois que je trouve "<</type/page" (c'est le début du page tree) et sur les quelques documents testés ça correspont bien au nombre de pages...
0
kowalska Messages postés 33 Date d'inscription samedi 15 octobre 2005 Statut Membre Dernière intervention 4 janvier 2012
3 janv. 2008 à 14:14
salut ! j'ai besoin de la mm chose en Csharp et je voulais te pose un question c'est quoi FreeFile?
 Merci
0

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

Posez votre question
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
3 janv. 2008 à 14:17
t'occupe pas de ca...
tout ce que tu as a te dire, c'est qu'il lit tout le fichier et le place dans buffer


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

en gros, il compte combien de fois il trouve "<</Type/Page" dans le contenu du fichier
0
cs_gatina Messages postés 18 Date d'inscription jeudi 6 mars 2008 Statut Membre Dernière intervention 7 juin 2010
21 juil. 2008 à 15:43
je voudrai la meme chose mais en c# s'il vous plai je ne sais pas passer de vb à c#
merciiiiiiiiiii
0
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
21 juil. 2008 à 21:09
salut,

quelque chose comme :

string s = System.IO.File.ReadAllText("fichier");
int page_count = 0;
int idx = 0;
while(idx != -1)
{
    idx = s.IndexOf("<</Type/Page",idx);
    page_count += 1;
}

ShareVB
0
cs_gogomanu Messages postés 29 Date d'inscription mardi 7 janvier 2003 Statut Membre Dernière intervention 26 mars 2009
26 mars 2009 à 14:58
gnieark: Je vois une seule erreur possible au fait de compter les "/Type /Page", c'est qu'en théorie il me semble qu'il est possible d'utiliser deux fois la même page:

1 0 obj
<<
/Type /Pages
/Kids [ 2 0 R]
/Kids [ 3 0 R]
/Kids [ 2 0 R]
/Count 3
>>

Enfin cela semble tellement peu utile et rarissime que ton code doit être tout le temps bon.

kowalska: Je ne comprends pas pourquoi Renfield t'as envoyer bouler à propos de ta question
En fait freefile( ) sert simplement à récupérer un numéro de fichier libre: si tu ouvres plusieurs fichiers simultanément dans plusieurs fonctions, ou dans une fonction récursive, cela peut être compliqué pour savoir si tu as déjà ouvert le fichier #1, #2, #3 ... donc freefile( ) te donne simplement un numéro disponible.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
26 mars 2009 à 15:11
je l'ai envoyé "boulé" pour une raison simple.

Il joue en C#

Ca ne sert a rien de s'attarder sur le fonctionnement de FreeFile, qui est propre a VB6
l'idée est de saisir l'algo, pas de rentrer dans des considérations propre aux langages.
0
Rejoignez-nous