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

gnieark 53 Messages postés jeudi 17 août 2006Date d'inscription 22 octobre 2010 Dernière intervention - 14 nov. 2006 à 22:51 - Dernière réponse : Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention
- 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 

9 réponses

Répondre au sujet
ShareVB 2717 Messages postés vendredi 28 juin 2002Date d'inscription 13 janvier 2016 Dernière intervention - 20 nov. 2006 à 11:19
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ShareVB
gnieark 53 Messages postés jeudi 17 août 2006Date d'inscription 22 octobre 2010 Dernière intervention - 20 nov. 2006 à 15:13
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de gnieark
gnieark 53 Messages postés jeudi 17 août 2006Date d'inscription 22 octobre 2010 Dernière intervention - 20 nov. 2006 à 14:19
0
Utile
^^ 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
kowalska 34 Messages postés samedi 15 octobre 2005Date d'inscription 4 janvier 2012 Dernière intervention - 3 janv. 2008 à 14:14
0
Utile
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
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 3 janv. 2008 à 14:17
0
Utile
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
cs_gatina 18 Messages postés jeudi 6 mars 2008Date d'inscription 7 juin 2010 Dernière intervention - 21 juil. 2008 à 15:43
0
Utile
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
ShareVB 2717 Messages postés vendredi 28 juin 2002Date d'inscription 13 janvier 2016 Dernière intervention - 21 juil. 2008 à 21:09
0
Utile
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
cs_gogomanu 29 Messages postés mardi 7 janvier 2003Date d'inscription 26 mars 2009 Dernière intervention - 26 mars 2009 à 14:58
0
Utile
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
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 26 mars 2009 à 15:11
0
Utile
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.