给Adobe PDF文件添加书签(解决乱码问题)

来源:互联网 发布:人工智能最好书籍 编辑:程序博客网 时间:2024/05/17 17:15

安装adobe reader 之后,每次打开pdf,都要翻页,添加书签JS,方便下次快速链接;

 

打开PDF文件,菜单栏--》编辑---》首选项---》javascript---》执行js脚本/启动加载(全勾上好了)---》保存配置,退出!

把下面JS命名:bookmark_page.js保存至Adobe Reader 安装路径 C:\Program Files (x86)\Adobe\Reader 11.0\Reader\Javascripts

 

var bp_delim= '%#%#';function SaveData( data ){// data is an array of arrays that needs// to be serialized and stored into a persistent// global string    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 );}function GetData(){// reverse of 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;}//Get Current Datefunction DateNow(){    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);}function AddBookmark(){// query the user for a name, and then combine it with// the current 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 );    }}function ShowBookmarks(){// show a pop-up menu; this seems to only work when// a PDF is 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    }// the user made a selection; parse out its index and use it// to access 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 use these 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 );            }        }    }}function DropBookmark(){// 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 );    }}function ClearBookmarks(){    if( app.alert("确认要清除所有的书签吗,删除后将不可恢复?", 2, 2,"删除书签" )== 4 )    {        SaveData( new Array(0) );    }}app.addMenuItem({cName: "-",              // menu dividercParent: "View",         // append to the 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;"} );

 

重新打开PDF文件,在工具栏视图最下方可以看到js生成的书签;

支持Adobe Reader 10.0 、11.0版本


 

原创粉丝点击