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 |
Partager