1. 程式人生 > >使用Javascript為Adobe Reader X 新增書籤功能

使用Javascript為Adobe Reader X 新增書籤功能

以前使用的Javascript 為Adobe Reader新增書籤功能,在Adobe Reader X中竟然中文選單全是亂碼,下午參考Adobe SDK的文件,修改了下。Adobe SDK 幫助地址:http://livedocs.adobe.com/acrobat_sdk/10/Acrobat10_HTMLHelp
1.解決了選單亂碼問題。
   使用cUser成員為選單命名,防止亂碼。



2.優化了書籤跳轉演算法,使開啟書籤沒有延遲。
   原程式中使用的是for(page = 0; page < gotogage; ++page) nextPage(); 這樣的機制,使得書籤跳轉速度慢,修改為gotoPage( gotopage);。


3.添加了書籤自動排序功能。


   書籤儲存形式為“《檔名》第N...N頁/共N...N頁 yyyy/mm/dd 備註”(其中備註為可選填項)書籤會按照字母順序自動排序,排序優先順序為:檔名>頁面>日期>備註。可以開啟不同檔案。

【使用方法】

1.下載檔案,將Bookmarks.js解壓到Adobe Reader安裝目錄\Reader\Javascripts資料夾下。

2.執行Adobe Reader,選單編輯->首選項->JavaScript->勾選啟用Acrobat JavaScript和啟用選單專案JavaScript執行許可權。


bookmark_page.js

//修改:TOTOP  2011/12/6
//1修改選單中文顯示亂碼
//2優先頁面跳轉的速度
//3書籤自動排序
//http://hi.baidu.com/tlptotop   [email protected]
//SDK 幫助地址:http://livedocs.adobe.com/acrobat_sdk/10/Acrobat10_HTMLHelp

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 Date
function 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 divider
cParent: "View",         // append to the View menu
cExec: "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;"
} );


相關推薦

使用JavascriptAdobe Reader X 新增書籤功能

以前使用的Javascript 為Adobe Reader新增書籤功能,在Adobe Reader X中竟然中文選單全是亂碼,下午參考Adobe SDK的文件,修改了下。Adobe SDK 幫助地址:http://livedocs.adobe.com/acrobat_

Adobe Reader新增書籤功能

測試版本: 不過之前的版本都能成功的 1.修改一下Adobereader的選項:編輯->首選項->javascript: 啟用javascript 2:在C:\Program Files (x86)\Adobe\Reader 11.0\Reader\Java

adobe reader新增書籤

             在adobe reader 9.0中,在視圖裡面沒有書籤這一實用功能,這個我們在閱讀的時候帶來了很多的不便之處,下面這個方法就是在adobe的檢視選單裡新增書籤的選項,步驟如

在PDF檔案(Adobe Reader)中新增書籤導航

Adobe Reader中預設中是沒有書籤導航功能的,下次開啟同一PDF文件時,不會恢復到上次關閉的位置,還得重新找。這個方法可以新增一個書籤功能:在當前頁新增後,下次開啟時直接選擇這個標籤頁就可以了。方法:1,下載ht

Adobe Reader新增書籤功能

上面下載一個javascript指令碼檔案,把這個檔案放到Adobe/Acrobat 7.0/Reader/Javascripts目錄下。如果忘記了Adobe的安裝目錄,可以執行Adobe Reader,然後使用process explorer檢視程序對應的可執行檔案路徑。檔案放好後,重新執行Adobe Re

pdf閱讀器(adobe reader)新增書籤

不知道為什麼,自己的pdf閱讀器沒有書籤功能,上網找了找,研究了一個,測試還挺好用,現在給寫出來,以備以後使用: 新建一個js:  bookmark_page.js var bp_delim= '%#%#'; function SaveData( data )  { //

Adobe Acrobat Reader新增書籤功能

pdf格式是眾多電子教程的首選格式,可惜居然不支援書籤的功能,讓人覺得很不方便,在網上找了一下,發現有如下的解決方案,很好。 PDF檔案的官方閱讀程式“Adobe Acrobat Reader”不支援自定義“書籤”功能,就造成當閱讀長篇幅文件時,根本無法通過新增多個書籤的辦

Adobe Reader新增書籤

Adobe Reader還是很強大的,但是本人比較懶,一個PDF文件看了一點之後,可能好幾天不再開啟,再開啟的時候又忘了上次看到哪,還得從頭找,這是Adobe Reader不太方便的地方,找了一圈沒找到書籤,原來得下載,下載地址:bookmark_page.js-1.0.zi

Mate 20 X試用:福昕閱讀器PDF轉換功能

目的 帶來 圖片 exce png 方式 轉換成 硬件 上傳 海外發布會不久,華為就專門在國內召開新品發布會,為國人帶來了舉世矚目的華為 Mate 20 系列產品。這次專門使用華為Mate 20 X試用一下福昕閱讀器App的PDF轉換功能,為什麽要測這個呢?因為要用PDF轉

如何使用PDF編輯器PDF新增書籤

       在很多的時候,大家都會使用到PDF檔案,不管是在學習中還是在工作中,都會使用到PDF檔案,那麼,對於PDF檔案的修改,則是需要使用到PDF編輯軟體的,那麼,如何使用PDF編輯器為PDF新增書籤呢,是不是有很多的小夥伴都想知道應該怎麼做呢,那就可以看看下面的

使用JavaScriptH5新增右擊事件

話不多說,直接上程式碼,其中需要注意的一點是為menu新增position: absolute;屬性,這個屬性的意思是選單採用絕對位置,可以保證右擊後選單出現在自己想要的位置,而不受其他元素的影響 <!DOCTYPE html> <html> &

laravel網站新增支付功能流程(支付寶)

為網站新增支付功能,本部落格以新增支付寶介面為例。 一、建立應用 進入螞蟻金服開放平臺->開發者中心->網頁&移動應用 按需求選擇建立應用 選擇應用功能 然後提交稽核,大部分功能需要簽約後才能使用。等稽核正式通過,該應用就可以正式投入使用。 二、

接入gitmenthexo新增評論功能

title: 接入gitment為hexo新增評論功能 toc: false date: 2018-04-16 10:59:56 categories: methods tags: hexo gitment 註冊一個OAuth application 註冊連結

Android的WebView新增播放音樂的介面供javascript呼叫

Android的WebView不支援播放音樂,但是隻要給它新增相關介面,就可以從Javascript中呼叫Android類中介面程式來播放音樂了,這對於混合開發是非常需要的。 步驟: 為Android和WebView內的Javascript新增播放音樂的介面: priv

javascript--select標籤的新增刪除功能的使用

在網頁開發中,常常遇見這種問題,給定兩個框,A和B,和幾個圖片按鈕,A中存在幾個操作,點選圖片按鈕,填加至B中,或者從B中移除等,這種效果如何實現,本文加以總結。 幾種效果圖如下: 原始圖:                &n

Adobe Reader10新增書籤

將以下程式碼複製到記事本,另存為Bookmark.js檔案.放到安裝目錄 X:\Program Files\Adobe\Reader 10.0\Reader\Javascripts資料夾下(X代表碟符

hexo next主題部落格新增分享功能

今天心血來潮,決定給部落格新增分享功能,百度上首先是找到了使用shareSDK的分享功能,最後在實踐的過程中發現它新增時步驟比較多,新增完成後效果比較醜(就是一個長條的淺藍色按鈕),而且點選後想要退出分享比較麻煩(它的取消按鈕實在太難找了,它在頁面最下方的位置,

Linux下完美PDF閱讀器(可新增書籤註釋)–wine+Foxit Reader

Linux下完美PDF閱讀器(可新增書籤註釋)–Foxit Reader 作者: Cnfn 日期: 六月 25, 2011發表評論 (2)檢視評論 以前一直在尋找一個 linux 下可新增書籤註釋的 PDF 閱讀器,結果尋找了半年多也一直沒有找到一個完美的閱讀器。曾用過 PDFMOD,但它只可

PDF批量新增書籤

現在網路這麼發達,相信很多朋友要充電的話,都只看電子書,而鮮有去買紙質書的,一來可以省錢,二來電子書更便於攜帶(相信很多人都經歷過搬家時處理書籍的痛苦,是搬還是賣得猶豫許久)。而在網上下載的電子書籍,通常沒有書籤(比如大家網的電子書),對於一般的書還不要經,沒書籤就湊合看嘍。但對於一些好書,本人總覺得無書籤是

安卓應用新增手勢密碼功能,遇到的一些問題以及解決方法

公司的APP有個需求為他新增類似於支付寶的手勢密碼驗證功能效果圖如下 首先我們要分析三個問題: 1.手勢密碼的作用是什麼? 2.在什麼時候啟動? 3.啟動之後幹什麼? 1.手勢密碼的作用是什麼? 這裡很容易解答,為了APP二次啟動進入進行驗證