- 1 - 上次的文章《PDF内容自动提取,想取哪些页面就取哪些页面!| PA实战案例》里,讲解了怎么自动提取指定页码PDF内容的操作方法,并且提及一种动态提取的情况:提取文件中除最后固定几页(如5页)以外的所有内容。 比如,很多企业的pdf报告,前面包含数据的页面不固定,但最后几页,嘿嘿,都是一些例行的备注说明,这样,我们要动态地去取前面的数据页面,最关键的是能获取到整个pdf报告的页数。 但是,目前Power Automate里却没有支持获取pdf文件页数的操作或方法,这时,我们就需要通过Power Automate自动调用第三方的工具来实现了!比如,炒鸡强大的pdf批处理工具:pdftk! - 2 - pdftk是啥?简单来说,就是一个操作pdf的工具箱(全称:pdf toolkit),完整介绍及文档可以参考官网PDF Labs:
但是,一般来说,官网的内容对大部分普通用户来说,都是看得贼累的,所以,这个官网并不是本次推荐的关键,下面这个才是——网站“批处理之家”: http://bbs./ 首先是,pdftk到底能干啥? 简单来说,可以通过在DOS下写一些简单的命令,即能实现很多PDF文件处理的功能,具体功能有哪些呢?看图: 具体怎么干?看例子: 合并PDF: pdftk 1.pdf 2.pdf 3.pdf cat output 123.pdf 或者 (使用通配符): pdftk *.pdf cat output combined.pdf 把多个PDF的不同页面组合成一个新的PDF文档(将one.pdf的前7页,two.pdf的前5页,one.pdf的第8页按先后顺序合并成combined.pdf) pdftk A=one.pdf B=two.pdf cat A1-7 B1-5 A8 output combined.pdf 旋转PDF的第一页为顺时针90度(向东)(其余页方向不变,2-end表示第2页到最后一页) pdftk in.pdf cat 1E 2-end output out.pdf 旋转PDF的第一页为逆时针(向西)90度,只提取第一页 pdftk in.pdf cat 1W output out.pdf 选择所有PDF页面180度: pdftk in.pdf cat 1-endS output out.pdf 使用128强度加密PDF(安全模式,只读) pdftk in.pdf output mydoc.128.pdf owner_pw foopass 同上,同时给PDF加上访问密码(会弹出一个密码输入框) pdftk in.pdf output mydoc.128.pdf owner_pw foo user_pw baz 同上,但是运行打印: pdftk in.pdf output mydoc.128.pdf owner_pw foo user_pw baz allow printing 解密PDF文档(foopass替换成pdf的owner_pw密码):注意:前提是你得知道pdf的密码所以此功能只是解除所有者的密码,使阅读者不需要输密码 pdftk secured.pdf input_pw foopass output unsecured.pdf 合并两个PDF文档,其中一个是加密的,但最终文档不加密: pdftk A=secured.pdf mydoc.pdf input_pw A=foopass cat output combined.pdf 解压PDF流,以便文本编辑: pdftk mydoc.pdf output mydoc.clear.pdf uncompress 压缩PDF: pdftk mydoc.pdf output mydoc.clear.pdf compress 修复PDF文档 pdftk broken.pdf output fixed.pdf 分解成单页(文件名以pg_开头) pdftk mydoc.pdf burst 报告PDF信息,输出到文本 pdftk mydoc.pdf dump_data output report.txt 这么多例子,也不用一下子全部搞懂,这里咱们先看最后一条:报告PDF信息,其中就包含了一个PDF文件有多少页的信息!输出结果如下: - 3 - 回到本文开始所提问题的关键点——获取PDF文件的总页数,我们就可以在Power Automate中调用pdftk工具来实现。 首先,我们先下载工具,下载地址:https://share./uHScXQNP 解压到一个自己方便调用的文件夹下,应该包含两个文件: 然后,在Power Automate里的实现过程如下: Step-01 获取文件夹中的文件 Step-02 添加for each循环操作 Step-03 添加“运行DOS命令”步骤,获取pdf文件信息(包含页数) 在常规设置里,通过路径选择按钮选择pdftk所在的路径,通过参数选择按钮选择当前pdf文件的全名(%CurrentItem.FullName%),最后补充dumpdata参数,从而得到pdf文件的信息。 这里要注意的是,因为有些pdf文件的文件名称可能存在空格,因此,要对%CurrentItem.FullName%加上双引号,避免dos命令运行的出错! 通过上面的步骤得到pdf文件信息后,我们接下来先用比较基础的文本拆分方法从pdf信息中分离出pdf文件的页数,以后我们再讲其他更加方便的方法(但涉及到正则、或其他dos命令用法)。 Step-04 添加“拆分文本”操作,将上一步骤获取的pdf文件信息按“NumberOfPages:”拆分: 这样,pdf文件信息将被拆成2部分: 得到的结果中TextList[1]即为包含页数的部分。 Step-05 继续添加“拆分文本”步骤对TextList[1]按“换行符”进行拆分 此时,我们会得到多行内容,其中第1行(标号为0)的内容即为页数,但要注意,这里是文本格式的内容,接下来要将文本转为数值: Step-06 添加“将文本转换为数值”步骤,对TextList2[0]转换为数值: Step-07 添加“从pdf提取文本”步骤,按范围提取从第1页至“页数-5”的页面 Step-08 将提取的pdf文档内容写入文本文件 - 4 - 通过上面的简单步骤,我们获取了pdf文件的页数,然后按“页数-5”的方式完成了既定的目标。 这里,pdftk工具起到了很关键的作用,实为Power Automate实现pdf文件操作的重要补充,后面我会继续用来讲解更多日常工作中遇到的pdf文件自动化处理问题。 最后,再次推荐网站:批处理之家(http://bbs./),上面汇聚了大量用于批处理的工具或方法(DOS、PowerShell或VB)。 当然,对于大多数的朋友来说,并不需要学太多的DOS或PowerShell命令,但是,稍作了解,在需要的时候知道可能存在这么一种方式,哪怕是让别人帮忙实现,也多一种思路。 |
|