COMPTER LE NOMBRE DE PAGES D'UN FICHIER PDF

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 - 13 févr. 2012 à 17:24
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 - 14 févr. 2012 à 11:48
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/54064-compter-le-nombre-de-pages-d-un-fichier-pdf

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
14 févr. 2012 à 11:48
Plus de warning et exécution impeccable :)
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
14 févr. 2012 à 11:22
Je compilais sans le moindre Warning.... :(

c'est normalement corrigé, plus bavard et plus les pdf mieux controlés.
Merci pour ces tests rapides et efficaces.
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
14 févr. 2012 à 10:39
Il reste encore un tout petit peu de warnings :)

toto.c: In function ‘CountPDFPage’:
toto.c:48:32: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
toto.c:48:48: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] (p et buf étant de même type (char*), les cast en unsigned int, sont-ils nécessaires pour effectuer "p < buf" ?)
toto.c:11:16: warning: variable ‘len’ set but not used [-Wunused-but-set-variable] (ligne 47, len est remplie mais jamais utilisé, peut être p<(buf+len); plutôt que p<(buf+1024) ?)

Autre question:
- Pourquoi avoir "casté" le retour du malloc ligne 44 ? En C, ce n'est pas nécessaire (uniquement en C++).- refCount atoi(p)-1;> Peut être tester le atoi(p) avant de faire un -1 dans un unsigned ? (Chez moi le atoi(p) renvoie 0 et j'ai alors une valeur de refCount gigantesque, d'où mon segfault).

>> les xref compressées que proposent les specs pdf 1.5 ne sont pas prises en compte, ca peut etre une evolution a prévoir.
Y aurait-il un moyen de voir si le fichier est compressé et avertir l'utilisateur plutôt qu'un segfault ?

En tout cas merci pour les modifications, c'est le genre de petit outil dont je n'ai pas encore l'utilité, mais que je vais garder sous le coude !
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
14 févr. 2012 à 08:44
Corrigé.

Je cible aussi un systeme unix, avec cet outil, mes settings semblent etre plus laxistes que les tiens...
Je mets de coté cette -W -Wall pratique

Je m'en sert au boulot, dans des chaines de traitement (je sais donc que j'ai des pdf en entrée)

les xref compressées que proposent les specs pdf 1.5 ne sont pas prises en compte, ca peut etre une evolution a prévoir.

quand au fait que le fichier ne soit pas un pdf, il ne se passera pas grand chose, on ne trouvera pas de startxref en fin de fichier, so...
j'ai ajouté un test supplémentaire néanmoins
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
13 févr. 2012 à 17:24
C'est un outil très intéressant, et qui peut se réveler pratique !

J'ai néanmoins quelques petit soucis:

- Pourrais-tu vérifier le type mime ? Si l'on met un fichier qui n'est pas de type pdf, que se passe-t-il ?
- Chez moi, ton binaire plante (Arch Linux + gcc 4.6).
gdb --args ./a.out monpdf.pdf
Reading symbols from /tmp/a.out...done.
gdb$ r

Program received signal SIGSEGV, Segmentation fault.
0x00000000004009c7 in CountPDFPage (Fichier=0x7fffffffe358 "monpdf.pdf") at toto.c:47
47 { XRef[i] = atoi(p);
gdb$ bt
#0 0x00000000004009c7 in CountPDFPage (Fichier=0x7fffffffe358 "monpdf.pdf") at toto.c:47
#1 0x0000000000400b7f in main (argc=2, argv=0x7fffffffdf08) at toto.c:88
gdb$ quit

- J'ai *beaucoup* de warning à la compilation.
gcc -W -Wall -ansi -pedantic toto.c -g
toto.c: In function ‘CountPDFPage’:
toto.c:28:9: warning: pointer targets in assignment differ in signedness [-Wpointer-sign]
toto.c:28:3: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
toto.c:32:5: warning: pointer targets in passing argument 1 of ‘atoi’ differ in signedness [-Wpointer-sign]
/usr/include/stdlib.h:148:12: note: expected ‘const char *’ but argument is of type ‘unsigned char *’
toto.c:36:7: warning: pointer targets in assignment differ in signedness [-Wpointer-sign]
toto.c:39:5: warning: pointer targets in passing argument 1 of ‘atoi’ differ in signedness [-Wpointer-sign]
/usr/include/stdlib.h:148:12: note: expected ‘const char *’ but argument is of type ‘unsigned char *’
toto.c:46:12: warning: pointer targets in assignment differ in signedness [-Wpointer-sign]
toto.c:46:32: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
toto.c:46:48: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
toto.c:47:7: warning: pointer targets in passing argument 1 of ‘atoi’ differ in signedness [-Wpointer-sign]
/usr/include/stdlib.h:148:12: note: expected ‘const char *’ but argument is of type ‘unsigned char *’
toto.c:56:13: warning: pointer targets in assignment differ in signedness [-Wpointer-sign]
toto.c:56:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
toto.c:58:9: warning: pointer targets in passing argument 1 of ‘strncmp’ differ in signedness [-Wpointer-sign]
/usr/include/string.h:146:12: note: expected ‘const char *’ but argument is of type ‘unsigned char *’
toto.c:60:15: warning: pointer targets in assignment differ in signedness [-Wpointer-sign]
toto.c:60:9: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
toto.c:66:17: warning: pointer targets in assignment differ in signedness [-Wpointer-sign]
toto.c:66:11: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
toto.c:68:13: warning: pointer targets in passing argument 1 of ‘atoi’ differ in signedness [-Wpointer-sign]
/usr/include/stdlib.h:148:12: note: expected ‘const char *’ but argument is of type ‘unsigned char *’
toto.c:13:16: warning: variable ‘len’ set but not used [-Wunused-but-set-variable]
toto.c: At top level:
toto.c:80:5: warning: first argument of ‘main’ should be ‘int’ [-Wmain]
Rejoignez-nous