作者:zyl910。
一、问题背景
之前的“利用按键精灵批量删除pdf中的水印”仅适用于页面内对象数量确定时。如下图中,页面内对象总是3个,其中第3个是水印——
但是,对于某些pdf文件,页面内对象的数量是不定的,见下图——
某些页面有3个对象,而另外一些页面是4个对象。这时原来的脚本就不能用了,若下移3次会导致删除有效数据,若下移4次又会误删除页面。
该怎样才能准确定位到最后一个对象呢?
二、解决办法
在Adobat内容面板上反复尝试,发现使用 Shift+上下方向键 时,焦点会限制在当前层次。
于是,可以利用这一点实现快捷键盲操作——
1.首先,点击鼠标将键盘焦点设在“页面1”上;
2.按1次方向键“Right”,使“页面1”的子节点展开;
3.按住Shift键,然后按4次方向键“Down”,随即松开Shift键。这时因Shift+上下方向键限制层次,键盘焦点停留能准确停留在最后一个对象(水印对象)上。但这时选择了多个对象,不能立即删除。
4.按1次方向键“Up”,上移并取消多选;
5.按1次方向键“Down”,使键盘焦点停留在“页面1”的最后一个对象——即水印对象上;
6.按“Delete”键删除水印对象。删除成功后,键盘焦点会回到“页面1”;
7.按1次方向键“Left”,使“页面1”的子节点收拢;
8.按1次方向键“Down”,使键盘焦点停留在“页面2”;
9.重复第2步至第8步,删除所有页面中的水印对象。
三、编写脚本
根据上面的成果。可以编写按键精灵脚本了——
// 利用Shift键智能到达最下面的一项. SetSimMode 2 // 发现使用组合键时,只有方式2能行. KeyPress "Right", 1 //展开页面节点 Delay 10 KeyPress "Down", 1 //下移进入 Delay 10 //下移至最后一项 KeyDown 16, 1 // Shift+Down KeyPress 40, 1 KeyPress 40, 1 KeyPress 40, 1 KeyPress 40, 1 KeyUp 16, 1 Delay 10 KeyPress "Up", 1 //先回退一项,取消Shift选择 Delay 10 KeyPress "Down", 1 //下移至水印对象 Delay 10 KeyPress "Delete", 1 //删除水印 Delay 100 KeyPress "Left", 1 //收缩页面节点 Delay 10 KeyPress "Down", 1 //下移到下一个节点 Delay 10
在实际使用时发现,必须使用“SetSimMode 2”调整模拟模式。若是模式0,有时Shift组合键会失效。若是模式1,有时会按错键导致焦点跑飞。只有模式2能稳定工作,就是速度慢了一点。
参考文献——
《[使用心得]利用按键精灵批量删除pdf中的水印》. http://www.cnblogs.com/zyl910/archive/2012/05/22/pdf_remove_watermake_marco.html