讓PDF文件也支持書籤功能

    能否有你想到,然後網上無法滿足你的需求,這就是一個機會。


原文鏈接:http://blog.csdn.net/aohan/article/details/2108051

最近經常看一些PDF的電子文檔,痛苦的是Adobe Reader竟然沒有提供書籤的功能,每次看完之後再回到上次看的地方都很麻,到網上一找,還真有人就做了PDF的書籤,下載一試效果不錯,於是參看了一下Adobe Reader的SDK,修改了一點地方,以更方便的使用,下面是程序的使用方法

1、打開編輯的首選項項

 

2、確保下面的選項都被選中

3 把下面的代碼保存爲一個bookmark_page.js文件

 

// bookmark_page.js, ver. 1.0
//
 visit: www.pdfhacks.com/bookmark_page/
//
 edit:cjs 2008-02-17 
//
 1 修改爲中文標籤
//
 2 設置書籤時可以自動獲取當前的書名
//
 3 自動獲取當前所在的頁碼與總頁數,方便查閱
//
 4 實現更多功能可以參看Adobe Reader的SDK


// 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 a persistent
  // global string
  var ds= '';
  
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 Date
function DateNow(){
   
var d, s ;
   d 
= new Date();
   s 
= d.getFullYear()+"/";
   s 
+= (d.getMonth() + 1+ "/";
   s 
+= d.getDate() ;
   
/*
   s += d.getHours() + ":";
   s += d.getMinutes() + ":";
   s += d.getSeconds() ;
   
*/

   
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 numPlugInss=this.pageNum+1;
  
var currentdate=DateNow();
  
var label= 
    app.response( 
"書籤名稱,可以修改以便於記憶:",
                  
"書籤名稱",
                  
""+thisfilename+"》第 "+numPlugInss+" 頁/共 "+this.numPages+" 頁  "+currentdate,
                  
false );
  
if( label!= null ) {
    
var record= new Array(3);
    record[
0]= label;
    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
      //
      app.openDoc( data[index][1] );
      app.execMenuItem( 
"FirstPage" );
      
for( ii= 0; ii< data[index][2]; ++ii ) {
        app.execMenuItem( 
"NextPage" );
      }

    }

    
catch( ee ) {
      
var response= 
        app.alert(
"打開書籤錯誤. 是否刪除本書籤?"22,"刪除書籤");
      
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("確認要清除所有的書籤嗎?"22,"刪除書籤" )== 4 ) {
    SaveData( 
new Array(0) );
  }

}


app.addMenuItem( 
{
cName: 
"-",              // menu divider
cParent: "View",         // append to the View menu
cExec: "void(0);" }
 );

app.addMenuItem( 
{
cName: 
"設置本頁爲書籤(&B)",
cParent: 
"View",
cExec: 
"AddBookmark();",
cEnable: 
"event.rc= (event.target != null);" }
 );

app.addMenuItem( 
{
cName: 
"轉到指定書籤(&T)",
cParent: 
"View",
cExec: 
"ShowBookmarks();",
cEnable: 
"event.rc= (event.target != null);" }
 );
//cEnable: "event.rc= true;" } );

app.addMenuItem( 
{
cName: 
"刪除一個書籤(&D)",
cParent: 
"View",
cExec: 
"DropBookmark();",
cEnable: 
"event.rc= (event.target != null);" }
 );

app.addMenuItem( 
{
cName: 
"清除所有書籤(&C)",
cParent: 
"View",
cExec: 
"ClearBookmarks();",
cEnable: 
"event.rc= true;" }
 );

 

4 將文件拷貝到C:/Program Files/Adobe/Reader 8.0/Reader/Javascripts目錄下

5 重新打開Adobe Reader,看看下面的圖形,相信不用說任何東西,大家都會用了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章