当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《使用cmd批处理文件获取pdf中的页数》经验,为你挑选了4个好方法。

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



1> Tuure Laurin..:

使用pdftk:

pdftk my.pdf dump_data | grep NumberOfPages

诀窍.


用`findstr`代替`grep`,你甚至可以在Windows上运行而不必安装超过pdftk.
另一种获取数字的方法是使用awk打印第二列.`pdftk my.pdf dump_data | grep NumberOfPages | awk'{print $ 2}'`
结合上面的回复`pdftk my.pdf dump_data | grep NumberOfPages | sed's/[^ 0-9]*//'`你得到的数字.

2> 小智..:

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

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

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

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


实际上,在Debian中,包是poppler-utils.Xpdf只使用Poppler库并推荐使用poppler-utils.
总结目录中所有PDF文件的页数:`(对于* .pdf中的pdf;执行pdfinfo“ $ pdf”;完成)| grep页面| sed's / [^ 0-9] * //'| 粘贴-sd + | 公元前

3> Palec..:

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

qpdf --show-npages file.pdf

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

存在大多数Linux发行版的软件包,通常命名为qpdf.像Softpedia主页二进制文件的页面.该源代码可以从SourceForge上下载,或者从官方GitHub的仓库.


--show-npages在4.1.0之后的版本中,在提交91367239fd55f7c4996ed6158405ea10573ae3cb中添加了该选项.要与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 ""


默认情况下,它似乎已在我的Ubuntu 16.10安装中安装!:D

4> npocmaka..:

没有任何外部工具(保存脚本如下.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" &&
                 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符号,但可以进行优化.


实际上,我过去写过一个PDF渲染器,所以我确切地知道PDF文件的样子.我也知道这段代码永远不会在现实生活中起作用,因为PDF文件可以包含很多"<
推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有