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

2022-09-17 21:33:30 字數 2843 閱讀 6474

所需軟體:

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

2. python3

3. 天若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 #

單獨處理倒數第乙個數字

得到檔案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軟體:

經過上面操作,就能成功新增標籤了。

pdfkit python自動化生成PDF

在用jupyter notebook寫 文件的時候,有時需要匯出pdf版本,但jupyter會報錯。我在想,除了網上的debug方法,還沒有其他方案可以生成pdf。度娘搜了下,很多部落格推薦python的第三方庫pdfkit,可以將網頁 html檔案以及字串生成pdf檔案。其實也有很多軟體提供pdf...

自動化生成jar 心得

利用藍貝殼框架已經寫好的bom.xml檔案,自己在清單列表檔案androidmanifest.xml裡進行乙個配置,注意這裡配置的 屬性的name值一定要與bom.xml檔案中的keyname值要一樣,否則後面生成keystore檔案時會報錯 android value wandoujia 在這裡多...

ui自動化生成HTML報告

if name main import time from htmltestrunner import htmltestrunner tesunit unittest.testsuite n 0while n 1 執行測試用例,這裡博主只寫了兩條用例,用例命名分別為test 1,test 2 n 1...