【起因】

  最近一直在看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-merge(http://www.orsoon.com/Soft/4907.html)。

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

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

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

  4.第四个,其实就是自己编程序,利用pdftk(http://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
shiftdirname="$file-split"
echo $dirname
dirtmp=`ls $dirname`
if [[ $dirtmp = "" ]];thendir="mkdir $dirname"`$dir`
fiecho $file,1,$1,0.pdf
cmd="pdftk A=$file cat A1-$1 output $dirname/00.pdf"
echo $cmd
echo `$cmd`
predex=$1
shiftpre=$( expr $predex + 1 )
index=1
for i in $@;doend=$( expr $i + $predex - 1 )printf -v fn "%02d" $indexcmd="pdftk A=$file cat A$pre-$end output $dirname/$fn.pdf"echo $cmdecho `$cmd`index=$( expr $index + 1 )pre=$( expr $i + $predex )
doneprintf -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文件也是很不错的。

转载于:https://www.cnblogs.com/Hiker/archive/2012/11/11/pdf_split.html

布同:pdf自定义分割(断章)相关推荐

  1. Java 中pdf部分内容加边线_Java 在PDF中添加骑缝章示例解析

    骑缝章是用于往来业务合同,以确保合同真实.有效的印章加盖方法,是一种防范风险的重要方式.在Java程序中,可以通过使用工具来辅助加盖这种骑缝章. 工具:Free Spire.PDF for Java ...

  2. java maven 读写pdf_Java 在PDF中加盖骑缝章

    骑缝章是用于往来业务合同,以确保合同真实.有效的印章加盖方法,是一种防范风险的重要方式.在Java程序中,可以通过使用工具来辅助加盖这种骑缝章. 工具:Free Spire.PDF for Java ...

  3. 骑缝章 Java_Java实现在PDF中添加骑缝章

    码农公社  210.net.cn  210是何含义?10月24日是程序员节,1024 =210.210既 210 之意. 骑缝章是用于往来业务合同,以确保合同真实.有效的印章加盖方法,是一种防范风险的 ...

  4. 骑缝章 Java_Java 在PDF中添加骑缝章

    骑缝章是用于往来业务合同,以确保合同真实.有效的印章加盖方法,是一种防范风险的重要方式.在Java程序中,可以通过使用工具来辅助加盖这种骑缝章. 工具 Free Spire.PDF for Java ...

  5. 骑缝章 Java_Java 在PDF中添加骑缝章示例解析

    骑缝章是用于往来业务合同,以确保合同真实.有效的印章加盖方法,是一种防范风险的重要方式.在Java程序中,可以通过使用工具来辅助加盖这种骑缝章. 工具:Free Spire.PDF for Java ...

  6. python实现给pdf文件加骑缝章效果

    骑缝章是在合同上经常看到的一种盖章方式,如下图所示.现在电子合同的应用已经越来越广泛,合同上如何实现骑缝章的效果 ,也是有必要研究一下的.本文几乎Python的方式,讲述了如果对印章图片进行处理,然后 ...

  7. Java给PDF文件生成骑缝章

    什么是缝骑章? 骑缝章(Paging seal.)是海关常用词汇.为了保证海关监管货物留存单据的完整齐全以及核对有关单证,在单据交接处所加盖的印章. 在两张纸交接处的印章.这种印章多盖在条据.证书或其 ...

  8. Java实现pdf加盖骑缝章_Java 在PDF中添加骑缝章示例解析

    骑缝章是用于往来业务合同,以确保合同真实.有效的印章加盖方法,是一种防范风险的重要方式.在Java程序中,可以通过使用工具来辅助加盖这种骑缝章. 工具:Free Spire.PDF for Java ...

  9. 【转载】古龙·断章·小札[十二]:《多情剑客无情剑》

    古龙·断章·小札[十二]:<多情剑客无情剑> 作者:边城不浪 十年前,朝廷里的风流翰林,兵器谱上排名第三的探花郎黯然出关,展开自我放逐生涯.十年后,流放者归来. <多情剑客无情剑&g ...

最新文章

  1. shell --- awk规范 系统总结
  2. Python基础-第二天
  3. NOIp2018 Mission Failed Level F
  4. Web页面布局方式小结
  5. thrift多平台安装
  6. easyui打开新的选项卡_IntelliJ IDEA 2020.3 正式版发布,多项超酷新功能
  7. linux vscode配置spring boot开发环境
  8. ipad4没有声音提示消息
  9. Excel中如何在打印时自动给每行加上标题
  10. quartz集群报错but has failed to stop it. This is very likely to create a memory leak.
  11. Android使用Intent完成活动之间的通信
  12. while循环python输入质数_Python学习之[while]循环
  13. Windows 10 自带那么多图标,去哪里找呢?
  14. java numberformat_Java NumberFormat 类的详解及实例
  15. 人人开源项目搭建到服务器,人人开源系列项目介绍以及环境搭建
  16. 【Magento】magento 1.7.0.2 paypal支付方式,网站标准支付
  17. iOS界面--Tom猫的实现
  18. [SSL_CHX][2022-02-23]进制转换
  19. 计算机术语IP,什么是ip?网络ip和网络用语IP的含义!
  20. SysML实例——盖浇饭

热门文章

  1. 新 CEO 谈论GitHub 被微软接管后的未来
  2. 微软邮件系统Exchange 2013系列(七)创建发送连接器
  3. 华南师范大学:迈向智慧校园的“极简”之路
  4. windows下通过adb shell进入data目录
  5. 分区函数Partition By的与row_number()的用法以及与排序rank()的用法详解(获取分组(分区)中前几条记录)...
  6. 在Centos环境下搭建Confluence
  7. DHCP+TFTP+PXE自动网络引导安装Linux操作系统
  8. 读书:我编程我快乐(一.4)
  9. python selenium中文文档-selenium-python中文版文档
  10. Fiddler请求过滤