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);
    }
));

實(shí)現(xiàn)原理

  • 開啟分頁分隔符顯示
graph.pageBreaksVisible = true; //分割線是否顯示,默認(rèn)為false
graph.pageBreakDashed = true; //分割線為虛線,默認(rèn)為true
  • 設(shè)置首選頁面為默認(rèn)頁面大小(即當(dāng)前畫布大小)
graph.preferPageSize = true;
  • 設(shè)置鏡頭可移動
graph.centerZoom = false; //從頁面中間進(jìn)行縮放,默認(rèn)為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)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容