【问题标题】:Using shell script to extract the number of slides in a .ppt file使用 shell 脚本提取 .ppt 文件中的幻灯片数量
【发布时间】:2022-01-24 22:35:56
【问题描述】:

我在JAVA中找到this实现,但我想知道是否可以获取ppt文件中的幻灯片数量?如果是这样,它是否类似于在 pptx 文件中执行相同的操作?

-查看脚本文件所在的目录 - 检测并统计ppt文件中的幻灯片数量 - 获取该号码并将其附加到 CSV 文件中

我找到了一个 bash 脚本,它可以执行类似的操作,但适用于 PDF 文件

#!/bin/bash 
saveIFS=$IFS
IFS=$(echo -en "\n\b")

myFiles=($(find . -name "*.pdf"))
totalPages=0

echo "file path, number of pages" > log_3.csv
for eachFile in ${myFiles[*]}; do
  pageCount=$(mdls $eachFile | grep kMDItemNumberOfPages | awk -F'= ' '{print $2}')
  size=${#pageCount}

  if [ $size -eq 0 ]
  then
    # these files had no entry for kMDItemNumberOfPages
    # comment out the next line to not list these files
    echo $eachFile : \*\* Skipped - no page count \*\*
  else
    # comment out the next line if you don't want to see a count for each file
    echo $eachFile, $pageCount >> log_3.csv
    totalPages=$(($totalPages + $pageCount))

  fi
done

echo "Total number of pages, ${totalPages}" >> log_3.csv
echo Total pages: $totalPages

IFS=$saveIFS

我们是否可以重构此代码以使其与 ppt 文件一起使用?

谢谢!

【问题讨论】:

  • first link 中的示例和您提供的示例代码都使用外部工具来处理 PPT 或 PDF 文件。您的第一个链接中的第一个答案适合此处,但使用 bash 而不是 PHP 包装 tika-app-1.5.jar 调用。

标签: bash terminal powerpoint


【解决方案1】:

让我回答你一半的问题。
关于pptx 文件,您可以获得幻灯片的数量:

#!/bin/bash

function pagecount() {
    local pptx=$1
    local pagecount line
    while read -r line || [[ -n "$line" ]]; do
        if [[ "$line" =~ \<Slides\>([0-9]+)\</Slides\> ]]; then
            pagecount="${BASH_REMATCH[1]}"
        fi
    done < <(unzip -j -p "$pptx" "docProps/app.xml")
    echo "$pagecount"
}

for file in *.pptx; do
    count=$(pagecount "$file")
    echo "${file} : ${count} pages"
done

与其他 MS Office 2007+ 文件(docxxlsx、...)一样,pptx 文件格式只是一个 zip 压缩的 XML 文件。您可以在 docProps/app.xml 文件中找到幻灯片计数,格式为&lt;Slides&gt;n&lt;/Slides&gt;
上面的代码用于将 docProps/app.xml 解压缩到 stdout,然后解析它以获得 Slides 属性。

关于ppt文件,文件格式与pptx完全不同,您可能需要引入一些外部工具(wvWare或类似的东西)来处理它。

【讨论】:

    【解决方案2】:

    这是我的脚本,它根据 tshiono 的回答计算目录中所有 .pptx 文件中的页数。

    #!/bin/bash
    
    function pagecount() {
      for file in *.pptx; do
        count=$(unzip -j -p "$file" "docProps/app.xml" |  grep -o -P '(?<=\<Slides\>).*(?=\</Slides\>)')
        echo "${file} : ${count} pages"
      done
    }
    

    【讨论】:

      猜你喜欢
      • 2010-12-03
      • 2023-02-10
      • 1970-01-01
      • 1970-01-01
      • 2016-10-31
      • 2017-03-15
      • 2014-05-24
      • 2011-02-27
      • 1970-01-01
      相关资源
      最近更新 更多