網絡上很多掃描版的PDF電子書都缺少書簽。特別是對計算機教程類的大部頭來說,由於需要經常翻閱,沒有書簽的痛苦可想而知。
制作書簽的辦法主要有:
Ctrl+B來一個個地創建;
在Word2007裡面生成書簽,然後和內容主體合並;
利用JavaScript生成;
今天我來講講怎樣利用JavaScript在Acrobat一鍵生成書簽。
基本思路:大多數的掃描版PDF電子圖書都可以在官網或者各大網上書店找到目錄,很多都是帶有頁碼的(圖1)。 將目錄用文本文件保存起來,作為附件添加到PDF中,利用JavaScript讀取附件,生成數組,用循環處理字符串,再生成書簽。
圖1
下面是具體步驟:
1.把目錄復制粘貼到一個文本文件中,確保所有的分隔符是半角的空格(正則表達式為\s),並保存為UTF-8的編碼。(圖2,圖3)
圖2
圖3
2.在Acrobat把目錄.txt添加到附件裡(圖4)並保存PDF文件。
圖4
3.下載文末的附件把Bookmark.js文件解壓出來復制到Acrobat安裝目錄下的JavaScript文件夾裡面,默認是Adobe\Acrobat 9.0\Acrobat\Javascripts
Bookmark.js文件內容:
app.addMenuItem({
cName: "從附件添加書簽", cParent: "Tools",
cExec: "bookm();",
cEnable: "event.rc= (event.target != null);" });
var Name_Bookmark;
var Page_Bookmark;
function bookm()
{
var StartNum = app.response({
cQuestion: "輸入頁碼為1的實際頁數",
cTitle: "若缺少1頁碼,則輸入2頁碼的實際頁數,依此類推",
cDefault: "1",
cLabel: "輸入:"
});
if (StartNum!=null)
{
var myThis=event.target;
var attName=myThis.dataObjects[0].name;
var oFile = myThis.getDataObjectContents(attName);
var arrFile = util.stringFromStream(oFile, "utf-8");
var tArr=arrFile.split("\n");
myThis.bookmarkRoot.remove();
myThis.bookmarkRoot.createChild("目錄");
var fSpc;
var lSpc;
var tCht;
var oDot;
var Num_Dot;
var MenuBookmark=myThis.bookmarkRoot.children[0];//目錄
var ChaptersBookmark;
var SectionsBookmark;
var SubSectionsBkm;
var SubSectionsBkm1;
var i;
var a;
var b;//首空格後的字符
for (i=0;i<tArr.length;i++)
{
a=tArr[i];
if (a.length>2)//空行的length=1,設置為2即不添加空行
{
fSpc=a.search(/\s/);// 首空格位置
tCht=a.slice(0,fSpc);//首空格前的字符
oDot=tCht.match(/\./g);//匹配.符號
Num_Dot=(oDot==null? 0:oDot.length);
lSpc=a.lastIndexOf(a.charAt(fSpc));//末空格的位置
b=Number(a.slice(lSpc));
Page_Bookmark=(isNaN(b)? 0:b-2+Number(StartNum));//書簽指向的頁碼
Name_Bookmark=(isNaN(b)? a:a.slice(0,lSpc));//書簽的名字
switch (Num_Dot)
{
case 0:
ChaptersBookmark=CreateSubBkm(MenuBookmark);
break;
case 1:
SectionsBookmark=CreateSubBkm(ChaptersBookmark);
break;
case 2:
SubSectionsBkm=CreateSubBkm(SectionsBookmark);
break;
case 3:
SubSectionsBkm1=CreateSubBkm(SubSectionsBkm);
break;
default:
break;
}
}
}
}
}
function CreateSubBkm(RootBkm)//在RootBkm書簽底下創建一個新書簽,並返回新書簽對象
{
var RootBkm;
var subBookmark;
RootBkm.createChild(Name_Bookmark, "this.pageNum="+Page_Bookmark+";");
RootBkm.insertChild(RootBkm.children[0],RootBkm.children.length);
subBookmark=RootBkm.children[RootBkm.children.length-1];//目錄中最後一個章節
return subBookmark;
}
4.重新打開Acrobat,並打開剛才保存瞭附件的PDF文件。選擇"工具"菜單下的"從附件添加書簽”選項。
圖5
接下來彈出的這個對話框要講解一下(圖6)
圖6
頁碼為1的頁面就是正文開始的第一頁,但一般都不是PDF開始的第一頁。
如圖7所示,頁碼為1的頁面是PDF文件的第14頁,這裡我已修改瞭頁碼。
圖7
這樣就可以按照目錄的頁數直接找到要看的頁面,就是看實體書一樣。
因此,對於圖7來說,圖6中就應該輸入14,然後按確定,稍等一下,帶連接的書簽就自動生成瞭。
圖8
有的PDF沒有頁碼1的頁面,隻有頁碼2或其它,這時需要把推斷出的頁碼1的頁數填入
如上圖,頁碼2的頁數是15,則頁碼1的頁數是14,以此類推。
註意事項:
一.這個腳本隻能處理最多5層的書簽,如
目錄–第一章–1.1–1.1.1–1.1.1.1
需要處理更多的層數請自己修改腳本,很簡單的。
二.有的PDF正文內可能插有其他的內容,例如發佈網站的廣告等,這時要把這些頁面刪掉,以確保正文的頁數跟目錄是一致的,否則將連接不到正確的頁面。
三.腳本也能處理沒有頁數的目錄,但是需要手動設置書簽的目標瞭…
四.Acrobat Pro的版本要高於9.3,否則不能讀取附件內容。
好瞭,本文就到此結束瞭,有任何疑問請回帖,希望本文對你有幫助!
本文出自 “一些心得” 博客