批量自動化生成PDF目錄標簽


 所需軟件:

1. FreePic2Pdf(網上很容易找到)

2. python3

3. 天若OCR

官網:http://tianruoocr.cn/

搜狗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軟件:

 

經過上面操作,就能成功添加標簽了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM