在Adobe Acrobat中利用目錄及PowerShell自動建立書籍的書籤

在Adobe Acrobat中利用目錄及PowerShell自動建立書籍的書籤

在Adobe Acrobat中自動建立書籍PDF的Bookmark

有時候在網路上下載下來的電子書(PDF檔)並沒有建立好書籤(Bookmark),如果要手動建立的話非常耗時耗力,所以這個PowerShell的小程式可以根據書本的目錄來自動建立書籤。

首先,你要有書本目錄的文字檔,通常可以在出版社的官方網站,該本書的資訊頁下載得到,我通常會用Excel處理。但有時候這些目錄可能只有Chapter,並沒有Section,這時候就要自己在這個PDF檔案中用複製貼上的方式將目錄複製出來,不過這個方法的缺點是,複製出來的文字會有很多雜訊,要手動剔除。

例如將這個目錄貼到下面的PowerShell腳本中

"Chapter I",1,
"I.1 Section",1,
"I.2 Section",3,
"I.3 Section"7

開啟Windows PowerShell ISE(不是Windows PowerShell),修改下面的程式碼並輸入,存檔執行。

如果出現 無法辨識 'xxx.ps1' 辭彙是否為Cmdlet、函數、指令檔或可執行程式的名稱。...(通常第一次執行時會如此,)則必須用系統管理員的身分(按右鍵),開啟Windows PowerShell ISE,輸入Set-ExecutionPolicy RemoteSigned執行,並且同意執行原則變更。

[String[]]$Bookmark=
"Chapter I",
"I.1 Section",
"I.2 Section",
"I.3 Section"

# 注意,最後一項不要加逗號

[Int[]]$Page=
1,
1,
3,
7

# 讓系統取得title叫做[ebook.pdf - Adobe Acrobat Pro]的視窗
# 並讓該視窗變成當前視窗
$wshell = New-Object -ComObject wscript.shell;
$wshell.AppActivate('ebook.pdf - Adobe Acrobat Pro')

# 停頓1秒,避免delay造成下一步無法順利進行
Sleep 1

# 按下鍵盤上的各鍵
# 各鍵的對應表參考https://msdn.microsoft.com/en-us/library/office/aa202943(v=office.10).aspx
# -le是less or equal, -lt是less than

For ($i=0; $i -le $Page.Length-1; $i++)
{
$wshell.SendKeys("^b")          # 建立Bookmark
                                # 注意到SendKeys("B")跟SendKeys("b")是不同的
                                # SendKeys("B")的效果相當於Shift+b
Sleep 0.7                       # 停頓0.7秒,不停頓的話,程式來不及反應
$wshell.SendKeys($Bookmark[$i]) # 輸入Bookmark名稱
Sleep 0.7  
$wshell.SendKeys("{ENTER}")     # 確定
Sleep 0.7
$wshell.SendKeys("{F5}")        # 將focus切換到頁面
Sleep 0.7
    For ($j=0; $j -lt $Page[($i+1)]-$Page[$i]; $j++)
    {
    $wshell.SendKeys("{PGDN}")  # 按照頁碼移動到該頁面
    Sleep 0.7
    }
}

No comments:

Post a Comment