Connaitre le nombre de pages d'un fichier pdf? [Résolu]

Messages postés
53
Date d'inscription
jeudi 17 août 2006
Dernière intervention
22 octobre 2010
- 14 nov. 2006 à 22:51 - Dernière réponse :
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
- 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!
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
Messages postés
2717
Date d'inscription
vendredi 28 juin 2002
Dernière intervention
13 janvier 2016
20 nov. 2006 à 11:19
3
Merci
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

Merci ShareVB 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de ShareVB
Meilleure réponse
Messages postés
53
Date d'inscription
jeudi 17 août 2006
Dernière intervention
22 octobre 2010
20 nov. 2006 à 15:13
3
Merci
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

Merci gnieark 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de gnieark
Messages postés
53
Date d'inscription
jeudi 17 août 2006
Dernière intervention
22 octobre 2010
20 nov. 2006 à 14:19
0
Merci
^^ 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...
Commenter la réponse de gnieark
Messages postés
34
Date d'inscription
samedi 15 octobre 2005
Dernière intervention
4 janvier 2012
3 janv. 2008 à 14:14
0
Merci
salut ! j'ai besoin de la mm chose en Csharp et je voulais te pose un question c'est quoi FreeFile?
 Merci
Commenter la réponse de kowalska
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
3 janv. 2008 à 14:17
0
Merci
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
Commenter la réponse de Renfield
Messages postés
18
Date d'inscription
jeudi 6 mars 2008
Dernière intervention
7 juin 2010
21 juil. 2008 à 15:43
0
Merci
je voudrai la meme chose mais en c# s'il vous plai je ne sais pas passer de vb à c#
merciiiiiiiiiii
Commenter la réponse de cs_gatina
Messages postés
2717
Date d'inscription
vendredi 28 juin 2002
Dernière intervention
13 janvier 2016
21 juil. 2008 à 21:09
0
Merci
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
Commenter la réponse de ShareVB
Messages postés
29
Date d'inscription
mardi 7 janvier 2003
Dernière intervention
26 mars 2009
26 mars 2009 à 14:58
0
Merci
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.
Commenter la réponse de cs_gogomanu
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
26 mars 2009 à 15:11
0
Merci
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.
Commenter la réponse de Renfield

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.