• 布同:pdf自定义分割(断章)


    【起因】

      最近一直在看pdf的电子书,我喜欢把电子书传到网盘中,这样就可以在公司两台电脑、家里笔记本、ipad3和我的kindle fire上同步和随意看了。一处上传,处处看,这是很方便的。不过有时候稍微修改了一个文件名,那么其他设备都需要把这个文件更新才能够看,如果这个文件比较大,同时又在移动设备上,那我想看的时候也许就需要等待好几分钟,对于wifi下载来说,我还是觉得有点时间浪费了。所以想把pdf断章成为2-5MB的文件,这样一来,如果一个文件被修改了,那么只需要下载一个小文件就行了,部分章节变化,我只需要下载我想看的章节就行了。

    【相关软件优劣介绍】

      1.最早我使用分割软件是Foxit pdf edit软件http://www.duote.com/soft/21646.html)。

      这个软件可以将部分页面导出到一个独立的pdf文件中。这样可以一章一章的分割出来。不过我一般用这个功能来干另一件事情,pdf有时候不让添加书签,这样把全部页面导出之后形成的新文件可以添加书签。有点囧。

      2.之后找到的软件是ap pdf split-mergehttp://www.orsoon.com/Soft/4907.html)。

      这个软件其实有个强大的地方,那就是可以用分号分割不同章节的区间,例如1-3;4-10;10-END,这样就可以将第一章定为1-3,第二章4-10,第三章10-end。不过这个软件很久没跟更新了,在win7下不好用,而且最新版需要注册,还未破解。希望xp下的朋友们试试,告诉我是否真的像我想的那么好用。win7的朋友就不用试了。

      3.第三个软件是pdf merge-splithttp://www.cr173.com/soft/31643.html)。

      这个软件并不能够一下子将所有章节分开,不过可以定义导出区间或者删除的区间。一章章的来,虽然有点慢,不过还算稳定。我用这个分割了两个大的pdf。

      4.第四个,其实就是自己编程序,利用pdftkhttp://www.geekso.com/Pdftk/,如果失效了那可以查看http://www.pdflabs.com/docs/pdftk-man-page/)这个命令行工具来导出。

      这个工具可以自定义分割,合并,转向,加水印……功能太强大,不过我只需要分割功能。例如:

    pdftk A=jquery.pdf cat A1-20 output jquery_001.pdf
    

      这条命令的功能是将jquery.pdf文件的1-20页导出到jquery_001.pdf文件,原来的jquery.pdf文件不改变。看上去还方便吧?如果你要将两个文件合并或者部分合并,那么就可以:

    pdftk A=jquery.pdf B=jquery2.pdf cat A1-end B1-end output jquery_001.pdf
    

       其实就是增加了一个pdf源文件。看上去还比较灵活吧?不过使用这个命令之前还需要下载一下这个pdftk工具。工具下载,更多实例可以查看这个工具包中的代码。工具下载

      将包解压,之后能找到pdftk.exelibiconv2.dll,这两个文件是必须的。你可以放到一个方便的目录下去,然后在这个目录下运行上面的命令即可。如果想在任何目录下都能够直接访问pdftk命令,请将这两个文件放到window/system32下去,这是系统工具根目录。

      利用脚本自定义调用方式

      虽然这个工具很方便,而且适合程序员,不过还是没有一次全部章节分割。因为我在win7下装了一个git代码管理工具,它带了一个bash shell,所以我打算写一段shell程序来直接搞定这个事情。代码如下:

    file=$1
    echo file=$file
    shift
    
    dirname="$file-split"
    echo $dirname
    dirtmp=`ls $dirname`
    if [[ $dirtmp = "" ]];then
    	dir="mkdir $dirname"
    	`$dir`
    fi
    
    echo $file,1,$1,0.pdf
    cmd="pdftk A=$file cat A1-$1 output $dirname/00.pdf"
    echo $cmd
    echo `$cmd`
    predex=$1
    shift
    
    pre=$( expr $predex + 1 )
    index=1
    for i in $@;do
    	end=$( expr $i + $predex - 1 )
    	printf -v fn "%02d" $index
    	cmd="pdftk A=$file cat A$pre-$end output $dirname/$fn.pdf"
    	echo $cmd
    	echo `$cmd`
    	index=$( expr $index + 1 )
    	pre=$( expr $i + $predex )
    done
    
    printf -v fn "%02d" $index
    cmd="pdftk A=$file cat A$pre-end output $dirname/$fn.pdf"
    echo $cmd
    echo `$cmd`
    echo end
    

       bash shell下调用方法为:

    bash split.sh jquery.pdf 第一章的前一页号 第二章的第一页号 第三章的第一页号 第四章的第一页号。。。。
    

       这样就可以分割为0.pdf,1.pdf,2.pdf。。。,依次为目录和前言,第一章内容,第二章内容,第三章内容,第四章内容。。。。

      为什么使用这样的参数序列?

      pdf文件的第一页其实往往不是其中真正开始的第一页,而是封面什么的。所以找到实际的第一章的前一页,例如5,这样就可以将1-5这部分分离出来,作为前言和目录所在的第0章,剩下的才是这真正的第一页。然后对着目录,将第二章到最后一章的页号全部记录下来,例如10,20,30。。。。最后形成这样的命令:

    bash split.sh jquery.pdf 5 10 20 30 
    

        就可以得到,第0章,实际的1-5页。余下的按照目录中的标识的页号进行分割,例如:第1章,1-9页(实际6-14页),第2章10-19页(实际15-24页)。。。你明白了吗?这里就是为了能够对照目录快速得到章节的分割页号。把第二章的前一步分分离出来作为第一章,第三章前的内容分离出来作为第二章。。。最后将剩下的作为一章。

    【总结】

      如果大家想要用window的cmd脚本尝试来重写这段代码,xp下可以可以用cmd脚本,如果是win7,推荐使用powershell,这个东西的脚本更先进,使用面向对象的方式,win7下带有很方便的命令行帮助文档,有一些学习成本。以后微软都会支持,推荐使用。希望能够帮到大家。

      本文介绍了window下几种分割pdf(断章)的方法,重点介绍了利用shell脚本调用pdftk命令行工具来自定义分割的方法,较为灵活和实用,适合程序员使用。同时pdftk工具还可以用于linux环境,所以作为网站后台处理pdf文件也是很不错的。

  • 相关阅读:
    Jenkins+postman+Newman之API自动化测试
    python之路——迭代器和生成器
    文件操作
    函数
    python基础数据类型二
    dp的一种理解角度及[NOI2020]命运 题解
    从零开始“发明”Treap
    博客停更
    [转]Linux下C语言-RPC远程调用编程rpcgen用法
    一位编程小白的自述 —— 从小学到现在
  • 原文地址:https://www.cnblogs.com/Hiker/p/pdf_split.html
Copyright © 2020-2023  润新知