前面的文章《给pdf文件插入一页,Power Automate是怎么自动做到的?| PA实战》里介绍了怎么给pdf文件插入内容,相反地,有插入,就有删除。
比如,很多pdf文件里,会插入一些广告页面,尤其是一些“免费”的文档——对于这一点,其实也能理解,毕竟文档整理不容易,插个广告求个关注也是对付出的的一点点回报。但理解归理解,有时候,我们还是希望能把广告页面给删除一下。
如果只是一个两个文件,那手动操作也很快,既可以通过专业的软件,也可以直接用Power Automate来实现,方法很简单,即咱们前面文章《PDF内容自动提取,想取哪些页面就取哪些页面!| PA实战案例》里所用的方法——将 PDF 页面提取到新的 PDF,在此不再赘述。
下面,我们主要讲批量操作多个文件的两种情况:删除页位置固定、删除页位置需通过页面内容搜索判断。
- 1 -
待删除页在固定位置
这个情况也可以使用“将PDF页面提取到新的PDF”功能来实现,但是,问题在于仍然要借助pdftk工具识别出pdf文件的总页数,因此,我们直接使用pdftk工具的合并功能,直接合并(删除)掉相应页面——该合并功能实在太好用,具体使用方法在此再举例赘述一下:
比如,要将adv.pdf文件插入到文件“01 Nov 2029.pdf”的第3页后,pdftk处理命令可写为:
代码语言:javascript复制pdftk A="01 Nov 2019.pdf" B="adv.pdf" cat A1-3 B A4-end output out.pdf
这个命令的写法很有意思:将"01 Nov 2019.pdf"文件设为A,“adv.pdf”文件设为B,然后合并【A的第1-3页、B、A的第4-最后一页(end)】,输出为out.pdf文件。
那么,借助该合并功能,假设我们要删掉文件夹“E:RPApdf2019”中所有pdf文件的第4页。实现步骤如下:
Step-01 获取文件夹中的文件
Step-02 添加for each循环
选择对上一步骤的获取的pdf文件(%Files%)进行循环操作。
Step-03 在循环中添加“运行DOS命令”
注意其中的DOS命令写法:
1、pdftk命令要按自己存放pdftk工具的文件路径写完整:如我这里是“E:RPApdfPDFtkpdftk.exe”;
2、选择循环的当前项目变量(文件)放入到DOS命令时,注意是否要加上双引号。比如,这里因为要引用的是文件路径,而文件路径本身可能存在空格等,所以要套上双引号。
- 2 -
待删除页需通过内容判断
有些情况下,需要删除的页面不是固定的页码,而需要根据页面的内容进行确定,比如,该页面含有特定的广告用语……
这种情况下,就需要通过对页面内容进行提取,然后进行文本比对(包含判断)等方式才能确定要删除的页面,难度比较大。而且,暂时没有发现什么支持直接按搜索内容删除页面的pdf工具。
但是,经研究,发现pdftk支持我们将pdf文件按页拆成不同的文件(每页一个),这样,我们再针对拆分后的文件提取其内容进行判断,如果包含特定信息,我们直接把该页文件删除,然后再对剩下的页文件进行合并,不就能达到同样的目的了吗?
下面我们就来看一下具体怎么做。
Step-01 获取文件夹中的文件
Step-02 添加 for each 循环
Step-03 用原文件名创建文件夹,用于存放拆页后的文件
Step-04 运行DOS命令,将pdf文件拆解到文件夹
代码语言:javascript复制E:RPAtoolboxPDFtkPDFtkpdftk.exe "%CurrentItem.FullName%" burst output "E:RPApdfdel_page%CurrentItem.NameWithoutExtension%pdf_%d.pdf"
pdf_d.pdf表示拆成文件名为pdf_0001.pdf,pdf_0002.pdf……的文件名。
Step-05 获取拆解后的单页文件
Step-06 添加内循环for each
对每一页pdf进行遍历,读取其中内容
Step-07 从pdf提取文本
Step-08 添加IF条件,对单页pdf文件提取的文本进行判断
条件设置为:如果该页面提取的内容(%ExtractedPDFText%)包含“我是广告”。
Step-09 删除该页pdf文件
Step-10 获取当前文件夹的文件
经过Step-09,包含广告的页面pdf文件已被删除,再次获取该文件夹下的全部pdf文件,为后续合并做准备:
Step-11 合并PDF文件
对上一步骤获取的(经过删减广告)的pdf文件进行合并。
经过以上拆分、提取文本、判断、删除页面、再合并的过程,我们达到了按内容删除pdf页面的目的。
这种方法因为考虑要删除页面的位置完全不确定,因此需要对pdf文件全部进行拆解,结果会导致拆解后的文件较多,且每个页面均要进行文本提取、判断,所以,如果页面很多,运行效率可能会比较低。
在实际工作中,如果需要删除的页面位置相对固定,比如只可能出现在某几页,那么,建议先提取这几页出来,单独处理后再合并,而避免全部拆解的效率问题。