使用Shell脚本提取.ppt文件中的幻灯片数量

时间:2018-10-17 19:13:30

标签: bash terminal powerpoint

我在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文件一起使用吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

让我回答您一半的问题。
关于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文件。您可以在<Slides>n</Slides>形式的docProps / app.xml文件中找到幻灯片计数。
上面的代码用于将docProps / app.xml解压缩为stdout,然后将其解析为Slides属性。

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