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的更多相关文章

  1. 猫哥网络编程系列:HTTP PEM 万能调试法

    注:本文内容较长且细节较多,建议先收藏再阅读,原文将在 Github 上维护与更新. 在 HTTP 接口开发与调试过程中,我们经常遇到以下类似的问题: 为什么本地环境接口可以调用成功,但放到手机上就跑 ...

  2. 从c#角度看万能密码SQL注入漏洞

    以前学习渗透时,虽然也玩过万能密码SQL注入漏洞登陆网站后台,但仅仅会用,并不理解其原理. 今天学习c#数据库这一块,正好学到了这方面的知识,才明白原来是怎么回事. 众所周知的万能密码SQL注入漏洞, ...

  3. Android—万能ListView适配器

    ListView是开发中最常用的控件了,但是总是会写重复的代码,浪费时间又没有意义. 最近参考一些资料,发现一个万能ListView适配器,代码量少,节省时间,总结一下分享给大家. 首先有一个自定义的 ...

  4. 打造android偷懒神器———ListView的万能适配器

    如果你去做任何一个项目,我相信你都会跟我有一样的经历,最最普遍的就是列表显示ListView,当然,写N个自定义的适配器也是情理之中.虽说程序员本身就是搬砖,做这些枯燥无味的重复的事情也是理所当然,但 ...

  5. 打造android偷懒神器———RecyclerView的万能适配器

    转载请注明出处谢谢:http://www.cnblogs.com/liushilin/p/5720926.html 很不好意思让大家久等了,本来昨天就应该写这个的,无奈公司昨天任务比较紧,所以没能按时 ...

  6. 网页万能排版布局插件,web视图定位布局创意技术演示页

    html万能排版布局插件,是不是感觉很强大,原理其实很简单,不过功能很强大哈哈,大量节省排版布局时间啊! test.html <!doctype html> <html> &l ...

  7. wifi万能钥pc版提示手机未连接

     关于PC版万能钥匙的用法 大部分人都是在“未连接到手机”再不知道怎么搞了 怎么连接到手机呢? 首先要把你的手机变成路由器 让电脑连上 这个都知道怎么搞吧 手机版万能钥匙有个一键让手机变成热点 再用电 ...

  8. Android之ListView性能优化——一行代码绑定数据——万能适配器

    如下图,加入现在有一个这样的需求图,你会怎么做?作为一个初学者,之前我都是直接用SimpleAdapter结合一个Item的布局来实现的,感觉这样实现起来很方便(基本上一行代码就可以实现),而且也没有 ...

  9. java反射学习之二万能EXCEL导出

    一.EXCEL导出的实现过程 假设有一个对象的集合,现在需要将此集合内的所有对象导出到EXCEL中,对象有N个属性:那么我们实现的方式是这样的: 循环这个集合,在循环集合中某个对象的所有属性,将这个对 ...

随机推荐

  1. google浏览器插件开发

    官方开发文档 随便找个文件夹新建插件所需文件 目录结构 pluginName manifest.json(必须)                          一个manifest文件 *.htm ...

  2. UMP系统功能 资源管理

  3. 控制类名(className 属性)设置或返回class属性

    控制类名(className 属性) className 属性设置或返回元素的class 属性. 语法: object.className = classname 作用: 1.获取元素的class 属 ...

  4. python库参考学习网址

    https://github.com/china-testing/python-api-tesing 这里有很多python库参考

  5. HTML+css 小组件

    1.三角 代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <t ...

  6. JSM 基础

    JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信 ...

  7. PAT甲级——A1001A+BFormat

    Calculate a+b and output the sum in standard format -- that is, the digits must be separated into gr ...

  8. Struts2转换器

    为什么进行类型转换 在基于HTTP协议的Web应用中 客户端请求的所有内容都以文本编码方式传输到服务器端 服务器端的编程语言却有着丰富的数据类型 继承StrutsTypeConverter抽象类 继承 ...

  9. 架构发展史Spring Cloud

    转自:https://www.iteye.com/news/32734 Spring Cloud作为一套微服务治理的框架,几乎考虑到了微服务治理的方方面面,之前也写过一些关于Spring Cloud文 ...

  10. CodeChef TRIPS-Children Trips 树上分块

    参考文献国家集训队2015论文<浅谈分块在一类在线问题的应用>-邹逍遥 题目链接 题目大意 一棵n个节点的树,树的每条边长度为1或2,每次询问x,y,z. 要求输出从x开始走,每次只能走到 ...