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

[文件操作] 求助能够统计pdf页数的bat脚本

[复制链接]
发表于 2023-5-16 11:52:55 | 显示全部楼层 |阅读模式
因为之前做的很多东西都没统计过页数,现在审计查要具体数据,有大神能帮忙写一个吗?
发表于 2023-5-16 13:30:31 | 显示全部楼层
回复 1# 2652boy

  1. import argparse
  2. from glob import glob
  3. from os.path import exists, join
  4. from PyPDF2 import PdfFileReader

  5. def get_total_pages(folder, recursive=False):
  6.     if not exists(folder):
  7.         return "Error: No such file or directory: {}".format(folder)
  8.     if recursive:
  9.         pdf_list = glob(join(folder, "**/*.pdf"), recursive=True)
  10.     else:
  11.         pdf_list = glob(join(folder, "*.pdf"), recursive=False)

  12.     pages = []
  13.     for pdf in pdf_list:
  14.         reader = PdfFileReader(pdf)
  15.         num_page = reader.getNumPages()
  16.         # print("%d pages <-- '%s'" % (num_page, pdf))
  17.         pages.append(num_page)
  18.     return sum(pages)

  19. if __name__ == "__main__":
  20.     parser = argparse.ArgumentParser()
  21.     parser.add_argument('folder', type=str, help='path to the folder where PDF files are stored.')
  22.     parser.add_argument('--recursive', '-r', action='store_true', help='search PDF files in the <folder> recursively.')
  23.     args = parser.parse_args()
  24.     total_pages = get_total_pages(args.folder, recursive=args.recursive)
  25.     print("===============================\nTotal pages in '%s': %d" % (args.folder, total_pages))
复制代码
将以上文本以UTF-8编码保存为count_pdf_pages.py,假设要统计"D:\tmp\pdf"文件夹(含子文件夹)下所有pdf文档的页数总数,可执行以下指令获得:
python count_pdf_pages.py "D:\tmp\pdf" -r
 楼主| 发表于 2023-5-16 15:37:22 | 显示全部楼层
回复 2# hfxiang


    感谢大佬
发表于 2023-5-16 16:18:57 | 显示全部楼层
本帖最后由 buyiyang 于 2023-5-16 16:47 编辑

现在的exiftool功能比较强大
  1. set "sd=C:\1\2"
  2. cd "%sd%"
  3. "%~dp0exiftool(-k).exe" -s -csv -PageCount *.pdf>%~dp0pdfpages.txt
复制代码
补充一个下载链接https://exiftool.org/exiftool-12.62.zip,脚本和exiftool放同一个目录,然后在脚本中设置好pdf目录
发表于 2023-5-16 18:55:38 | 显示全部楼层
试试用word.application(office)/kwps.application(wps)
自带的总归比第三方好(谁电脑上每个文档编辑器?)
发表于 2023-5-16 19:46:28 | 显示全部楼层
  1. @echo off & setlocal enabledelayedexpansion
  2. set file=a.pdf
  3. for /f %%i in ('findstr /irc:"/Type[         ]*/Page" "!file!" 2^>nul ^|find /v "/Pages" ^|find /c "/Page"') do set "n=%%i"
  4. echo !file!  !n!

  5. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
buyiyang + 1 感谢分享

查看全部评分

发表于 2023-5-16 22:09:41 | 显示全部楼层
回复 6# terse


    页面对象的数目和pdf的实际页数似乎不完全一致,我看了一下页面树根节点有一个Count属性与实际页数一致。
发表于 2023-5-16 22:48:55 | 显示全部楼层
回复 1# 2652boy


批处理调用PDFtk获取PDF文件页数
http://bbs.bathome.net/thread-65227-1-1.html#pid264896
发表于 2023-5-17 00:08:01 | 显示全部楼层
本帖最后由 terse 于 2023-5-17 13:42 编辑

回复 7# buyiyang
是的  但也可能会包含多个count属性 准确性也会受到影响 还是专业工具处理好

添加个提取count属性的
删了 准确性不高
另外 这样可以一次findstr哦
  1. findstr /irc:"/Type[         ]*/Page\>" "!file!" 2^>nul ^|find /c "/Page"
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 21:12 , Processed in 0.019978 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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