web-dev-qa-db-fra.com

Obtenir le nombre de pages d'un fichier PDF à l'aide d'un fichier de commandes cmd

Je peux voir qu'il y a beaucoup de questions pour obtenir le nombre de pages dans un pdf avec C, PHP et d'autres, mais je me demande si un fichier batch ou cmd existe-t-il un moyen simple d'obtenir le nombre de pages?

34
Peter Craig

Utiliser pdftk :

pdftk my.pdf dump_data | grep NumberOfPages

fait le tour.

50
Tuure Laurinolli

Sinon, vous pouvez utiliser la commande, qui renvoie uniquement le nombre:

pdfinfo "${PDFFILE}" | grep Pages | sed 's/[^0-9]*//'

Vous aurez besoin du paquet xpdf (généralement préinstallé dans de nombreuses distributions):

http://www.foolabs.com/xpdf/download.html

27
dimib

QPDF est une alternative light à PDFtk (nécessitant du temps d'exécution Java) et pdfinfo (un outil plutôt stupide).

qpdf --show-npages file.pdf

Il n'imprime que le nombre de pages, sans post-traitement.

Il existe des packages pour la plupart des distributions Linux, généralement nommés simplement qpdf. Pages comme Softpedia Host binaires pour Windows . Le code source peut être téléchargé à partir de SourceForge ou à partir du référentiel officiel de GitHub .


L'option --show-npages a été ajoutée dans une version ultérieure à 4.1.0, dans commit 91367239fd55f7c4996ed6158405ea10573ae3cb . Pour être compatible avec version 4.1.0 et les versions antérieures, vous pouvez importer des informations de base sur chaque page et compter les pages. Sous Linux et OS X:

qpdf --show-pages file.pdf | grep -c ^page

Sous Windows, vous devriez plutôt utiliser findstr et find:

qpdf --show-pages file.pdf | findstr ^page | find /c /v ""
17
Palec

Sans outils externes (enregistrer le script ci-dessous sous le nom .bat):

@if (@X)==(@Y) @end /* JScript comment
@echo off

cscript //E:JScript //nologo "%~f0"  %*

exit /b 0
@if (@X)==(@Y) @end JScript comment */

   var args=WScript.Arguments;
   var filename=args.Item(0);
   var fSize=0;
   var inTag=false;
   var tempString="";
   var pages="";

   function getChars(fPath) {

        var ado = WScript.CreateObject("ADODB.Stream");
        ado.Type = 2;  // adTypeText = 2
        ado.CharSet = "iso-8859-1";
        ado.Open();
        ado.LoadFromFile(fPath);                     
        var fs = new ActiveXObject("Scripting.FileSystemObject");
        fSize = (fs.getFile(fPath)).size;

        var fBytes = ado.ReadText(fSize);
        var fChars=fBytes.split('');
        ado.Close();
        return fChars;
   }


   function checkTag(tempString) {

    if (tempString.length == 0 ) {
        return;
    }

    if (tempString.toLowerCase().indexOf("/count") == -1) {
        return;
    }

    if (tempString.toLowerCase().indexOf("/type") == -1) {
        return;
    }

    if (tempString.toLowerCase().indexOf("/pages") == -1) {
        return;
    }

    if (tempString.toLowerCase().indexOf("/parent") > -1) {
        return;
    }


    var elements=tempString.split("/");
    for (i = 0;i < elements.length;i++) {

        if (elements[i].toLowerCase().indexOf("count") > -1) {
            pages=elements[i].split(" ")[1];

        }
    }
   }

   function getPages(fPath) {
        var fChars = getChars(fPath);

        for (i=0;i<fSize-1;i++) {

            if ( fChars[i] == "<" && fChars[i+1] == "<" ) {
                inTag = true;
                continue;
            }

            if (inTag && fChars[i] == "<") {
                continue;
            }

            if ( inTag && 
                 fChars[i] == ">" &&
                 fChars[i+1] == ">" ) {

                inTag = false;
                checkTag(tempString);
                if (pages != "" ) {
                    return;
                }

                tempString="";

            }

            if (inTag) {
                if (fChars[i] != '\n' && fChars[i] != '\r') {
                   tempString += fChars[i];
                }
            }

        }

   }

   getPages(filename);
   if (pages == "") {
     WScript.Echo("1");
   } else {
    WScript.Echo(pages);
   }

Il prend le chemin du fichier .pdf et imprime simplement le nombre de pages. Pas assez rapide car il lit le symbole pdf par symbole, mais pourrait être optimisé.

6
npocmaka

Parce que vous avez demandé un "fichier de commandes", je suppose que vous souhaitez uniquement une solution Windows. Mais, juste au cas où Mac OS X serait une option, voici quelque chose qui pourrait être utile. Si vous avez les fichiers PDF sur un Mac, sur un lecteur indexé par Spotlight (par défaut), la commande suivante renverra le nombre de pages sans aucune dépendance externe: 

mdls -name kMDItemNumberOfPages POSIX_PATH_OF_PDF_FILE

Source: MacScripter.net - http://macscripter.net/viewtopic.php?id=32381

3

Cela pourrait être utile pour les nouveaux utilisateurs. Dans la nouvelle version de PDFtk tool (au-dessus de 2.0), utilisez la commande ci-dessous pour obtenir le nombre de pages d'un fichier PDF:

pdftk file.pdf dump_data_annots output outputfile.txt

Un nouveau fichier sera créé à destination avec un contenu similaire à celui ci-dessous:

NumberOfPages: 6

Maintenant, lisez le fichier et manipulez le contenu comme vous le souhaitez.

0
Pankaj Verma