电子书PDF裁减、合并工具及脚本

一本巨头书,竟然买不到,电子版还是 扫描的双页版 !无奈,只能依靠脚本了——

方法一:Acrobat手工裁减+打印+单页提取+pdftk一次合并(大内存)
方法二:Acrobat手工裁减+打印+单页提取+pdftk逐步合并(小内存)
方法三:Acrobat手工裁减+打印+pdftk一次提取+合并(小内存、较快)
方法四:pdftk单页提取+ImageMagick命令行裁减+pdftk合并(全命令行处理,最快)

一、

1. 用Acrobat将双页裁剪成单左页,另存为L--.pdf
2. 同法,裁剪出右页,另存为R--.pdf
3. 检查上下左右边距,稍加调整
4. 使用“自动居中和缩放”选项打印到Acrobat虚拟打印机,分别存为L.pdf和R.pdf
5. 用Acrobat“提取页面“成单个页面文件,分别放到Ls/和Rs目录下
6. 用pdftk工具进行批处理:DOS批处理脚本如下

@echo off
for /l %%i in (1,1,166) do pdftk1.41.exe L="LsL %%i.pdf" R="RsR %%i.pdf" cat L R output %%i.pdf 2>log.txt
pause


7. 用Acrobat合并功能分组、顺次merge之。


二、

注:最后一步非常难做,最好使用分组合并,否则合并时容易把CPU挂掉。在双核1.7MHz + 2GB RAM 上跑166个页面的操作就error了。我尝试了50个页面的组,没问题。
这一步也可以使用pdftk批处理,但是,,,DOS似乎不支持多条语句作为for循环体,郁闷。。。。

算法如下:
a=1 b=166 level=LR ((length=b-a+1)) first=1 while ((length>=2)) do mkdir -p $level/L echo "prepare directory: $level/L ...[length=$length]" i=0 while ((i=length)) ; then echo "[$level/$A.pdf] skipped" if ((first==1)) ;then ((A=a+A)) ((B=a+B)) fi mv $level/$A.pdf $level/L/$C.pdf echo "[$level/L/$C.pdf] generated" break else if ((first==1)) ;then ((A=a+A)) ((B=a+B)) fi echo "merging $level/$A.pdf $level/$B.pdf ..." time pdftk X=$level/$A.pdf Y=$level/$B.pdf cat X Y output $level/L/$C.pdf echo "[$level/L/$C.pdf] generated" fi ((i=i+2)) done level=$level/L ((x=length+1)) first=0 echo "first=0" ((length=x/2)) done cp $level/0.pdf 33


输出应该是类似这个样子:

$ tree LR
LR
|-- 1.pdf
|-- 10.pdf
|-- 100.pdf
|-- 101.pdf
`-- L
    |-- 0.pdf
    |-- 1.pdf
    |-- 2.pdf
    |-- 3.pdf
    |-- 4.pdf
    |-- 5.pdf
    |-- 6.pdf
    |-- 7.pdf
    |-- 8.pdf
    |-- 9.pdf
    `-- L
        |-- 0.pdf
        |-- 1.pdf
        |-- 2.pdf
        |-- 3.pdf
        |-- 4.pdf
        |-- 5.pdf
        |-- 6.pdf
        |-- 7.pdf
        |-- 8.pdf
        |-- 9.pdf
        `-- L
            |-- 0.pdf
            |-- 1.pdf
            |-- 2.pdf
            |-- 3.pdf
            |-- 4.pdf
            |-- 5.pdf
            `-- L
                |-- 0.pdf
                |-- 1.pdf
                `-- L
                    |-- 0.pdf
                    |-- 1.pdf
                    `-- L
                        `-- 0.pdf

三、

2009-12-13 19:13:49
其实,这个处理过程还可以改进:
先用Acrobat裁减好为左页、右页,并缩放方式打印成A4大小后,使用pdftk一次性完成单页提取、合并处理:
#!/bin/bash str="" for ((i=1;i<166;i++)) do str=${str}" A$i B$i" done pdftk A=R.pdf B=L.pdf cat $str output LR.pdf verbose

BACKGROUND


PDF toolkit   这个比较有意思,如果 你想随心所欲处理PDF内容 ,就是这个了!

If PDF is electronic paper , then pdftk is an electronic staple-remover, hole-punch, binder, secret-decoder-ring, and X-Ray-glasses. Pdftk is a simple tool for doing everyday things with PDF documents. Keep one in the top drawer of your desktop and use it to:

  • Merge PDF Documents

  • Split PDF Pages into a New Document

  • Rotate PDF Pages or Documents

  • Decrypt Input as Necessary (Password Required)

  • Encrypt Output as Desired

  • Fill PDF Forms with FDF Data or XFDF Data and/or Flatten Forms

  • Apply a Background Watermark or a Foreground Stamp

  • Report on PDF Metrics such as Metadata, Bookmarks, and Page Labels

  • Update PDF Metadata

  • Attach Files to PDF Pages or the PDF Document

  • Unpack PDF Attachments

  • Burst a PDF Document into Single Pages

  • Uncompress and Re-Compress Page Streams

  • Repair Corrupted PDF (Where Possible)

Pdftk allows you to manipulate PDF easily and freely. It does not require Acrobat, and it runs on Windows, linux , Mac OS X, FreeBSD and Solaris.

 


如果有什么问题,请看:


当然,ubuntu软件库直接提供pdftk,此外还有:pdfedit、okular ,当然,那个老牌的ImageMatrick是最强大的不二选择 -jw Chen 12/6/09 8:22 PM
关于ImageMagick

  ImageMagick (TM) 是一个免费的创建、编辑、合成图片的软件。它可以读取、转换、写入多种格式的图片。图片切割、颜色替换、各种效果的应用,图片的旋转、组合,文本,直线, 多边形,椭圆,曲线,附加到图片伸展旋转。ImageMagick是免费软件:全部源码开放,可以自由使用,复制,修改,发布。它遵守GPL许可协议。它 可以运行于大多数的操作系统。ImageMagick的大多数功能的使用都来源于命令行工具。通常来说,它可以支持以下程序语言: Perl, C, C++, Python, PHP, Ruby, Java;现成的ImageMagick接口(PerlMagick, Magick++, PythonMagick, MagickWand for PHP, RubyMagick, and JMagick)是可利用的。这使得自动的动态的修改创建图片变为可能。ImageMagick支持至少90种图片格式: A, ART, AVI, AVS, B, BIE, BMP, BMP2, BMP3, C, CACHE, CAPTION, CIN, CIP, CLIP, CLIPBOARD, CMYK, CMYKA, CUR, CUT, DCM, DCX, DNG, DOT, DPS, DPX, EMF, EPDF, EPI, EPS, EPS2, EPS3, EPSF, EPSI, EPT, EPT2, EPT3, FAX, FITS, FPX, FRACTAL, G, G3, GIF, GIF87, GRADIENT, GRAY, HDF, HISTOGRAM, HTM, HTML, ICB, ICO, ICON, JBG, JBIG, JNG, JP2, JPC, JPEG, JPG, JPX, K, LABEL, M, M2V, MAP, MAT, MATTE, MIFF, MNG, MONO, MPC, MPEG, MPG, MSL, MTV, MVG, NULL, O, OTB, P7, PAL, PALM, PATTERN, PBM, PCD, PCDS, PCL, PCT, PCX, PDB, PDF, PFA, PFB, PGM, PGX, PICON, PICT, PIX, PJPEG, PLASMA, PNG, PNG24, PNG32, PNG8, PNM, PPM, PREVIEW, PS, PS2, PS3, PSD, PTIF, PWP, R, RAS, RGB, RGBA, RGBO, RLA, RLE, SCR, SCT, SFW, SGI, SHTML, STEGANO, SUN, SVG, SVGZ, TEXT, TGA, TIF, TIFF, TILE, TIM, TTC, TTF, TXT, UIL, UYVY, VDA, VICAR, VID, VIFF, VST, WBMP, WMF, WMFWIN32, WMZ, WPG, X, XBM, XC, XCF, XPM, XV, XWD, Y, YCbCr, YCbCrA, YUV

功能和特性

这里仅是ImageMagick的可以做几个例子:

格式转换:从一种格式转换成图像到另一个(例如 PNG 转 JPEG)
变换:缩放,旋转,裁剪,翻转或修剪图像
透明度:使图像的部分变为透明
附加:添加形状或一帧到图像
装饰:添加边框或帧图像
特效:模糊,锐化,阈值,或色彩图像 动画:创建一个从GIF动画图像组序列
文本及评论:插入描述或艺术图像中的文字
图像识别:描述的格式和图像性能
综合:重叠了一个又一个的图像
蒙太奇:并列图像画布上的图像缩略图
电影支持:读写图像的共同使用的数字电影工作方式
图像计算器:应用数学表达式的图像或图像通道
离散傅立叶变换:实现正向和反向的DFT。
高动态范围图像:准确地表现了从最明亮的阳光直射到最深最黑暗的阴影找到真正的幕后广泛的强度水平
加密或解密图片:转换成不懂乱码,然后再返回普通图像
虚拟像素支持:方便以外区域的图像像素
大图像支持:读,过程,或写mebi和吉比像素的图像尺寸
执行:ImageMagick的是线程安全的,利用内部算法OpenMP的功能及快速的双核和四核处理器技术提供窗口优势
异构分布式处理:某些算法可以在跨越的CPU,GPU,以及其他处理器组成的异构平台音乐会执行速度提高。
ImageMagick命令行工具

[ convert | identify | mogrify | composite | montage | compare | display | animate | import | conjure ]

ImageMagick 包括一组命令行工具来操作图片。你大部份习惯每次编辑图片都提供图形用户接口 (GUI) 编辑图像就像GIMP和PhotoShop一样。 然而,一个图形用户接口不总是方便的。 假如你想要从一个网页动态地处理一个图像,或者你在不同时间生成一样的或不同的图像,想要对许多图像或重复特定应用相同的操作。 对于操作的这些类型,处理公用程序命令行工具是一个好的选择。

在下面的段落中,可以找到命令行工具的简单短描述。点击程序名称可以得到关于这个程序的具体用法。 如果你想得到更多的关于ImageMagick,请仔细阅读以下命令行工具的使用方法:

convert
转换图像格式和大小,模糊,裁剪,驱除污点,抖动,临近,图片上画图片,加入新图片,生成缩略图等。

identify
描述一个或较多图像文件的格式和特性。

mogrify
按规定尺寸制作一个图像,模糊,裁剪,抖动等。Mogrify改写最初的图像文件然后写到一个不同的图像文件。

composite
根据一个图片或多个图片组合生成图片。

montage
创建一些分开的要素图像。在含有要素图像任意的装饰图片,如边框、结构、图片名称等。

compare
在算术上和视觉上评估不同的图片及其它的改造图片。

display
如果你拥有一个X server的系统,它可以按次序的显示图片

animate
利用X server显示动画图片

import
在X server或任何可见的窗口上输出图片文件。 你可以捕获单一窗口,整个的荧屏或任何荧屏的矩形部分。

conjure
解释执行 MSL (Magick Scripting Language) 写的脚本。



 

你可能感兴趣的:(desktop)