所需軟件:
1. FreePic2Pdf(網上很容易找到)
2. python3
3. 天若OCR
搜狗OCR配置:https://tianruoocr.cn/interface/Txt_sougou.html
免費版調用的是百度的OCR,對於這種目錄的識別效果不好,經過嘗試發現只有搜狗的效果是最好的,所以如果有需要還是購買專業版,然后配置搜狗的OCR
實現方法:
1. 提取書簽內容文本
許多英文書籍PDF的文字是可以直接復制粘貼的,這種情況比較好處理,直接復制出來,暫時保存到文本中。
如果為掃描版PDF,則可以用上面提供的天若OCR進行識別,然后提取文字內容,識別率挺高,不算太麻煩。
最后得到目錄內容:
如果是用OCR軟件識別的內容,有時候會有一些多余的符號,影響下面python腳本的運行,最常見的是:
1)目錄出現換行,導致該行最后一個字符不是數字,腳本無法正確運行,會報錯;
2)行末的數字前出現一些多余符號,也會影響腳本運行,一個個手動修改太麻煩,可以在VScode里用vim批量操作。如:
上面輸入的替換命令為:
%s/…/ /g
用vim里:模式下的替換命令,上面表示把…全部替換成空格。注意VScode里的vim插件可以在替換命令里粘貼內容,但是我在terminal的vim里似乎不行,有些字符奇怪字符有時候不知道怎么打,可以直接粘貼過去。
%s/(待替換內容)/(替換內容)/g
2. 在同一工作目錄下運行如下python腳本
#!/usr/bin/python3 # -*- coding: UTF-8 -*- ''' @Author: Yin Weijie @Date: 2018.5.25 @Description: 替換頁碼 @Revised Date: 2019.3.7 @Description: 在次級目錄前加tab ''' fin = open("aa.txt", "r") fout = open("bb.txt", "w") for each_line in fin: list = each_line.split() for i in range(len(list) - 1): #倒數第一個元素是數字,先不放 if (list[i] == '.'): continue # 這里章數默認不超過兩位數 if ((len(list[i]) > 1 and list[i][1] == '.') or (len(list[i]) > 2 and list[i][2] == '.')): fout.write('\t') fout.write(list[i]) fout.write(' ') # print(list[i]) fout.write('\t') num = int(list[-1]) + 0 #單獨處理倒數第一個數字 fout.write(str(num)) fout.write("\n") fin.close() fout.close()
得到文件bb.txt的內容:
這里實際上就是做一個文本替換,為后面FreePic2Pdf使用作准備。因為FreePic2Pdf只能識別固定格式的書簽內容,主要有如下幾方面需要修改:
1)頁碼是PDF中的絕對頁碼,通常需要加減一個差值,但是這個PDF的排版比較特殊,書中的頁碼內容和PDF絕對頁碼內容一致,否則上面python代碼中
num = int(list[-1]) + 0 #單獨處理倒數第一個數字
這一行加的數字應該是PDF絕對頁碼和書籍頁碼的差值。
2)頁碼數字和前面的文字之間應該是\tab,而不是空格。
3)每行行首也可以加\tab,表示次級目錄。也可以加多個\tab增加更多目錄層級,這里只做了一個次級目錄。
3. 用FreePic2Pdf批量插入標簽
會在該PDF文件所在目錄生成一個新的目錄,包含如下文件:
打開上面的txt文件,把之前生成的bb.txt中的內容貼進去,保存。然后再回到FreePic2Pdf軟件:
經過上面操作,就能成功添加標簽了。