为 adobe reder(pdf文件)添加书签
来源:互联网 发布:网络程琳为什么不红了 编辑:程序博客网 时间:2024/05/16 12:22
为 adobe reder(pdf阅读器)添加书签
--------完美解决中文乱码和支持reder10.0/reader11.0
从adobe reder的官方说明书中可以看到,adobe reder是不支持书签功能的。这给我们阅读带来了很大的麻烦,我每次都是在桌面新建一文本文件,专门用来记录书签信息。(当然,adobe reder支持一种类似的功能,即:视图->页面导览->上一视图,它记录了你关闭PDF时的当时的页面,但功能单一且不实用)。
从adobe reder的技术手册中发现,adobe reder支持插件功能,且提供相应的SDK说明书,并借鉴网友们的帮助和建议,实现了书签功能。完美支持adobe reder 10.0 ,adobe reder11.0和中文显示等。
1.解决了菜单乱码问题。
使用cUser成员为菜单命名,防止乱码。
2.优化了书签跳转算法,使打开书签没有延迟。
原程序中使用的是for(page = 0; page < gotogage; ++page) nextPage(); 这样的机制,使得书签跳转速度慢,修改为gotoPage( gotopage);。
3.添加了书签自动排序功能。
书签保存形式为“《文件名》第N...N页/共N...N页 yyyy/mm/dd 备注”(其中备注为可选填项)书签会按照字母顺序自动排序,排序优先级为:文件名>页面>日期>备注。可以打开不同文件。
第一步,将以下代码复制到记事本,另存为Bookmark.js文件.放到安装目录 X:\Program Files\Adobe\Reader10.0\Reader\Javascripts文件夹下(X代表盘符,Reader 10.0这个版本随你安装的版本而不同)
第二步 运行Adobe Reader,菜单编辑->首选项->JavaScript->勾选启用Acrobat JavaScript和启用菜单项目JavaScript执行权限。
第三步 在“视图(view)”下面已经出现4个选择项:设置本页为书签、转到指定书签、删除一个书签、清除所有书签.
====================================================================================================================================
代码如下:
varbp_delim= '%#%#';
functionSaveData( data ){// data isan array of arrays that needs// to beserialized and stored into a persistent// globalstring var ds= ''; data.sort(); for( ii= 0; ii< data.length; ++ii ) { for( jj= 0; jj< 3; ++jj ) { if( ii!= 0 || jj!= 0 ) ds+= bp_delim; ds+= data[ii][jj]; } } global.pdf_hacks_js_bookmarks= ds; global.setPersistent("pdf_hacks_js_bookmarks", true );} functionGetData(){// reverseof SaveData; return an array of arrays if( global.pdf_hacks_js_bookmarks== null ) { return new Array(0); } var flat=global.pdf_hacks_js_bookmarks.split( bp_delim ); var data= new Array(); for( ii= 0; ii< flat.length; ) { var record= new Array(); for( jj= 0; jj< 3 && ii<flat.length; ++ii, ++jj ) { record.push( flat[ii] ); } if( record.length== 3 ) { data.push( record ); } } return data;} //GetCurrent DatefunctionDateNow(){ var d, tmp ,s ; d = new Date(); t = d.getFullYear(); s = t + "/"; t = (d.getMonth() + 1).toString(); if(t.length!=2) t = "0" + t; s += t + "/"; t = (d.getDate()).toString(); if(t.length!=2) t = "0" + t; s += t; return(s);} functionAddBookmark(){// querythe user for a name, and then combine it with// thecurrent PDF page to create a record; store this record var thisfilename=this.documentFileName; thisfilename=thisfilename.substr(0,thisfilename.lastIndexOf(".")); var numLen =this.numPages.toString().length; var numPlugInss=this.pageNum+1; while(numPlugInss.toString().length <numLen) { numPlugInss = "0" + numPlugInss; } var currentdate=DateNow(); var label="《"+thisfilename+"》第 "+numPlugInss+" 页/共 "+this.numPages+" 页 " + currentdate; var cResponse = app.response( { cQuestion: label, cTitle: "添加书签", cDefault: "无备注", cLabel: "备注:" }); if( cResponse!= null ) { var record= new Array(3); record[0]= label + " " + cResponse; record[1]= this.path; record[2]= this.pageNum; data= GetData(); data.push( record ); SaveData( data ); }} functionShowBookmarks(){// show apop-up menu; this seems to only work when// a PDFis alreay in the viewer; var data= GetData(); var items= ''; for( ii= 0; ii< data.length; ++ii ) { if( ii!= 0 ) items+= ', '; items+= '"'+ ii+ ': '+data[ii][0]+ '"'; }// assemble the command and the execute it with eval() var command= 'app.popUpMenu( '+ items+ ');'; var selection= eval( command ); if( selection== null ) { return; // exit } // theuser made a selection; parse out its index and use it// toaccess the bookmark record var index= 0;// toString() converts the String object to a string literal// eval()converts the string literal to a number index= eval( selection.substring( 0,selection.indexOf(':') ).toString() ); if( index< data.length ) { try { // the document must be 'disclosed'for us to have any access // to its properties, so we usethese FirstPage NextPage calls // if(this.path == data[index][1]) { this.pageNum = data[index][2]; } else { var otherDoc =app.openDoc( data[index][1]); otherDoc.pageNum =data[index][2]; } } catch( ee ) { var response= app.alert("打开书签错误. 是否删除本书签?", 2, 2,"删除书签"); if( response== 4 &&index< data.length ) { data.splice( index, 1 ); SaveData( data ); } } }} functionDropBookmark(){// modelled after ShowBookmarks() var data= GetData(); var items= ''; for( ii= 0; ii< data.length; ++ii ) { if( ii!= 0 ) items+= ', '; items+= '"'+ ii+ ': '+data[ii][0]+ '"'; } var command= 'app.popUpMenu( '+ items+ ');'; var selection= eval( command ); if( selection== null ) { return; // exit } var index= 0; index= eval( selection.substring( 0,selection.indexOf(':') ).toString() ); if( index< data.length ) { data.splice( index, 1 ); SaveData( data ); }} functionClearBookmarks(){ if( app.alert("确认要清除所有的书签吗,删除后将不可恢复?", 2, 2,"删除书签" )== 4 ) { SaveData( new Array(0) ); }} app.addMenuItem({cName:"-", // menudividercParent:"View", // append tothe View menucExec:"void(0);"} ); app.addMenuItem({cName:"AddBookmark",cUser:"设置本页为书签(&B)",cParent:"View",cExec:"AddBookmark();",cEnable:"event.rc= (event.target != null);"} ); app.addMenuItem({cName:"ShowBookmarks",cUser:"转到指定书签(&T)",cParent:"View",cExec:"ShowBookmarks();",cEnable:"event.rc= (event.target != null);"} ); app.addMenuItem({cName:"DropBookmark",cUser:"删除一个书签(&D)",cParent:"View",cExec:"DropBookmark();",cEnable:"event.rc= (event.target != null);"} ); app.addMenuItem({cName:"ClearBookmarks",cUser:"删除所有书签(&C)",cParent:"View",cExec:"ClearBookmarks();",cEnable:"event.rc= true;"} );
===========================================================
最后附上已经写好的Bookmark.js文件,以供大家直接下载使用:
地址:http://download.csdn.net/detail/cbnotes/4825981
******声明:以上代码是某位大神改进的代码~亲测可用,感谢大神!
- 为 adobe reder(pdf文件)添加书签
- 为pdf阅读器(adobe reader)添加书签
- 给Adobe PDF文件添加书签(解决乱码问题)
- 在PDF文件(Adobe Reader)中添加书签导航
- 为pdf添加书签
- adobe reader pdf 添加书签功能
- 为Adobe reader添加书签功能
- 为Adobe Reader添加书签功能
- Adobe Reader10添加书签
- adobe reader添加书签
- 如何给pdf文件添加目录/书签
- 如何给PDF文件添加书签
- PDF文件如何添加书签功能
- 使用Javascript为Adobe Reader X 添加书签功能
- 为Adobe reader 9.5.1添加书签功能
- PDF添加书签
- 福昕PDF添加书签
- adobe reader 怎么添加书签
- RedHat安装SLURM
- rman 定时备份
- The reason the lock icon
- URI、URL、URN
- Android WIFI状态监控
- 为 adobe reder(pdf文件)添加书签
- C++ vector容器类型
- Android 内存使用hprof文件打开方法
- 【技术类】【遥感入门系列】3、遥感电磁辐射与遥感过程
- 线程的互斥锁
- 49
- AJAX 缓存处理
- 【技术类】【ArcGIS 影像服务速成】1、什么是ArcGIS影像服务
- android adb connect multiple online devices