flexpaperの二次開発の総括と検討


先頭に書きます.
本文の主な資料はmarkからの《Flexpaper二次開発入門教程》を参考にして、ここで感謝します!このチュートリアルはまだ詳しく書かれていますが、flexpaperに初めて触れた人はまずこのチュートリアルを見ることができます.
次に主にflexpaperを二次開発する過程のいくつかの総括について述べる.
私のプロジェクト名はDiyflexpaperで、Diyflexpaperを修正します.mxmlは次のとおりです.


	
	
		[ResourceBundle("FlexPaper")]
		[Event(name="onDocumentLoaded", type="com.devaldi.events.DocumentLoadedEvent")]
		[Event(name="onLoadingProgress", type="flash.events.ProgressEvent")]
		[Event(name="onDocumentLoadedError", type="flash.events.ErrorEvent")]
		[Event(name="onCurrPageChanged", type="com.devaldi.events.CurrentPageChangedEvent")]
		[Event(name="onDocumentLoading", type="flash.events.Event")]
		[Event(name="onExternalLinkClicked", type="com.devaldi.events.ExternalLinkClickedEvent")]
		[Event(name="onDocumentPrinted", type="com.devaldi.events.DocumentPrintedEvent")]
		[Event(name="onPageLoaded", type="com.devaldi.events.PageLoadedEvent")]
		[Event(name="onPageLoading", type="com.devaldi.events.PageLoadingEvent")]
		[Event(name="onErrorLoadingPage", type="com.devaldi.events.ErrorLoadingPageEvent")]
	
	
		
	
	

注意:上のコードにラベルが表示されたら削除してください.これはブログが自動的に追加されます.
コンパイル中にエラーが発生した場合:
このプロジェクトのプロパティを設定し、追加のコンパイルパラメータを次のように変更します.
-locale=en_US,fr_FR,zh_CN,es_ES,ru_RU,pt_BR,hu_HU,tr_TR,se_SE,pt_PT,el_EL,dn_DN,cz_CS,it_IT,de_DE,pl_PL,fi_FN,pv_FN,nl_NL,bg_BG -source-path=locale/{locale} 


言語切り替えが中国語と英語のみの場合、-locale=en_US,zh_CN-source-path=locale/{locale}でよい.
主なまとめ:
1.mark文には、Diyflexpaperから利用可能なapiインタフェースが追加されていない.mxmlコードには、追加された関数が表示されます.
//     (javascript)  
                ExternalInterface.addCallback("hasFocus", hasFocus);
                ExternalInterface.addCallback("setViewerFocus", setViewerFocus); 
                ExternalInterface.addCallback("gotoPage", gotoPage);
                ExternalInterface.addCallback("fitWidth", fitWidth);
                ExternalInterface.addCallback("fitHeight", fitHeight);
                ExternalInterface.addCallback("loadSwf", loadSwf);
                ExternalInterface.addCallback("printPaperRange", printPaperRange);
                ExternalInterface.addCallback("searchText", searchText);
                ExternalInterface.addCallback("prevSearchMatch", prevSearchMatch);
                ExternalInterface.addCallback("nextSearchMatch", nextSearchMatch);
                ExternalInterface.addCallback("switchMode", switchMode);
                ExternalInterface.addCallback("Zoom", Zoom);
                ExternalInterface.addCallback("nextPage", nextPage);
                ExternalInterface.addCallback("getCurrPage", getCurrPage);
                ExternalInterface.addCallback("prevPage", prevPage);
                ExternalInterface.addCallback("printPaper", printPaper);
                ExternalInterface.addCallback("getTotalPages", getTotalPages);

2、中国語名swfがロードできない問題を解決する
まずmarkの方法で修正しましたが、まだロードできません.彼の方法は:
SwfFile:escape('中国語ajava.swf')からSwfFile:decodeURI('中国語ajava.swf')に変更しました.as - set SwfFile(s:String)
メソッドでは、次のコードを変更します.
-------------------------------------------------------------------
if(EncodeURI)
	s = unescape(s);
  
if(EncodeURI)
	s = decodeURI(s);
--------------------------------------------------------------------
if(!pagesSplit){
	
	_swfFile = s;
	if(EncodeURI)
		_swfFile = encodeURI(s);
	else
		_swfFile = s;
}
else
	_swfFile = s;
  
_swfFile = s;

彼の意味はif文全体を除去することであり、この意味であるべきで、修正後もロードできない.その後、問題は前のs=unescape(s)にしか出てこないことに気づいた.ここで、s=decodeURI(s)に変更し、ここでのみ変更し、後のif文は保留し、SwfFile:escape('中国語ajava.swf')はSwfFile:encodeURI('中国語ajava.swf')に変更した.ここではencodeURIを採用した.encodeURIとdecodeURIはペアであるため、decodeURIを2回使うわけにはいかないでしょう?また,loadSwf()メソッドを用いてloadSwf(decodeURI(url))ではロードできない(もちろんここでは中国語名をロードしたswf)とし,特にencodeURI()で統一的に符号化することが分かった.
3、jsでflexのメソッドをどのように呼び出すか、例えばloadSwf()関数を呼び出すか.
実はflash版のflexpaperのflexpaper_flash.jsファイルの先頭にflexオブジェクトを取得する方法が定義されています.
window.$FlexPaper = window["$FlexPaper"] = function(){
	if (window['flexpaper']) 
		return window['flexpaper'];
	else 
		window['flexpaper'] = window.FlexPaperViewer_Instance.getApi();
	
	return window['flexpaper'];
};
では、このように使用できます.
        var swf="    .swf";
    	var pdf=$FlexPaper();
    	pdf.loadSwf(encodeURI(swf));
4、swfファイルをページングしてロードする方法.
ここでは、他の人の方法を引用します.
        C:\SWFTools\pdf2swf.exe Paper.pdf -o Paper%.swf-f-T 9-t-s storeallcharacters上記のコマンドラインは、PDF 2 SWFでドキュメントを変換すると、ページごとにswfファイルが作成されることを示す%記号が1つしか残っていません.例えば、「Paper 1.swf」、「Paper 2.swf」.次に、FlexPaperコントロール構成でSwfFileをロードする場所で、{filename[*,padding],total pages}という構文を使用します.例えば、SwfFile:"{"+encodeURI(url+"熱効果保護標準原文")+"[*,1].swf,13}".
paddingは増分数で、1に設定されています.total pagesは総ページ数です.
注意:改ページされたswfファイルをロードした後、loadSwf()関数を呼び出してswfを切り替えるとエラーが発生します.私はテストしましたが、まだ解決策を検討していません.
       
明らかにこの住所は完全に間違っています.なぜですか.
主な検討事項:
        1、Diyflexpaper.mxmlのイベントはFlexPaperViewerに倣う.mxmlの方法ですが、jsでイベントをどのようにトリガして処理するかはまだ分かりません(ほほほ).
2、ページングロードのswf切替エラーの問題は解決しなければならない.
3、未設定パラメータInitViewModeを初期化する.これは、このパラメータを追加してエラーを提示するためである.
    
ここまで、まずこれらをメモして、後で研究を続けます.
 
2012-12-15更新、コンパイル済みswfファイル:
http://download.csdn.net/detail/kunoy/4885745 
もし問題があれば、伝言を残してフィードバックしてください.ありがとうございます.また、この二次開発バージョンは1.5.6で、現在の最新2.0.3と互換性がない可能性があります.すでに仁兄の反応があるので2.0.3は使えません.後で時間があればまたアップグレードします.
 
作者:kunoy
出典:http://blog.csdn.net/kunoy
申明:著者が博を書いたのは経験を総括し、交流して勉強するためです.
転載する必要がある場合は、できるだけこの申明を残して、文章のページの明らかな位置で原文の接続を与えてください.ありがとう!