Linux下PDF的操作与转换
2010-10-11 22:37:05 阿炯

pdf是我们生活中极为常见的文档格式,但在有些情况下却需要与其它格式进行互相转换,而Pdftk就是这样一个简单的工具,可以对PDF文档进行各种日常操作,Pdftk可以让你简单而自由地操作PDF,它不需要Acrobat,并且可以运行在 Linux、Windows、Mac OS X、 FreeBSD和Solaris之上。

在Debian/Ubuntu中你可以通过apt安装pdftk:
$ sudo aptitude install 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

将PDF的第一页顺时针旋转90度
$ pdftk in.pdf cat 1E 2-end output out.pdf

将整个PDF文档的页面旋转180度
$ pdftk in.pdf cat 1-endS output out.pdf

用128位强度(默认)对一个PDF进行加密,保留所有权利(默认)
$ pdftk mydoc.pdf output mydoc.128.pdf owner_pw foopass

同上,唯一例外的是需要密码才能打开这个PDF
$ pdftk mydoc.pdf output mydoc.128.pdf owner_pw foo user_pw baz

同上,例外的是允许打印(在PDF被打开以后)
$ pdftk mydoc.pdf output mydoc.128.pdf owner_pw foo user_pw baz allow printing

加密一个PDF
$ pdftk secured.pdf input_pw foopass output unsecured.pdf

合并两个文件,其中一个是加密的 (输出是不加密的)
$ pdftk A=secured.pdf mydoc.pdf input_pw A=foopass cat output combined.pdf

解压PDF页面流,以便可以在文本编辑器中编辑PDF代码
$ pdftk mydoc.pdf output mydoc.clear.pdf uncompress

修复一个PDF被破坏的XREF表和流长度 (如果可能的话)
$ pdftk broken.pdf output fixed.pdf

将单个PDF文档拆分成一个个页面,并且将相关数据报告到doc_data.txt
$ pdftk mydoc.pdf burst

报告PDF文档的元数据、书签和页面标签
$ pdftk mydoc.pdf dump_data output report.txt

Poppler是一个基于xpdf-3.0代码基础的PDF渲染库。 Poppler-utils软件包包括了pdftops (PDF到Postscript的转换器), pdfinfo (PDF文档信息提取器), pdfimages (PDF图像提取器), pdftohtml (PDF到HTML的转换器), pdftotext (PDF到text的转换器), 以及pdffonts (PDF字体分析器)。

Debian/Ubuntu用户可以通过apt安装poppler:
$ sudo aptitude install poppler-utils

转换PDF到TEXT
Pdftotext将可移植文档格式(PDF)文件转换成纯文本。
$ pdftotext example.pdf example.txt

如果文本文件未指定, pdftotext将file.pdf转换成file.txt。如果文本文件是 ´-’,则文本会被送到标准输出。

转换第3到7页(包括3和7)使用:
$ pdftotext -f 3 -l 7 example.pdf example.txt

只提取第3页
$ pdftotext -f 3 -l 3 example.pdf example.txt
$ pdftotext -layout example.pdf example.txt

上面的命令可以维持原始的物理布局并按阅读顺序输出文本。如果不想插入页面分隔符你可以设置-nopgbrk选项。如果PDF文件有密码保护,可以设置-opw (拥有者密码)或者-upw (用户密码)选项。

从PDF提取图像
Pdfimages从可移植文档格式(PDF)文件中提取图片,保存为可移植像素图(PPM), 可移植位图(PBM), 或者JPEG文件。

Pdfimages读取PDF文件,扫描一个或多个页面,并将每一个图像写入一个名为image-root-nnn.xxx的PPM、PBM或者JPEG文件,其中nnn是图像编号,xxx是图像类型(.ppm, .pbm, .jpg)。

Pdfimages从PDF文件提取原始图像数据,不做任何额外的变化。任何PDF内容流里的旋转,剪切,颜色反转等动作都被忽略。

$ pfdimages example.pdf exampleimage
上面这个命令会从example.pdf提取所有的图像。图像会被保存为PPM格式。

使用-j选项将图像保存为JPG格式
$ pfdimages -j example.pdf exampleimage

使用-f和-l选项制定起始页和结束页。为了扫描第3至7页(包括3和7)使用:
$ pfdimages -f 3 -l 7 example.pdf exampleimage

只扫描指定的某一页使用:
$ pfdimages -f 3 -l 3 example.pdf exampleimage

如果PDF文件有密码保护使用-opw和-upw选项:
-opw 拥有着密码
-upw 用户密码

转换PDF到HTML
pdftohtml是一个将pdf文档转换成html的程序。它在当前工作目录中产生输出。

用法:
$ pdftohtml file.pdf file.html

如果你想要看到图形,需要使用 -c (也就是“complex”) 选项:
$ pdftohtml -c file.pdf file.html

转换PDF到图像
首先你的机器上必须已经安装 ImageMagick。

要在Debian/Ubuntu上安装ImageMagick可以运行下面的命令:
$ sudo aptitude install imagemagick

要将 pdf 文件转换成图像使用‘convert‘ 命令:
$ convert doc.pdf doc.jpeg

转换成 tiff
$ convert doc.pdf doc.tiff

当然也有其它pdf处理工具

使用'ImageMagick'将PDF转为JPG
安装一个软件ImageMagick:
# sudo apt-get install imageMagick

# convert XXX.pdf XXX.jpg
这样XXX.pdf 就转换成了一大堆的XXX-*.jpg,一页一张JPG。

如果想清晰些(实验中):
# convert -verbose -colorspace RGB -resize 1800 -interlace none -density 300 -quality 100 XXX.pdf XXX.jpg

用'poppler'将pdf转txt
我们要用poppler来做,它是系统自带的,先加一个中文支持:
# sudo apt-get install poppler-data

# pdftotext -layout -nopgbrk XXX.pdf
因为pdftotext不支持同时处理多个 pdf,所以用批处理要脚本搞定,打开终端,进入放置 pdf 的目录,运行下面命令:
find ./ -name '*.pdf' | while read i; do pdftotext -layout -nopgbrk $i; done

很快就在当前目录下输出很多 txt 文件,“-layout”参数表示保留页面布局,“-nopgbrk”表示不输出换行符,自己对比一下就知道区别了。