mxgraph示例解析(-) pagebreaks分頁符

pagebreaks分頁符效果圖

官方示例

mxEvent.disableContextMenu(container);

// Creates the graph inside the given container
var graph = new mxGraph(container);
graph.view.setScale(0.15);
graph.pageBreaksVisible = true;
graph.pageBreakDashed = true;
graph.preferPageSize = true;
graph.centerZoom = false;
graph.setPanning(true);

// Account for the header and footer size in the page format
var headerSize = 100;
var footerSize = 100;

// Removes header and footer from page height
graph.pageFormat.height -= headerSize + footerSize;

// Takes zoom into account for moving cells
graph.graphHandler.scaleGrid = true;

// Enables rubberband selection
new mxRubberband(graph);

// Gets the default parent for inserting new cells. This
// is normally the first child of the root (ie. layer 0).
var parent = graph.getDefaultParent();
                
// Adds cells to the model in a single step
graph.getModel().beginUpdate();
try
{
    var v1 = graph.insertVertex(parent, null, 'Hello,', 10, 10, 280, 330);
    var v2 = graph.insertVertex(parent, null, 'World!',
        graph.pageFormat.width * graph.pageScale - 280 - 10,
        graph.pageFormat.height * graph.pageScale - 330 - 10,
        280, 330);
    var e1 = graph.insertEdge(parent, null, '', v1, v2);
}
finally
{
    // Updates the display
    graph.getModel().endUpdate();
}

document.body.appendChild(mxUtils.button('Toggle Page Breaks',
    function(evt)
    {
        graph.pageBreaksVisible = !graph.pageBreaksVisible;
        graph.sizeDidChange();
    }
));

document.body.appendChild(mxUtils.button('Zoom In',
    function(evt)
    {
        graph.zoomIn();
    }
));

document.body.appendChild(mxUtils.button('Zoom Out',
    function(evt)
    {
        graph.zoomOut();
    }
));

document.body.appendChild(mxUtils.button('Print',
    function(evt)
    {
        // Matches actual printer paper size and avoids blank pages
        var scale = 0.5;

        // Applies scale to page
        var pf = mxRectangle.fromRectangle(graph.pageFormat || mxConstants.PAGE_FORMAT_A4_PORTRAIT);
        pf.width = Math.round(pf.width * scale * graph.pageScale);
        pf.height = Math.round(pf.height * scale * graph.pageScale);

        // Finds top left corner of top left page
        var bounds = mxRectangle.fromRectangle(graph.getGraphBounds());
        bounds.x -= graph.view.translate.x * graph.view.scale;
        bounds.y -= graph.view.translate.y * graph.view.scale;

        var x0 = Math.floor(bounds.x / pf.width) * pf.width;
        var y0 = Math.floor(bounds.y / pf.height) * pf.height;
    
        var preview = new mxPrintPreview(graph, scale, pf, 0, -x0, -y0);
        preview.marginTop = headerSize * scale * graph.pageScale;
        preview.marginBottom = footerSize * scale * graph.pageScale;
        preview.autoOrigin = false;
        
        var oldRenderPage = preview.renderPage;
        preview.renderPage = function(w, h, x, y, content, pageNumber)
        {
            var div = oldRenderPage.apply(this, arguments);

            var header = document.createElement('div');
            header.style.position = 'absolute';
            header.style.boxSizing = 'border-box';
            header.style.fontFamily = 'Arial,Helvetica';
            header.style.height = (this.marginTop - 10) + 'px';
            header.style.textAlign = 'center';
            header.style.verticalAlign = 'middle';
            header.style.marginTop = 'auto';
            header.style.fontSize = '12px';
            header.style.width = '100%';

            // Vertical centering for text in header/footer
            header.style.lineHeight = (this.marginTop - 10) + 'px';
            
            var footer = header.cloneNode(true);

            mxUtils.write(header, 'Page ' + pageNumber + ' - Header');
            header.style.borderBottom = '1px solid gray';
            header.style.top = '0px';
                                        
            mxUtils.write(footer, 'Page ' + pageNumber + ' - Footer');
            footer.style.borderTop = '1px solid gray';
            footer.style.bottom = '0px';

            div.firstChild.appendChild(footer);
            div.firstChild.appendChild(header);
            
            return div;
        };
        
        preview.open();
    }
));

document.body.appendChild(mxUtils.button('Reset View',
    function(evt)
    {
        graph.view.scaleAndTranslate(0.15, 0, 0);
    }
));

實現(xiàn)原理

  • 開啟分頁分隔符顯示
graph.pageBreaksVisible = true; //分割線是否顯示筝尾,默認為false
graph.pageBreakDashed = true; //分割線為虛線,默認為true
  • 設(shè)置首選頁面為默認頁面大小(即當前畫布大小)
graph.preferPageSize = true;
  • 設(shè)置鏡頭可移動
graph.centerZoom = false; //從頁面中間進行縮放,默認為true
graph.setPanning(true); //設(shè)置鏡頭可移動

簡化示例

graph.pageBreaksVisible = true;
graph.preferPageSize = true;
graph.centerZoom = false;
graph.setPanning(true);
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末串纺,一起剝皮案震驚了整個濱河市顽腾,隨后出現(xiàn)的幾起案子患雏,更是在濱河造成了極大的恐慌郭毕,老刑警劉巖浇辜,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件朋魔,死亡現(xiàn)場離奇詭異岖研,居然都是意外死亡,警方通過查閱死者的電腦和手機警检,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門缎玫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來硬纤,“玉大人,你說我怎么就攤上這事赃磨◇菁遥” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵邻辉,是天一觀的道長溪王。 經(jīng)常有香客問我,道長值骇,這世上最難降的妖魔是什么莹菱? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮吱瘩,結(jié)果婚禮上道伟,老公的妹妹穿的比我還像新娘。我一直安慰自己使碾,他們只是感情好蜜徽,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著票摇,像睡著了一般拘鞋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上矢门,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天盆色,我揣著相機與錄音,去河邊找鬼祟剔。 笑死隔躲,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的物延。 我是一名探鬼主播宣旱,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼教届!你這毒婦竟也來了响鹃?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤案训,失蹤者是張志新(化名)和其女友劉穎买置,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體强霎,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡忿项,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片轩触。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡寞酿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出脱柱,到底是詐尸還是另有隱情伐弹,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布榨为,位于F島的核電站惨好,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏随闺。R本人自食惡果不足惜日川,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望矩乐。 院中可真熱鬧龄句,春花似錦、人聲如沸散罕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽笨使。三九已至卿樱,卻和暖如春僚害,著一層夾襖步出監(jiān)牢的瞬間硫椰,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工萨蚕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留靶草,地道東北人。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓岳遥,卻偏偏與公主長得像奕翔,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子浩蓉,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案派继? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽?zāi)J的外補...
    _Yfling閱讀 13,734評論 1 92
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,090評論 1 32
  • 1. 簡介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL捻艳、存儲過程以及高級映射的優(yōu)秀的...
    笨鳥慢飛閱讀 5,453評論 0 4
  • 去年有段時間得空驾窟,就把谷歌GAE的API權(quán)威指南看了一遍,收獲頗豐认轨,特別是在自己幾乎獨立開發(fā)了公司的云數(shù)據(jù)中心之后...
    騎單車的勛爵閱讀 20,474評論 0 41
  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,370評論 0 5