[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

因为之前做的很多东西都没统计过页数,现在审计查要具体数据,有大神能帮忙写一个吗?

回复 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

TOP

回复 2# hfxiang


    感谢大佬

TOP

本帖最后由 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目录

TOP

试试用word.application(office)/kwps.application(wps)
自带的总归比第三方好(谁电脑上每个文档编辑器?)

TOP

  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

评分人数

TOP

回复 6# terse


    页面对象的数目和pdf的实际页数似乎不完全一致,我看了一下页面树根节点有一个Count属性与实际页数一致。

TOP

回复 1# 2652boy


批处理调用PDFtk获取PDF文件页数
http://bbs.bathome.net/thread-65227-1-1.html#pid264896
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 terse 于 2023-5-17 13:42 编辑

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

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

TOP

返回列表