这里将介绍如何快速的手动添加djvu电子书的书签.
- 准备书签数据:利用djvulibre可以很方便的导出目录页为pdf, 利用Acobat Adobe文字识别可以很方便的得到目录, 但是格式不太标准. 我们可以利用mma的替换功能标准化目录, 其代码如下:
1234567891011121314151617181920212223242526272829303132333435363738394041(*非目录项*)$precontent=“Geometric Measure Theory —- An Introduction…..1Series Preface…….3Introduction…….5Acknowledgements…….9Contents…….11″;$firstpagenumber=13;(*pdf导出的目录*)$contentsall=“从pdf文件把目录内容复制粘贴进来”;(*处理非标准目录, 我定义了一些规则, 你可以自己添加*)sametostop[ini_?StringQ,beg_?StringQ,end_?StringQ]:=Module[{i=1,tini=ini,tbeg=beg,tend=end,temp},While[tbeg!=tend&& i<= 100,temp=StringReplace[tbeg,RegularExpression[“[\”\[Bullet]]”]->“.”];temp=StringReplace[temp,RegularExpression[“[\r\n]\\.\\s*\\.”]->“.”];temp=StringReplace[temp,RegularExpression[“[a-zA-Z]+\\s*[\r\n][a-zA-Z]+”]->“.”];temp=StringReplace[temp,“\[CenterDot]”->“.”];temp=StringReplace[temp,“..”-> “. . “];temp=StringReplace[temp,RegularExpression[“(\\d\\.)\\s+(\\d)”]->“$1”~~“$2”];i++;tend=tbeg;tbeg=temp;]tend](*输出为标准的djvu能够识别的格式*)reformart[sec_?StringQ, con_?StringQ, pgnum_?StringQ] :=Module[{len = Length[StringCases[sec, “.”]], pref = “(“, suff = “)”,midd = ” \”” ~~ sec ~~ ” “ ~~ con ~~ “\” \”#” ~~ pgnum ~~ “\””},Switch[len,0, pref ~~ midd ~~ suff,1, pref ~~ midd ~~ suff,2, pref ~~ midd ~~ suff,3, pref ~~ midd ~~ suff]](*最终的目录数据, 可以直接被djvused处理*)$sectionprecontent=StringCases[$precontent,RegularExpression[“([a-zA-Z]+)\\.+(\\d+)”]:> reformart[“”,“$1”,ToString[ToExpression[“$2”]]]]//ColumnForm$contentsall=sametostop[$contentsall,$contentsall,“”]//ToString;$sectionlist=StringCases[$contentsall,RegularExpression[“(.*?)((\\.\\s*){2,})(\\d+)[\\r\\n]*?”]:> reformart[“”,“$1”,ToString[ToExpression[“$4”]+$firstpagenumber–1]]];List[“(bookmarks”,$sectionprecontent,$sectionlist,“)”]//Flatten//ColumnForm - 添加djvused的路径到系统, 首先搜索djvulibre安装路径下djvuused的路径, 然后采用类似命令添加到系统路径:
path C:\Program Files (x86)\DjVuLibre
- 利用djvused写入数据到文件:
djvused linyang.djvu -v -e "set-outline linyang.dsed" -s
这里, linyang.djvu是djvu文件, 而上面通过mma得到的数据保存在linyang.dsed文本文档中, 我采用的是utf8格式. - 利用djvused写入数据到文件:
发表回复