找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 31527|回复: 13

[文件操作] [已解决]批处理有没有办法统计出多页PDF的页数呢?

[复制链接]
发表于 2015-9-16 11:15:05 | 显示全部楼层 |阅读模式
有很多PDF,都是多页的(也就是说一个pdf文件里面含有多张图)。有没有办法统计出N个PDF的所有页数呢?
比如:有01.PDF(含5张图)、02.PDF(含22张图)、03.PDF(含38张图)  都放到   E:\统计   里面
然后统计出:有三个PDF共含65张图
谢谢

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2015-9-16 16:04:00 | 显示全部楼层
利用网上所说的标识统计法
保存为批处理文件,跟pdf文件放在一起运行

  1. @echo off 2>nul 3>nul
  2. ::需要安装.Net Framework 2.0及以上
  3. ::指定父文件夹
  4. set "fd=E:\统计"
  5. if not exist "%fd%" echo;路径有误&pause&exit
  6. set "netpath=%systemroot%\Microsoft.NET\Framework"
  7. for /f "delims=" %%a in ('dir /ad /b "%netpath%\v?.*"') do (
  8.     if exist "%netpath%\%%a\csc.exe" (
  9.         set "cscpath=%netpath%\%%a\csc.exe"
  10.         goto :0
  11.     )
  12. )
  13. echo;未安装.Net Framework 2.0及以上组件或相关程序丢失&pause&exit
  14. :0
  15. >"%tmp%\$" more +20 "%~f0"
  16. "%cscpath%" /out:"%tmp%\$getpages.exe" "%tmp%\$"
  17. echo;正在统计,稍后……
  18. ::输出到txt文件,下句修改为 >"文本.txt" "%tmp%\$getpages.exe" "%fd%"
  19. "%tmp%\$getpages.exe" "%fd%"
  20. pause&exit
  21. using System;
  22. using System.IO;
  23. using System.Text.RegularExpressions;
  24. namespace GetPages
  25. {
  26.     class PDFPageCount
  27.     {
  28.         static void Main(string[] args)
  29.         {
  30.             int i=0,s=0;
  31.             String path = args[0].ToString();
  32.             String[] files = Directory.GetFiles(path, "*.pdf", SearchOption.AllDirectories);
  33.             foreach (string file in files)
  34.             {
  35.                 FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read);
  36.                 StreamReader sr = new StreamReader(fs);
  37.                 string pdfText = sr.ReadToEnd();
  38.                 Regex regexp = new Regex(@"/Type\s*/Page[^s]");
  39.                 MatchCollection matches = regexp.Matches(pdfText);
  40.                 i++;
  41.                 s+=matches.Count;
  42.                 Console.WriteLine(file+"\t"+matches.Count);
  43.             }
  44.             Console.WriteLine("----------------------\r\n"+i+" Files\t"+s+" Pages");
  45.         }
  46.     }
  47. }
复制代码

评分

参与人数 3技术 +3 收起 理由
CrLf + 1 c#
001011 + 1 非常感谢 完美运行
回家路上 + 1 发现pcl又多了一项技能...C#...

查看全部评分

 楼主| 发表于 2015-9-16 16:42:40 | 显示全部楼层
不知道能不能加一个路径上去   这样可以统计一个文件夹下的所有PDF文件  谢谢
发表于 2015-9-16 17:04:46 | 显示全部楼层
回复 3# 001011

每个文件夹单独统计?还是所有文件夹一起统计?
 楼主| 发表于 2015-9-16 17:10:42 | 显示全部楼层
所有文件夹一起统计 谢谢
发表于 2015-9-16 17:30:18 | 显示全部楼层
回复 2# pcl_test


    这样都可以!!!卧槽!!!卧槽!!!!!
发表于 2015-9-16 17:38:37 | 显示全部楼层
回复 5# 001011

已修改
发表于 2015-9-16 17:44:57 | 显示全部楼层
研究了一下,原来 pdf 是基于 postscript,那也可以用 grep、findstr 之类的工具实现
  1. grep -c "Type\s*/Page" *.pdf
复制代码
然后将结果减一即可

不过我好奇的是,严格来讲,如果 pdf 里包含 Type/Page 会怎样呢?
 楼主| 发表于 2015-9-16 18:05:12 | 显示全部楼层
我貌似遇到高人了啊
连巡查都   卧槽!!!卧槽!!!!!
呵呵
非常感谢高人啊
 楼主| 发表于 2015-9-16 18:07:58 | 显示全部楼层
只是执行效率有点低   257个PDF 快三分钟了  还没有执行完
我准备把10多万个的PDF  全部统计一遍呢
 楼主| 发表于 2015-9-16 18:19:03 | 显示全部楼层
貌似是识别完了  没有提示
发表于 2015-9-16 18:25:10 | 显示全部楼层
是啊,PDF没有自带个页数的属性呢,这样通过文本正则解析提取,如果pdf大的话,确实费时。
但能提取就已经是惊喜了。
 楼主| 发表于 2015-9-16 18:29:44 | 显示全部楼层
呵呵 也是啊
发表于 2019-8-9 11:18:32 | 显示全部楼层
为什么没有文本.txt生成出来?我都找过了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 06:16 , Processed in 0.022684 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表