Board logo

标题: [文件操作] 求助能够统计pdf页数的bat脚本 [打印本页]

作者: 2652boy    时间: 2023-5-16 11:52     标题: 求助能够统计pdf页数的bat脚本

因为之前做的很多东西都没统计过页数,现在审计查要具体数据,有大神能帮忙写一个吗?
作者: hfxiang    时间: 2023-5-16 13:30

回复 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
作者: 2652boy    时间: 2023-5-16 15:37

回复 2# hfxiang


    感谢大佬
作者: buyiyang    时间: 2023-5-16 16:18

本帖最后由 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目录
作者: jyswjjgdwtdtj    时间: 2023-5-16 18:55

试试用word.application(office)/kwps.application(wps)
自带的总归比第三方好(谁电脑上每个文档编辑器?)
作者: terse    时间: 2023-5-16 19:46

  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
复制代码

作者: buyiyang    时间: 2023-5-16 22:09

回复 6# terse


    页面对象的数目和pdf的实际页数似乎不完全一致,我看了一下页面树根节点有一个Count属性与实际页数一致。
作者: Batcher    时间: 2023-5-16 22:48

回复 1# 2652boy


批处理调用PDFtk获取PDF文件页数
http://bbs.bathome.net/thread-65227-1-1.html#pid264896
作者: terse    时间: 2023-5-17 00:08

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

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

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





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2