1. 程式人生 > >CKEditor --- 複製word內容保留原有格式和樣式

CKEditor --- 複製word內容保留原有格式和樣式

目錄

配置過濾js檔案

配置config檔案

最終效果


說在前面,是的ckeditor版本如下圖所示

 

配置過濾js檔案

首先開啟  \editor\plugins\pastefromword\filter\default.js  在檔案的最後部分又如下程式碼(修改前的程式碼),也可以搜尋CKEDITOR.cleanWord進行定位。

 

修改前

CKEDITOR.cleanWord = function (a, c) {
        CKEDITOR.env.gecko && (a = a.replace(/(<\!--\[if[^<]*?\])--\>([\S\s]*?)<\!--(\[endif\]--\>)/gi, "$1$2$3")); CKEDITOR.env.webkit &&
    (a = a.replace(/(class="MsoListParagraph[^>]+><\!--\[if !supportLists\]--\>)([^<]+<span[^<]+<\/span>)(<\!--\[endif\]--\>)/gi, "$1<span>$2</span>$3")); var b = new G, f = b.dataFilter; f.addRules(CKEDITOR.plugins.pastefromword.getRules(c, f)); c.fire("beforeCleanWord", { filter: f }); try { a = b.toHtml(a) } catch (d) { alert(c.lang.pastefromword.error) } a = a.replace(/cke:.*?".*?"/g, ""); a = a.replace(/style=""/g, ""); return a = a.replace(/<span>/g, "")
    }
})();

 

修改後的

CKEDITOR.cleanWord = function (a, c) {
        return a; CKEDITOR.env.gecko && (a = a.replace(/(<\!--\[if[^<]*?\])--\>([\S\s]*?)<\!--(\[endif\]--\>)/gi, "$1$2$3")); CKEDITOR.env.webkit &&
    (a = a.replace(/(class="MsoListParagraph[^>]+><\!--\[if !supportLists\]--\>)([^<]+<span[^<]+<\/span>)(<\!--\[endif\]--\>)/gi, "$1<span>$2</span>$3")); 
var b = new G, f = b.dataFilter; f.addRules(CKEDITOR.plugins.pastefromword.getRules(c, f)); c.fire("beforeCleanWord", { filter: f }); 
try { a = b.toHtml(a) } catch (d) { alert(c.lang.pastefromword.error) } 
a = a.replace(/cke:.*?".*?"/g, ""); a = a.replace(/style=""/g, ""); 
a = a.replace(/<span>/g, ""); return a;    }
})();

即在開始加上return a;另網上有講解3.X版本的word樣式保留解答,那個版本的引數是h,所以是return h;(有興趣的百度吧,很好找)

 

配置config檔案

其次在Config.js(和ckeditor.js在一個資料夾下)中新增

config.allowedContent = true;

如果沒有配置上面的屬性,複製word內容後,格式是保留的,但是樣式沒有保留,只有加了後才會保留!!!

而如下配置

//保證word匯入格式
config.pasteFromWordRemoveFontStyles = false;
config.pasteFromWordRemoveStyles = false;
//是否強制複製來的內容去除格式
config.forcePasteAsPlainText =false; //不去除

通過驗證,無需明確的設定,保持預設或者不設定即可。

 

最終效果

Word測試內容

最終顯示效果