先用freepic2pdf 从pdf中抓一份空的目录文件出来,见下图:
抓取后编辑生成的FreePic2Pdf_bkmk.txt文件。按照需要的格式进行。
格式如下:
1. 文本格式
2. 汉字要存为GB2312 编码, 如果误存成了utf-8 看后面的效果图有多惨
3. 用<TAB>表示书签的层次深度, 一个<TAB>一个层次, 目录的文字与最后的数字之间也是用一个<TAB>
由于原PDF为直接转换的非扫描版,这里自然也舒服很多,直接去pdf里面copy就好了。不需要去OCR
按照格式整理完成,用tab来控制书签的层级后碰到一个问题。修改页码的问题。因为PDF的目录页码是根据实体书的,一般对从首页开始都有个偏差,比如,页码是3的可能实际中是在pdf的20页。我这里偷懒用脚本来修改,直接把所有的页码加上一个偏移量,这里本次操作偏移量是27
code:
#!/usr/bin/python
#Filename: fixnum for pdf's index
import re
import sys
# replace string's num with add a var init
# sth like xxxx 22 will be replace to xxxx 22+num
def replaceString(strinput,num):
p = re.search(r'(\t[0-9]+)',strinput)
if p is not None:
group = p.group()
if group is not None:
oldnum = int(p.group())
newnum = oldnum+int(num)
strinput = strinput.replace(str(oldnum),str(newnum))
#print strinput
return strinput
args = sys.argv
filename = args[1]
num = args[2]
print "match the file from " + filename
fin = file(filename,'r')
fout = file(filename + "fix",'w+')
while True:
line = fin.readline()
if len(line) == 0:
break
lineEnd = replaceString(line,num)
fout.write(lineEnd)
fin.close()
fout.close()
执行命令:
python fixnum.py FreePic2Pdf_bkmk.txt 27
生成的FreePic2Pdf_bkmk.txtfix就是修改后的结果,改名保存为FreePic2Pdf_bkmk.txt后就可以导入了。如下图:
OK,剩下的就进pdf里面fix几个非数字页码的目录的指向就搞定了。
收工。
附上修改完成的文件和用到的一些东东。


