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. 2019 CCPC 湖南全国邀请赛

    A. Chessboard 做法1 单纯形. 做法2 最大费用可行流问题,行列模型. 对每行建一个点,每列建一个点.物品 \(i\) 在 \((r,c)\),那么 \(r\) 向 \(c\) 连流量为 ...

  2. Hibernate的多对多映射

    一.创建Java工程,新建Lib文件夹,加入Hibernate和数据库(如MySql.Oracle.SqlServer等)的Jar包,创建 hibernate.cfg.xml 文件,并配置,配置项如下 ...

  3. Python数据格式化

    Python有两种格式化字符串的方式,使用%或者使用内置format()函数. 使用%格式化字符串 在Python中使用%来格式化字符串,用法和效果类似于C语言中的%.格式为:%特定的转换类型 %da ...

  4. spring:bean的细节之三种创建Bean对象的方式

    <!--创建Bean的三种方式--><!--第一种方式,使用默认构造函数创建 在spring的配置文件中使用bean标签,配以id和class属性之后,且没有属性和标签时. 采用的就 ...

  5. 廖雪峰Java12maven基础-1maven入门-2依赖管理

    maven 如果我们的项目依赖第三方的jar包: Commons Logging发布的jar包在那里下载? 使用Log4j需要哪些jar包 其他依赖:junit,Javamail,MySQL驱动... ...

  6. 0829NOIP模拟测试赛后总结

    这次发誓不会咕咕咕! 80分rank30完美爆炸. 拿到题目苏轼三连???貌似三篇古诗文我都会背啊hhh.爆零警告 T1没啥思路,打完暴力后想了大约20分钟决定分解个因数,在b次方中每一次方选择一个约 ...

  7. 关于将ECharts引入到项目中的几种方式

    方式一.在webpack中使用ECharts 1.npm安装ECharts npm install echarts --save 2.引入ECharts 通过 npm 上安装的 ECharts 和 z ...

  8. QQ邮箱发送信息

    #以下库为python自带的库,不需要进行安装 #邮件发信动作 import smtplib #构造邮件内容 from email.mime.text import MIMEText #构造邮件头 f ...

  9. ArcMap10.2 中制作符号库

    今天在发布地图服务时,发现地图中的3D符号没法用,出现”00013“错误,如下:

  10. eclipse快捷大全

    Eclipse常用快捷键 1几个最重要的快捷键 代码助手:Ctrl+Space(简体中文操作系统是Alt+/)快速修正:Ctrl+1单词补全:Alt+/打开外部Java文档:Shift+F2 显示搜索 ...