标题: [文件操作] [已解决]批处理有没有办法统计出多页PDF的页数呢? [打印本页]
作者: 001011 时间: 2015-9-16 11:15 标题: [已解决]批处理有没有办法统计出多页PDF的页数呢?
有很多PDF,都是多页的(也就是说一个pdf文件里面含有多张图)。有没有办法统计出N个PDF的所有页数呢?
比如:有01.PDF(含5张图)、02.PDF(含22张图)、03.PDF(含38张图) 都放到 E:\统计 里面
然后统计出:有三个PDF共含65张图
谢谢
作者: pcl_test 时间: 2015-9-16 16:04
利用网上所说的标识统计法
保存为批处理文件,跟pdf文件放在一起运行- @echo off 2>nul 3>nul
- ::需要安装.Net Framework 2.0及以上
- ::指定父文件夹
- set "fd=E:\统计"
- if not exist "%fd%" echo;路径有误&pause&exit
- set "netpath=%systemroot%\Microsoft.NET\Framework"
- for /f "delims=" %%a in ('dir /ad /b "%netpath%\v?.*"') do (
- if exist "%netpath%\%%a\csc.exe" (
- set "cscpath=%netpath%\%%a\csc.exe"
- goto :0
- )
- )
- echo;未安装.Net Framework 2.0及以上组件或相关程序丢失&pause&exit
- :0
- >"%tmp%\$" more +20 "%~f0"
- "%cscpath%" /out:"%tmp%\$getpages.exe" "%tmp%\$"
- echo;正在统计,稍后……
- ::输出到txt文件,下句修改为 >"文本.txt" "%tmp%\$getpages.exe" "%fd%"
- "%tmp%\$getpages.exe" "%fd%"
- pause&exit
- using System;
- using System.IO;
- using System.Text.RegularExpressions;
- namespace GetPages
- {
- class PDFPageCount
- {
- static void Main(string[] args)
- {
- int i=0,s=0;
- String path = args[0].ToString();
- String[] files = Directory.GetFiles(path, "*.pdf", SearchOption.AllDirectories);
- foreach (string file in files)
- {
- FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read);
- StreamReader sr = new StreamReader(fs);
- string pdfText = sr.ReadToEnd();
- Regex regexp = new Regex(@"/Type\s*/Page[^s]");
- MatchCollection matches = regexp.Matches(pdfText);
- i++;
- s+=matches.Count;
- Console.WriteLine(file+"\t"+matches.Count);
- }
- Console.WriteLine("----------------------\r\n"+i+" Files\t"+s+" Pages");
- }
- }
- }
复制代码
作者: 001011 时间: 2015-9-16 16:42
不知道能不能加一个路径上去 这样可以统计一个文件夹下的所有PDF文件 谢谢
作者: pcl_test 时间: 2015-9-16 17:04
回复 3# 001011
每个文件夹单独统计?还是所有文件夹一起统计?
作者: 001011 时间: 2015-9-16 17:10
所有文件夹一起统计 谢谢
作者: CrLf 时间: 2015-9-16 17:30
回复 2# pcl_test
这样都可以!!!卧槽!!!卧槽!!!!!
作者: pcl_test 时间: 2015-9-16 17:38
回复 5# 001011
已修改
作者: CrLf 时间: 2015-9-16 17:44
研究了一下,原来 pdf 是基于 postscript,那也可以用 grep、findstr 之类的工具实现- grep -c "Type\s*/Page" *.pdf
复制代码
然后将结果减一即可
不过我好奇的是,严格来讲,如果 pdf 里包含 Type/Page 会怎样呢?
作者: 001011 时间: 2015-9-16 18:05
我貌似遇到高人了啊
连巡查都 卧槽!!!卧槽!!!!!
呵呵
非常感谢高人啊
作者: 001011 时间: 2015-9-16 18:07
只是执行效率有点低 257个PDF 快三分钟了 还没有执行完
我准备把10多万个的PDF 全部统计一遍呢
作者: 001011 时间: 2015-9-16 18:19
貌似是识别完了 没有提示
作者: 回家路上 时间: 2015-9-16 18:25
是啊,PDF没有自带个页数的属性呢,这样通过文本正则解析提取,如果pdf大的话,确实费时。
但能提取就已经是惊喜了。
作者: 001011 时间: 2015-9-16 18:29
呵呵 也是啊
作者: a6236130 时间: 2019-8-9 11:18
为什么没有文本.txt生成出来?我都找过了
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |