2024年5月26日发(作者:)

Acrobat Reader添加书签功能

pdf格式是众多电子教程的首选格式,可惜居然不支持书签的功能,让人

觉得很不方便,在网上找了一下,发现有如下的解决方案,很好PDF文件的官

方阅读程序"Adobe Acrobat Reader"不支持自定义"书签"功能,就造成当阅读

长篇幅文档时,根本无法通过添加多个书签的办法来实现快速定位。发扬DIY

的精神,为Acrobat Reader制造出书签功能吧!利用Adobe Acrobat Reader

支持Javascript插件的方式,可以很容易地实现!第一步:将从下载的文件解

压缩,把其中的"bookmark_"文件复制到"c:Program

FilesAdobeReader 8.0ReaderJavascripts"文件夹下,然后启动Adobe

Acrobat Reader软件,依次点击"编辑→首选项→Javascript",将右侧界面中

的前三个选项全部选中(见图1)。第二步:打开一个PDF文件,会发现左侧多

了一个"书签"图标,点击它可得到树状结构的目录列表,当浏览到感兴趣的页

面时,依次点击"视图→Bookmark This Page"(将该页加到书签),在弹出对话

框中输入对此页的描述即完成了书签的添加(见图2)。第三步:当需要快速打

开添加了书签的页面时,只要依次点击"视图→Go To Bookmark"(转到书签),

从弹出的小界面上点击相应名称的书签即可(见图3)。如果仅仅想删除某一个

或几个书签,点击"视图→Remove aBookmark"(删除书签),在弹出的小界面中

单击不想继续使用的书签就可以删除了;如果想将所有的书签删除,可点击"视

图→Clear Bookmark"(清理书签)就能一次性全部删除了。小提示:这个脚本仅

能使用在adobe reader8.0的版本,其他的我没有测试过,请注意(以后版本也

可以用)该插件创建的书签不是针对某一本书单独存放,而是全局性的,比如A

和B两个PDF文件都创建了书签,当在B文件中使用书签功能时,书签列表中

同样会出现A文件的书签!因此创建书签时一定要注明PDF文件的名称,省得

日后混淆。另外移动PDF文件位置后,曾经添加的书签将失效!=附文件内容,

已做简单汉化=bookmark_//bookmark_,ver.1.0//visit:

/bookmark_page///use this delimiter for serializing

our array var bp_delim='%#%#';function SaveData(data){//data is an

array of arrays that needs//to be serialized and stored into

apersistent//global string var ds='';for(ii=0;ii ;

++ii){for(jj=0;jj 3;++jj){if(ii!=0||jj!=0)ds+=bp_delim;

ds+=data[ii][jj];}}_hacks_js_bookmarks=ds;

sistent("pdf_hacks_js_bookmarks",true);}function

GetData(){//reverse of SaveData;return an array of arrays

if(_hacks_js_bookmarks==null){return new Array(0);}var

flat=_hacks_js_(bp_delim);var data=new

Array();for(ii=0;ii ;){var record=new Array();for(jj=0;

jj 3&&ii ;

++ii,++jj){(flat[ii]);}if(==3){(rec

ord);}}return data;}function AddBookmark(){//query the user for

aname,and then combine it with//the current PDF page to create

arecord;store this record var label=se("Bookmark Name:

","Bookmark Name","",false);if(label!=null){var record=new Array(3);

record[0]=label;record[1]=;record[2]=m;

data=GetData();(record);SaveData(data);}}function

ShowBookmarks(){//show apop-up menu;this seems to only work when//a

PDF is alreay in the viewer;var data=GetData();var items='';

for(ii=0;ii ;++ii){if(ii!=0)items+=',';items+='"'+ii+':

'+data[ii][0]+'"';}//assemble the command and the execute it with

eval()var command='enu('+items+');';var

selection=eval(command);if(selection==null){return;//exit}//the

user made aselection;parse out its index and use it//to access the

bookmark record var index=0;//toString()converts the String object

to astring literal//eval()converts the string literal to anumber

index=eval(ing(0,f(':')).toString());

if(index ){try{//the document must be'disclosed'for us to

have any access//to its properties,so we use these FirstPage NextPage

calls//c(data[index][1]);nuItem("FirstPage");

for(ii=0;ii data[index][2];

++ii){nuItem("NextPage");}}catch(ee){var

response=("Error trying to open the requested

d Iremove this bookmark?",2,2);if(response==4&&index

){(index,1);SaveData(data);}}}}function

DropBookmark(){//modelled after ShowBookmarks()var data=GetData();

var items='';for(ii=0;ii ;++ii){if(ii!=0)items+=',';

items+='"'+ii+':'+data[ii][0]+'"';}var

command='enu('+items+');';var selection=eval(command);

if(selection==null){return;//exit}var index=0;

index=eval(ing(0,f(':')).toString());

if(index ){(index,1);

SaveData(data);}}function ClearBookmarks(){if(("确定要清除

所有的书签吗?",2,2)==4){SaveData(new

Array(0));}}uItem({cName:"-",//menu divider cParent:

"View",//append to the View menu cExec:"void(0);"});

uItem({cName:"添加本页为书签&5",cParent:"View",cExec:

"AddBookmark();",cEnable:"=(!=null);"});

uItem({cName:"转到书签&6",cParent:"View",cExec:

"ShowBookmarks();",cEnable:"=(!=null);"});

uItem({cName:"移走一个书签",cParent:"View",cExec:

"DropBookmark();",cEnable:"=(!=null);"});

uItem({cName:"清除书签",cParent:"View",cExec:

"ClearBookmarks();",cEnable:"=true;"});