使用cmd批处理文件获取pdf中的页数

时间:2009-11-04 09:16:31

标签: pdf batch-file cmd

我可以看到有很多关于使用C,PHP和其他文件获取pdf页面的问题,但我想知道批处理文件或cmd是否有一种获取页数的简单方法?

7 个答案:

答案 0 :(得分:51)

使用pdftk

pdftk my.pdf dump_data | grep NumberOfPages

诀窍。

答案 1 :(得分:28)

或者,您可以使用该命令,该命令仅返回数字:

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

您将需要xpdf软件包(通常在许多发行版中预装):

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

答案 2 :(得分:19)

QPDF是PDFtk(需要Java运行时)和pdfinfo(非常愚蠢的工具)的轻量级替代品。

qpdf --show-npages file.pdf

它只打印页数,不需要后期处理。

大多数Linux发行版的软件包都存在,通常只命名为qpdf。软件主页binaries for Windows等页面。 source code可以从SourceForge或official GitHub repository下载。

commit 91367239fd55f7c4996ed6158405ea10573ae3cb中的4.1.0之后的版本中添加了--show-npages选项。要与版本4.1.0及更早版本兼容,您可以转储有关每个页面的基本信息并计算页面。在Linux和OS X中:

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

在Windows上,您应该使用findstrfind代替:

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

答案 3 :(得分:6)

没有任何外部工具(将脚本保存为.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);
   }

它采用.pdf文件的路径,只是打印页面的数量。它不是很快,因为它按符号读取pdf符号,但可以进行优化。

答案 4 :(得分:3)

因为您要求提供&#34;批处理文件&#34;我必须假设您只需要基于Windows的解决方案。但是,以防万一Mac OS X是一个选项,这里可能有用。 如果Mac上有PDF,在Spotlight索引的驱动器(默认设置)上,则以下命令将返回不使用外部依赖关系的页数:

mdls -name kMDItemNumberOfPages POSIX_PATH_OF_PDF_FILE

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

答案 5 :(得分:1)

我知道这是旧文章,但仍然非常相关,因此我认为应该有一个答案,可以告诉您如何使用“ poppler-0.68.0 ”实用程序来获取页数,在Windows中。

导航到bin文件夹并运行 pdfinfo.exe ,例如- C:\Temp\temp_folder\poppler-0.68.0\bin>pdfinfo.exe "C:\Temp\temp_folder\TT.pdf"

Code in action

答案 6 :(得分:0)

这可能对新用户有用。在新版本的PDFtk工具(2.0版以上)中,使用以下命令获取PDF文件的页数:

pdftk file.pdf dump_data_annots output outputfile.txt

将在目标位置创建一个新文件,其内容类似于以下内容:

NumberOfPages: 6

现在读取文件并根据需要操作内容。