Open C4droid opened 4 years ago
取这么个名字,并非是指从0开始制作一本电子书,只是一时没想到恰当的题目而已。
俺比较喜欢收集书籍,特别是那种排版比较漂亮的。扫描版不行,还必须得是文字版。
《二十四史》里面有几本没收全,恰好在某网站找到了排版还过得去的资源。
美中不足的是:整本书被拆开了,每页都弄成了一个独立的文件;没有目录,浏览时不方便跳转。
那咱只好自己动手完善啦!
用到了 pdfjam ( TexLive 套件里面刚好有)
pdfjam
TexLive
将 file1.pdf 、file2.pdf 合并为名叫 target.pdf 的文件 pdfjam file1.pdf file2.pdf -o target.pdf
俺找的那本书足足有3125页,对应3125个文件,手动敲命令不得累死啊!
得想办法将所有的文件名列出来,拼成一行,当作 pdfjam 的参数
ls *.pdf | sed ':a ; N;s/\n/ / ; t a ; ' | xargs pdfjam -o test.pdf
Ubuntu 系统里刚好自带了一个工具 ghostScript,可以为pdf添加书签
Ubuntu
ghostScript
根据 pdfmarks 文件,为 in.pdf 文件添加目录,最后导出为 out.pdf gs -q -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=out.pdf in.pdf pdfmarks
就是个纯文本文件,里面内容长这样
[/Title (Section 1) /Page 10 /OUT pdfmark [/Title (Section 2) /Page 20 /OUT pdfmark [/Title (Section 3) /Page 30 /OUT pdfmark [/Title (Section 4) /Page 40 /OUT pdfmark
咱只需要将 Section X 替换成咱想要的标题,将 10、20、30、40 等替换成相应的页码就行了
在父目录前面加个 /Count x,标志下有x条子目录,没啥难度
[/Count 2 /Title (Chapter 1) /Page 2 /OUT pdfmark [/Title (Section 1.1) /Page 3 /OUT pdfmark [/Title (Section 1.2) /Page 4 /OUT pdfmark [/Count -1 /Title (Section 1.2) /Page 5 /OUT pdfmark [/Title (Section 1.2.1) /Page 6 /OUT pdfmark
linux 终归是洋人做出来的,对 CJK 字符支持不够好,得费点功夫 不能直接写中文,得写 unicode 码。
宋史 --> 宋(5B8B)史(53F2) --> <FEFF5B8B53F2> [/Title (宋史) /Page 10 /OUT pdfmark [/Title <FEFF5B8B53F2> /Page 10 /OUT pdfmark
下面是咱抓数据时的自用代码,留做记录
$('#mCSB_1_container a').each(function(index, e) { var content = "[/Title <FEFF" + $(e).attr('title') + "> /Page " + $(e).attr("data-page") + " /OUT pdfmark"; content.replace(/([\u4E00-\u9FA5]|[\uFE30-\uFFA0])/g,function(){ return RegExp["$1"].charCodeAt(0).toString(16).toUpperCase(); }) })
add-toc-to-pdf-from-xml-json-file wrong-encode-when-update-pdf-meta-data-using-ghostscript-and-pdfmark
背景
俺比较喜欢收集书籍,特别是那种排版比较漂亮的。扫描版不行,还必须得是文字版。
《二十四史》里面有几本没收全,恰好在某网站找到了排版还过得去的资源。
美中不足的是:整本书被拆开了,每页都弄成了一个独立的文件;没有目录,浏览时不方便跳转。
那咱只好自己动手完善啦!
合并pdf
用到了
pdfjam
(TexLive
套件里面刚好有)俺找的那本书足足有3125页,对应3125个文件,手动敲命令不得累死啊!
得想办法将所有的文件名列出来,拼成一行,当作
pdfjam
的参数添加目录
Ubuntu
系统里刚好自带了一个工具ghostScript
,可以为pdf添加书签pdfmarks
就是个纯文本文件,里面内容长这样
咱只需要将 Section X 替换成咱想要的标题,将 10、20、30、40 等替换成相应的页码就行了
多级目录
在父目录前面加个 /Count x,标志下有x条子目录,没啥难度
pdf 目录中文乱码
linux 终归是洋人做出来的,对 CJK 字符支持不够好,得费点功夫 不能直接写中文,得写 unicode 码。
生成 pdfmarks
下面是咱抓数据时的自用代码,留做记录
reference
add-toc-to-pdf-from-xml-json-file wrong-encode-when-update-pdf-meta-data-using-ghostscript-and-pdfmark