分享

动态提取PDF内容的终极秘籍!兼一个超强网站推荐!| PA重要资源

 大海_Power 2021-12-13

- 1 -

上次的文章《PDF内容自动提取,想取哪些页面就取哪些页面!| PA实战案例》里,讲解了怎么自动提取指定页码PDF内容的操作方法,并且提及一种动态提取的情况:提取文件中除最后固定几页(如5页)以外的所有内容。

比如,很多企业的pdf报告,前面包含数据的页面不固定,但最后几页,嘿嘿,都是一些例行的备注说明,这样,我们要动态地去取前面的数据页面,最关键的是能获取到整个pdf报告的页数。

但是,目前Power Automate里却没有支持获取pdf文件页数的操作或方法,这时,我们就需要通过Power Automate自动调用第三方的工具来实现了!比如,炒鸡强大的pdf批处理工具:pdftk!

- 2 -

pdftk是啥?简单来说,就是一个操作pdf的工具箱(全称:pdf toolkit),完整介绍及文档可以参考官网PDF Labs:


https://www./tools/pdftk-the-pdf-toolkit/

但是,一般来说,官网的内容对大部分普通用户来说,都是看得贼累的,所以,这个官网并不是本次推荐的关键,下面这个才是——网站“批处理之家”:

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命令,但是,稍作了解,在需要的时候知道可能存在这么一种方式,哪怕是让别人帮忙实现,也多一种思路。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多