IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Nombre pages d'un PDF existant


Sujet :

VB.NET

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 28
    Par défaut Nombre pages d'un PDF existant
    Bonjour à tous,

    Comment peut-on connaître par code le nombre de pages d'un document PDF existant ?
    Ce nombre apparaît pourtant bien lorsque le PDF est ouvert avec Adobe Reader mais je n'ai vu nulle part comment le récupérer.

    J'ai compté le nombre d'apparitions de %%Page dans le document mais cela ne marche pas toujours. Même chose avec une recherche du nombre après /Count .

    J'ai essayé avec le composant ROOT.CIMV2.WIN32_Printer (Gestion MWI des imprimantes) à partir des exemples dans : http://bidou.ftp-developpez.com/Cour...impression.pdf mais j'ai des soucis avec l'aspect dynamique. Je n'arrive à quelque chose (Addition de PagesPrinted et de TotalPages) que si le document comprend de nombreuses pages.

    C'est cette remarque
    The only completely reliable way to count pages is to ask the printer after the job is printed
    qui m'a entraîné dans cette voie !

    Merci de m'aider !

  2. #2
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 28
    Par défaut
    Suite de la question concernant le nombre de pages d'un document PDF.
    Sans réponse et après moult recherches infructueuses, j'ai fini par créer la fonction qui suit (Voir les commentaires en début de fonction) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
            ' Cette fonction s'appuie sur l'observation de fichiers PDF en mode texte :
            ' Le texte "/Count " est suivi de chiffres représentant des pages, par exemple : 2, 25 ... et même 0
            ' Il peut y avoir plusieurs "/Count " dans le fichier suivis de nombres qui peuvent être différents.
            ' Le nombre suivant "/Count " peut terminer une ligne ou être suivi par n'importe quel caractère.
            ' Le plus grand nombre de ceux suivant un "/Count " est le nombre total de pages du document PDF.
            ' Les "/Count " peuvent être situés en début ou ailleurs dans le document.
     
            ' Résultant de la simple observation, il n'y a aucune garantie qu'elle fonctionne sur tous les fichiers PDF.
            ' Toutefois, elle a retourné le nombre correct de pages sur plus de 30 fichiers de toutes tailles, récents et anciens.
     
        Private Function pagesPDF(fichier)  ' Renvoie le nombre de pages du fichier PDF 
     
            Dim i, j, x, y, z, w As Integer             ' Variables initialisées à 0
            Dim a As String                             ' Ligne texte du PDF        
            Dim encoreUnChiffre As Boolean = False      ' Pour boucle sur chiffres d'un nombre
            Dim tabCount(1) As Integer                  ' Tableau des nombres trouvés à la suite d'un "/Count "
     
            Try
                Using sr As StreamReader = File.OpenText(fichier)
                    Do While sr.Peek() >= 0
                        a = sr.ReadLine
                        If a.Contains("/Count ") Then
                            x = a.IndexOf("/Count ")                             ' Index 1er caractère de "/Count ", donc du "/"
                            y = 0                                                ' RAZ du nombre de chiffres après "/Count "
                            Do                                                   ' Balayage de chaque caractère suivant le "/Count "
                                encoreUnChiffre = True
                                If (x + 7 + y) >= a.Length Then Exit Do '          Il n'y a plus de caractère, sortie de la boucle
                                w = Asc(a.Substring((x + 7 + y), 1))             ' Code ASCII de ce caractère
                                If w < 49 Or w > 57 Then encoreUnChiffre = False ' Inférieur au chiffre 1
                                If encoreUnChiffre = True Then '                   Donc c'est encore un chiffre 
                                    y += 1                                       ' Nombre de chiffres, avant "/Kids ...", " " ou fin de ligne ou autre)
                                End If
                            Loop While encoreUnChiffre = True
                            If y >= 1 Then
                                i += 1                                      ' Nombre de "/Count " dans le fichier (Avec 1er chiffre <> 0)
                                ReDim Preserve tabCount(i)
                                tabCount(i) = CInt(a.Substring(x + 7, y))   ' On garde le nombre qui suit "/Count "
                            End If
                        End If
                    Loop
                End Using
                For j = 1 To i                                              ' Recherche du nombre max suivant les "/Count "
                    If tabCount(j) > z Then z = tabCount(j)
                Next
     
                Return (z)      ' Retour du nombre de pages du PDF
            Catch
                Return (0)      ' Ce cas (Anormal) est à traiter dans la procédure appelante
            End Try
     
        End Function

    Dans le but de la valider pour mon utilisation, j'aimerais avoir votre avis sur cette fonction, en particulier si vous l'avez essayée, ou bien que vous m'orientez vers une autre méthode.

    Merci de votre retour.

Discussions similaires

  1. Outil pour numéroter les pages d'un pdf existant
    Par PCBleu dans le forum Windows
    Réponses: 2
    Dernier message: 25/06/2014, 08h52
  2. [WD-2003] Compter le nombre de pages d'un pdf
    Par michael-ECN dans le forum VBA Word
    Réponses: 2
    Dernier message: 08/07/2009, 16h21
  3. nombre de pages d'un PDF (blob)
    Par ammah dans le forum JDBC
    Réponses: 3
    Dernier message: 06/05/2009, 16h10
  4. Itext et nombre de page d'un PDF
    Par Yanisb dans le forum Documents
    Réponses: 3
    Dernier message: 21/07/2007, 16h40
  5. nombre de page dans un PDF ???
    Par rodolphedj dans le forum ASP
    Réponses: 15
    Dernier message: 08/09/2004, 13h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo