我可以看到有很多关于使用C,PHP和其他文件获取pdf页面的问题,但我想知道批处理文件或cmd是否有一种获取页数的简单方法?
答案 0 :(得分:51)
答案 1 :(得分:28)
或者,您可以使用该命令,该命令仅返回数字:
pdfinfo "${PDFFILE}" | grep Pages | sed 's/[^0-9]*//'
您将需要xpdf软件包(通常在许多发行版中预装):
答案 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上,您应该使用findstr
和find
代替:
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"
答案 6 :(得分:0)
这可能对新用户有用。在新版本的PDFtk工具(2.0版以上)中,使用以下命令获取PDF文件的页数:
pdftk file.pdf dump_data_annots output outputfile.txt
将在目标位置创建一个新文件,其内容类似于以下内容:
NumberOfPages: 6
现在读取文件并根据需要操作内容。