Linux下使用 PDFtk 进行命令行操作pdf

Linux下的一些操作,第一时间想到的还是命令行。

最近要对pdf进行操作,便找到了、这个工具——PDFtk: the pdf tool kit,简单易用。这篇文章做个记录。

功能

PDFtk 目前分为三个版本:

  • PDFtk Server:命令行工具。支持 windows、Linux、Mac。
  • PDFtk Free:图形界面基础免费版;仅限 windows 用户;功能仅限于 PDF 合并和分割;
  • PDFtk Pro:图形界面专业收费版;仅限 windows 用户,可以对 PDF 文档进行合并、分割、旋转、加水印、加邮戳、加密。

对于 Linux 用户,唯一的选择是免费的 PDFtk Server,功能与收费 PDFtk Pro 完全相同。

  • 合并 PDF;
  • 分割 PDF 页面;
  • 旋转 PDF 页面;
  • PDF 带密码访问;
  • PDF 填加密码;
  • 用 X/FDF 填写 PDF 表格;
  • 从 PDF 表格中生成 PDF Data Stencils;
  • 加背景水印或前景印章;
  • 报告 PDF Metrics,书签和元数据;
  • 增加 / 更新 PDF 书签或元数据;
  • 给 PDF 页面或文档加附件;
  • 解压 PDF 附件;
  • 分解 PDF 文档为多个单页;
  • 解压缩和重压缩页面流;
  • 修复受损的 PDF 文档;

安装

Linux上安装:

$ sudo apt-get install pdftk # Debian/Ubuntu
$ sudo yum install pdftk # CentOS

Mac上安装:

$ brew install https://raw.githubusercontent.com/turforlag/homebrew-cervezas/master/pdftk.rb

用法示例

具体选项看这里: http://www.pdflabs.com/docs/pdftk-man-page/,

#提取1-15页为一个文件
$ pdftk input.pdf cat 1-15 output new.pdf

#提取第1至3,第5,第6至10页,并合并为一个pdf文件
$ pdftk input.pdf cat 1-3 5 6-10 output combined.pdf

#合并(concatenate) 前面所有的pdf为output.pdf
$ pdftk file1.pdf file2.pdf ... cat output new.pdf

#拆分PDF的每一页为一个新文件 并按照指定格式设定文件名
$ pdftk input.pdf burst output new_%d.pdf

#按照通配符,合并大量PDF文件
$ pdftk *.pdf cat output combined.pdf

#去除第 13 页,其余的保存为新PDF
$ pdftk in.pdf cat 1-12 14-end output out1.pdf

#扫描一本书,odd.pdf 为书的全部奇数页,even.pdf 为书的全部偶数页,下面的命令可以将两个 pdf 合并成页码正常的书
$ pdftk A=odd.pdf B=even.pdf shuffle A B output collated.pdf

#按180°旋转所有页面
$ pdftk input.pdf cat 1-endsouth output output.pdf

#按顺时针90°旋转第三页,其他页不变
$ pdftk input.pdf cat 1-2 3east 4-end output output.pdf

#输入密码转换成无密码PDF
pdftk secured.pdf input_pw foopass output unsecured.pdf

例子原文,一些翻译如下:

加密 PDF:

pdftk secured.pdf input_pw foopass output unsecured.pdf

PDF 128 位加密,保留全部权限:

pdftk 1.pdf output 1.128.pdf owner_pw foopass

PDF 128 位加密,保留全部权限,打开文档需输入密码 “baz”:

pdftk 1.pdf output 1.128.pdf owner_pw foo user_pw baz

PDF 128 位加密,打开文档需输入密码 “baz”,保留打印之外的其他权限:

pdftk 1.pdf output 1.128.pdf owner_pw foo user_pw baz allow printing

合并 in1.pdf 和 in2.pdf 到新 PDF 中:

pdftk in1.pdf in2.pdf cat output out1.pdf
pdftk *.pdf cat output combined.pdf

去除 in1.pdf 中的第 13 页,并创建 out1.pdf:

pdftk in.pdf cat 1-12 14-end output out1.pdf

对输出进行 40 位加密,撤销所有权限,设置 owner 密码为 foopass:

pdftk 1.pdf 2.pdf cat output 3.pdf encrypt_40bit owner_pw foopass

解压 PDF 页面流,然后就可以在文本编辑器中编辑 PDF 文件:

pdftk doc.pdf output doc.unc.pdf uncompress

压缩 PDF:

pdftk mydoc.pdf output mydoc.clear.pdf compress

修复破损的 PDF:

pdftk broken.pdf output fixed.pdf

将一个 PDF 文档分割成一页一个文档:

pdftk in.pdf burst

将一个 PDF 文档分割成一页一个文档,并加密,允许低质量的打印:

pdftk in.pdf burst owner_pw foopass allow DegradedPrinting

获取 PDF 问的元数据和书签信息:

pdftk in.pdf dump_data output report.txt

将 PDF 第一页顺时针旋转 90 度:

pdftk in.pdf cat 1east 2-end output out.pdf

将整个 PDF 文档旋转 180 度:

pdftk in.pdf cat 1-endsouth output out.pdf

修改目录

  • 提取PDF的目录结构为一个txt文件
  • 手动修改txt文件中的目录结构
  • 将txt文件重新加载到PDF中并生成一个新文件
# 提取信息
$ pdftk sample.pdf dump_data output info.txt

# 修改信息
# ...

# 把更改的信息加载回PDF
$ pdftk sample.pdf update_info info.txt output sample2.pdf

参考资料


docker 运行 mysql 客户端 phpmyadmin linux inode 简单理解