万能的pdftk
pdftk (the pdf toolkit) 是一个功能强大的命令行的 PDF 文件编辑软件,可以合并/分割 PDF 文档、对 PDF 文件加密解密、给 PDF 文档加水印、从 PDF 文档中解出附件、将 PDF 文档变成一页等等。
pdftk 是一套跨平台的工具,底层使用 iText 库,可以运行在 windows, Linux, mac, freebsd, solaris 等多种操作系统。
虽然 iText 是一套 Java 语言实现的 函数库,pdftk 并不是基于 JAVA 的。
官方网站是:http://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/
下面将结合一些简单的例子介绍它的各种功能。
1。合并多个 PDF 文档
pdftk 可以将多个 PDF 文件合并成一个文件。比如下面的例子:
pdftk 1.pdf 2.pdf 3.pdf cat output 123.pdf
或者使用文件句柄:
pdftk A=1.pdf B=2.pdf cat A B output 12.pdf
下面的例子使用了文件通配符:
pdftk *.pdf cat output combined.pdf
下面的例子将多个文件的多页提取出来生成一个新的 PDF 文件:
pdftk A=one.pdf B=two.pdf cat A1-7 B1-5 A8 output combined.pdf
注:文件名一定要正确,有时看着一样确还差个/,最好使用Tab键来自动补全.
2。将 PDF 文件中的一部分取出生成一个新文件
pdftk 可以随意删除或旋转页面。下面是一个把指定页码的页面移出pdf文档的示例。
pdftk new.pdf cat 1-96 98-end output new1.pdf
新生成的 new1.pdf 文档不包含页码为 97 的页面。cat 选项后跟的参数用以指定页码范围和页面方向的限定条件。1-96 表示从 1 到 96 页,98-end 表示从 98 页至文档末尾。所以输出的新 pdf 文档不包含页码为 97 的页面。
除了示例中的具体数值,还可使用一些限定字符。odd 和 even 表示奇偶页码。N、S、E、W、L、R、D 表示文档版面的旋转角度(N: 0,E: 90,S: 180,W: 270,L: -90,R: +90,D: +180)。
如:1-6odd 表示 1,3,5;
1-6even 表示 2,4,6;
1-endE 表示整篇文档所有页面都旋转 90 度。
90 度旋转 PDF 文件的第一页:
pdftk in.pdf cat 1E 2-end output out.pdf
旋转整个文档 180 度:
pdftk in.pdf cat 1-endS out.pdf
折分文档,将 PDF 文件的每一页输出成一个 PDF 文件,输出文件默认命名为 pg/_0001.pdf pg/_0002.pdf 等等:
pdftk in.pdf burst
也可以指定输出文件名,比如下面的例子:
pdftk in.pdf burst output page_%1d.pdf
3。PDF 文件加密和解密
pdftk 可以对现有 PDF 文件进行基于密码的加解密,也就是说对现有的加密的 PDF 文件解密需要提供解密密码,pdftk 不是强力破解工具。
pdftk 可以设置两种不同的密码,称为:owner password 和 user password。我的理解是 owner password 限制了用户是否可以对 PDF 文件打印、修改、拷贝等。而如果设置了 user password,用户就必须提供密码才能察看 PDF 文件。
PDF 文件可以采用 40 位加密或 128 位加密,通过使用命令选项 encrypt/_40bit 或 encrypt/_128bit 可以指定加密算法的位数。如果不指定默认采用 128 位加密。
用户的权限可以使用 allow 命令选项设置,可以设置的权限如下:
/begin{description}
/item[Printing] 允许高质量打印。
/item[DegradedPrinting] 允许高质量打印。
/item[ModifyContents] 允许修改文件内容。
/item[CopyContents] 允许拷贝。
/item[ModifyAnnotations] 允许添加注释。
/item[FillIn] 允许填入数据。
/item[AllFeatures] 允许所有特性。
/end{description}
与加解密相关的命令语法总结如下:
pdftk <input PDF files>
[input_pw <input PDF owner psswords]
cat
[output <output filename]
[encrypt_40bit | encrypt_128bit]
[allow <permissions>]
[owner_pw <owner password]
[user_pw <user password]
下面是几个例子:
pdftk a.pdf output b.pdf owner_pw foopass
pdftk a.pdf output b.pdf owner_pw foo user_pw baz
pdftk a.pdf output b.pdf owner_pw foo user_pw baz allow printing
pdftk secured.pdf input_pw foopass output unsecured.pdf
合并两个 PDF 文档,其中有一个是加密的,在合并时要使用句柄选项来指定密码。下面是一个示例,shortsec.pdf 是一个加密过的 PDF 文档,在合并时如果没有指定密码,则会出错:
pdftk A=a.pdf B=b.pdf cat output combined.pdf
Error: Failed to open PDF file:
a.pdf
OWNER PASSWORD REQUIRED, but not given (or incorrect)
Errors encountered. No output created.
Done. Input errors, so no output created.
下面通过句柄选项指定密码则可以正常合并:
pdftk A=a.pdf B=b.pdf input_pw A=foopass cat output combined.pdf
4。添加 PDF 背景水印或前景图章
将一个 PDF 文件的水印添加到另一个 PDF 文件中。
pdftk in.pdf background back.pdf output out.pdf
pdftk 只提取有水印的 PDF 文件的第一页作为水印。
stamp 命令选项与 background 类似,只是叠加在输出文件的上面(background 是叠加在输出文件的下面的)。
pdftk in.pdf stamp back.pdf output out.pdf
5。添加/提取 PDF 文件附件
可以将任意文件添加到 PDF 文件中,比如下面的例子:
pdftk in.pdf attach_files 1.html 2.html to_page 6 output out.pdf
下面的例子将附件解压缩到当前文件夹:
pdftk report.pdf unpack_files output .
6。修复损坏了的 PDF 文件
下面的例子试图修复一个损坏了的文件:
pdftk broken.pdf output fixed.pdf
万能的pdftk的更多相关文章
- 猫哥网络编程系列:HTTP PEM 万能调试法
注:本文内容较长且细节较多,建议先收藏再阅读,原文将在 Github 上维护与更新. 在 HTTP 接口开发与调试过程中,我们经常遇到以下类似的问题: 为什么本地环境接口可以调用成功,但放到手机上就跑 ...
- 从c#角度看万能密码SQL注入漏洞
以前学习渗透时,虽然也玩过万能密码SQL注入漏洞登陆网站后台,但仅仅会用,并不理解其原理. 今天学习c#数据库这一块,正好学到了这方面的知识,才明白原来是怎么回事. 众所周知的万能密码SQL注入漏洞, ...
- Android—万能ListView适配器
ListView是开发中最常用的控件了,但是总是会写重复的代码,浪费时间又没有意义. 最近参考一些资料,发现一个万能ListView适配器,代码量少,节省时间,总结一下分享给大家. 首先有一个自定义的 ...
- 打造android偷懒神器———ListView的万能适配器
如果你去做任何一个项目,我相信你都会跟我有一样的经历,最最普遍的就是列表显示ListView,当然,写N个自定义的适配器也是情理之中.虽说程序员本身就是搬砖,做这些枯燥无味的重复的事情也是理所当然,但 ...
- 打造android偷懒神器———RecyclerView的万能适配器
转载请注明出处谢谢:http://www.cnblogs.com/liushilin/p/5720926.html 很不好意思让大家久等了,本来昨天就应该写这个的,无奈公司昨天任务比较紧,所以没能按时 ...
- 网页万能排版布局插件,web视图定位布局创意技术演示页
html万能排版布局插件,是不是感觉很强大,原理其实很简单,不过功能很强大哈哈,大量节省排版布局时间啊! test.html <!doctype html> <html> &l ...
- wifi万能钥pc版提示手机未连接
关于PC版万能钥匙的用法 大部分人都是在“未连接到手机”再不知道怎么搞了 怎么连接到手机呢? 首先要把你的手机变成路由器 让电脑连上 这个都知道怎么搞吧 手机版万能钥匙有个一键让手机变成热点 再用电 ...
- Android之ListView性能优化——一行代码绑定数据——万能适配器
如下图,加入现在有一个这样的需求图,你会怎么做?作为一个初学者,之前我都是直接用SimpleAdapter结合一个Item的布局来实现的,感觉这样实现起来很方便(基本上一行代码就可以实现),而且也没有 ...
- java反射学习之二万能EXCEL导出
一.EXCEL导出的实现过程 假设有一个对象的集合,现在需要将此集合内的所有对象导出到EXCEL中,对象有N个属性:那么我们实现的方式是这样的: 循环这个集合,在循环集合中某个对象的所有属性,将这个对 ...
随机推荐
- EasyNetQ异常处理
代码下载 https://download.csdn.net/download/u010312811/11252093 官方Demo https://github.com/EasyNetQ/EasyN ...
- axios——post请求时把对象obj数据转为formdata格式
转载自:https://blog.csdn.net/feizhong_web/article/details/80514436 在调用后台接口的时候,上传报名信息,利用axios 的post请求,发 ...
- 接口测试——postman
一.接口测试的准备工作 做接口测试之前需要有接口文档,请求参数,返回参数 二.使用postman进行接口测试 1.get请求 ①get请求可以直接在URL后面添加问号加参数,不需要使用工具来测试接口: ...
- 【转载】linux文件系统简介
文件系统是linux的一个十分基础的知识,同时也是学习linux的必备知识. 本文将站在一个较高的视图来了解linux的文件系统,主要包括了linux磁盘分区和目录.挂载基本原理.文件存储结构.软链接 ...
- Java写爬虫代码时报org.apache.http.client.ClientProtocolException: URI does not specify a valid host异常的处理
异常原因是url写错,导致无法解析 比如:这个报错就是因为写了两个“http:”导致该无法解析
- videojs实现双击视频全屏播放、播放器全屏时视频未全屏
https://blog.csdn.net/staritstarit/article/details/78451963 暂停时只能使用左下角的暂停按钮,点击视频时不再响应 使用width和height ...
- WCF加密操作(包括证书和证书+帐号密码)
WCF作为.net三大组件之一,伟大之处不用多说,但是其加密配置对于我这样的萌新来说还是颇有难度,因此将几天来的研究成果共享出来,与各位共勉~ 首先声明我的开发环境,Win10创意者更新 + Visu ...
- 过滤器filters
<!DOCTYPE html> <html lang="zh"> <head> <title></title> < ...
- 转:Linux 文件IO理解
源地址http://blog.csdn.net/lonelyrains/article/details/6604851 linux文件IO操作有两套大类的操作方式:不带缓存的文件IO操作,带缓存的文件 ...
- elasticsearch复合查询
查询最近一小时内data.@level字段为Error的日志并按date倒序排列,输出最近10条,只输出[date,message]两个字段 GET events*/_search { &qu ...