我可以看到有很多关于使用C,PHP和其他方法获取pdf页面的问题,但我想知道批处理文件或cmd是否有一种获取页数的简单方法?
使用pdftk:
pdftk my.pdf dump_data | grep NumberOfPages
诀窍.
或者,您可以使用该命令,该命令仅返回数字:
pdfinfo "${PDFFILE}" | grep Pages | sed 's/[^0-9]*//'
您将需要xpdf包(通常预装在许多发行版中):
http://www.foolabs.com/xpdf/download.html
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上,您应该使用findstr
而find
不是:
qpdf --show-pages file.pdf | findstr ^page | find /c /v ""
没有任何外部工具(保存脚本如下.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符号,但可以进行优化.