Bonjour tout le monde,voilà mon problème : je développe un programme en C capable de trouver combien de pages possède un PDF,après quelques recherches j'ai trouvé 2 solutions à mon problème,l'une consiste à chercher le nombre de fois ou apparait "/Type/Page" ce qui donnera le nombre de pages,l'autre à lire le nombre écrit après "/Count".

J'ai essayé la 1ère méthode,elle semble ne pas marcher pour tout les fichiers pdf.
J'ai essayé la 2ème avec /Count et je trouve le bon nombre de pages disons 50% du temps,le problème étant qu'un fichier pdf contient plusieurs fois le terme "/Count" et il arrive que le nombres de pages soit faux.

Ce que je souhaite faire,c'est lancer plusieurs fois la recherche du terme /Count et enregistrer les nombres de pages dans des variables pour ensuite prendre la plus grande.

Voici mon code :

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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
 
 
void lirePage(char nom[])
{
    FILE *pdf;
    char zone[5];
    int taille,cpt,i=0,pages;
    long int position,reste;
 
    strcat(nom,".pdf");
 
    pdf=fopen(nom,"r");
    if (pdf==NULL)
    {
        printf ("Fichier introuvable.\n");
        getch();
        exit (1);
    }
 
    fseek(pdf,0,SEEK_SET);
/*for(cpt=0;cpt<10;cpt++)
{*/
    while(feof(pdf)!=EOF)
    {
        if(fgetc(pdf)=='/')
        {
            if(fgetc(pdf)=='C')
            {
                printf("2eme lettre trouvee.\n");
                if(fgetc(pdf)=='o')
                {
                    printf("3eme lettre trouvee.\n");
                    if(fgetc(pdf)=='u')
                    {
                        printf("4eme lettre trouvee.\n");
                        if(fgetc(pdf)=='n')
                        {
                            printf("5eme lettre trouvee.\n");
                            if(fgetc(pdf)=='t')
                            {
                                printf("Position trouvee !\n");
                                position=ftell(pdf);
                                break;
                            }
                        }
                        if(feof(pdf)!=EOF)
                        {
                            fseek(pdf,-1,SEEK_CUR);
                        }
                    }
 
                    if(feof(pdf)!=EOF)
                    {
                        fseek(pdf,-1,SEEK_CUR);
                    }
                }
 
                if(feof(pdf)!=EOF)
                {
                    fseek(pdf,-1,SEEK_CUR);
                }
            }
            if(feof(pdf)!=EOF)
            {
                fseek(pdf,-1,SEEK_CUR);
            }
        }
        if(feof(pdf)!=EOF)
        {
            fseek(pdf,0,SEEK_CUR);
        }
        if(feof(pdf)!=0) break;
    }
 
//}
 
 
    position=position+1;
    fseek(pdf,position,SEEK_SET);
    fread(zone,5,1,pdf);
    pages=atoi(zone);
    printf("\nCe fichier contient %d pages.\n",pages);
    fclose(pdf);
 
}
 
 
 
int main()
{
 
    char fichier[20];
    int p1;
 
    printf("Entrez le nom du fichier : ");
    scanf("%s",fichier);
    lirePage(fichier);
 
    getch();
}