Page settings in Vue Diagram component
12 Nov 202424 minutes to read
Page settings allow customization of the appearance, size, and orientation of the diagram page.
Page size and appearance
The width
and height
properties in page settings determine the size of the page. Additionally, the background
property allows customization of the page’s appearance. The color
property of background is used to define the color of the page. The margin
property defines the page margins.
To explore those properties, refer to Page Settings
.
The following example shows the customization of page settings.
<template>
<div id="app">
<ejs-diagram id="diagram" :width='width' :height='height' :nodes='nodes'
:connectors='connectors' :pageSettings='pageSettings'></ejs-diagram>
</div>
</template>
<script setup>
import { DiagramComponent as EjsDiagram } from '@syncfusion/ej2-vue-diagrams';
const connectors = [{
id: 'connector1',
sourceID: 'node1',
targetID: 'node2',
}];
const nodes = [{
id: 'node1',
width: 100,
height: 100,
offsetX: 100,
offsetY: 100,
annotations: [{
content: 'Node1'
}]
},
{
id: 'node2',
width: 100,
height: 100,
offsetX: 300,
offsetY: 350,
annotations: [{
content: 'Node3'
}]
}];
const width = "750px";
const height = "500px";
const pageSettings = {
// Sets the Page Break for diagram
showPageBreaks: true,
// Defines the background color and image of diagram
background: {
color: 'grey'
},
// Sets the width for the Page
width: 300,
// Sets the height for the Page
height: 300,
// Sets the space to be left between an annotation and its parent node/connector
margin: {
left: 10,
top: 10,
bottom: 10
}
}
</script>
<style>
@import "../node_modules/@syncfusion/ej2-vue-diagrams/styles/material.css";
</style>
<template>
<div id="app">
<ejs-diagram id="diagram" :width='width' :height='height' :nodes='nodes'
:connectors='connectors' :pageSettings='pageSettings'></ejs-diagram>
</div>
</template>
<script>
import { DiagramComponent } from '@syncfusion/ej2-vue-diagrams';
let connectors = [{
id: 'connector1',
sourceID: 'node1',
targetID: 'node2',
}];
let nodes = [{
id: 'node1',
width: 100,
height: 100,
offsetX: 100,
offsetY: 100,
annotations: [{
content: 'Node1'
}]
},
{
id: 'node2',
width: 100,
height: 100,
offsetX: 300,
offsetY: 350,
annotations: [{
content: 'Node3'
}]
}];
export default {
name: "App",
components: {
"ejs-diagram": DiagramComponent
},
data() {
return {
width: "100%",
height: "500px",
nodes: nodes,
connectors: connectors,
pageSettings: {
// Sets the Page Break for diagram
showPageBreaks: true,
// Defines the background color and image of diagram
background: {
color: 'grey'
},
// Sets the width for the Page
width: 300,
// Sets the height for the Page
height: 300,
// Sets the space to be left between an annotation and its parent node/connector
margin: {
left: 10,
top: 10,
bottom: 10
},
}
}
}
}
</script>
<style>
@import "../node_modules/@syncfusion/ej2-vue-diagrams/styles/material.css";
</style>
Set background image
A background image can be attached to the page by using the source
property of background
. The scale
property adjusts how the background image stretches, while the align
property aligns the image within the diagram page.
The following code illustrates how to set background image to the diagram page.
<template>
<div id="app">
<ejs-diagram id="diagram" :width='width' :height='height' :pageSettings='pageSettings'></ejs-diagram>
</div>
</template>
<script setup>
import { DiagramComponent as EjsDiagram } from '@syncfusion/ej2-vue-diagrams';
const width = "750px";
const height = "500px";
const pageSettings = {
orientation: 'Landscape',
showPageBreaks: true,
// Defines the background Image source
background: {
source: 'https://www.w3schools.com/images/w3schools_green.jpg',
// Defines the scale values for the background image
scale: 'Slice',
// Defines the align values for the background image
align: 'XMinYMin'
},
width: 300,
height: 300,
}
</script>
<style>
@import "../node_modules/@syncfusion/ej2-vue-diagrams/styles/material.css";
</style>
<template>
<div id="app">
<ejs-diagram id="diagram" :width='width' :height='height' :pageSettings='pageSettings'></ejs-diagram>
</div>
</template>
<script>
import { DiagramComponent, PageSettings } from '@syncfusion/ej2-vue-diagrams';
export default {
name: "App",
components: {
"ejs-diagram": DiagramComponent
},
data() {
return {
width: "100%",
height: "500px",
pageSettings: {
orientation: 'Landscape',
showPageBreaks: true,
// Defines the background Image source
background: {
source: 'https://www.w3schools.com/images/w3schools_green.jpg',
// Defines the scale values for the background image
scale: 'Slice',
// Defines the align values for the background image
align: 'XMinYMin'
},
width: 300,
height: 300,
}
}
}
}
</script>
<style>
@import "../node_modules/@syncfusion/ej2-vue-diagrams/styles/material.css";
</style>
Page orientation
There are two types of page orientations:
- Landscape
- Portrait
Depending on the orientation selected, the width and height properties are adjusted accordingly. By default, the orientation is set to ‘Landscape’. In the following example, the height and width properties of pageSettings are swapped when setting the orientation to ‘Portrait’.
<template>
<div id="app">
<ejs-diagram id="diagram" :width='width' :height='height' :nodes='nodes'
:connectors='connectors' :pageSettings='pageSettings'></ejs-diagram>
</div>
</template>
<script setup>
import { DiagramComponent as EjsDiagram } from '@syncfusion/ej2-vue-diagrams';
const connectors = [{
id: 'connector1',
sourceID: 'node1',
targetID: 'node2',
}];
const nodes = [{
id: 'node1',
width: 100,
height: 100,
offsetX: 100,
offsetY: 100,
annotations: [{
content: 'Node1'
}]
},
{
id: 'node2',
width: 100,
height: 100,
offsetX: 300,
offsetY: 350,
annotations: [{
content: 'Node3'
}]
}];
const width = "750px";
const height = "500px";
const pageSettings = {
// Sets the Page Break for diagram
showPageBreaks: true,
// Defines the background color and image of diagram
background: {
color: 'grey'
},
// Sets the width for the Page
width: 300,
// Sets the height for the Page
height: 300,
// Sets the space to be left between an annotation and its parent node/connector
margin: {
left: 10,
top: 10,
bottom: 10
}
}
</script>
<style>
@import "../node_modules/@syncfusion/ej2-vue-diagrams/styles/material.css";
</style>
<template>
<div id="app">
<ejs-diagram id="diagram" :width='width' :height='height' :nodes='nodes'
:connectors='connectors' :pageSettings='pageSettings'></ejs-diagram>
</div>
</template>
<script>
import { DiagramComponent } from '@syncfusion/ej2-vue-diagrams';
let connectors = [{
id: 'connector1',
sourceID: 'node1',
targetID: 'node2',
}];
let nodes = [{
id: 'node1',
width: 100,
height: 100,
offsetX: 100,
offsetY: 100,
annotations: [{
content: 'Node1'
}]
},
{
id: 'node2',
width: 100,
height: 100,
offsetX: 300,
offsetY: 350,
annotations: [{
content: 'Node3'
}]
}];
export default {
name: "App",
components: {
"ejs-diagram": DiagramComponent
},
data() {
return {
width: "100%",
height: "500px",
nodes: nodes,
connectors: connectors,
pageSettings: {
// Sets the Page Break for diagram
showPageBreaks: true,
// Defines the background color and image of diagram
background: {
color: 'grey'
},
// Sets the width for the Page
width: 300,
// Sets the height for the Page
height: 300,
// Sets the space to be left between an annotation and its parent node/connector
margin: {
left: 10,
top: 10,
bottom: 10
},
}
}
}
}
</script>
<style>
@import "../node_modules/@syncfusion/ej2-vue-diagrams/styles/material.css";
</style>
Multiple page and page breaks
When multiple pages are enabled, the page size dynamically adjusts in multiples of the specified width and height, ensuring the entire diagram fits within the page boundaries. Page breaks serve as visual guides indicating how pages are split.
The multiplePage
and showPageBreak
properties in page settings control the ability to enable multiple pages and display page break lines, respectively.
<template>
<div id="app">
<ejs-diagram id="diagram" :width='width' :height='height' :nodes='nodes'
:connectors='connectors' :pageSettings='pageSettings'></ejs-diagram>
</div>
</template>
<script setup>
import { DiagramComponent as EjsDiagram } from '@syncfusion/ej2-vue-diagrams';
let connectors = [{
id: 'connector1',
sourceID: 'node1',
targetID: 'node2',
}];
let nodes = [{
id: 'node1',
width: 100,
height: 100,
offsetX: 100,
offsetY: 100,
annotations: [{
content: 'Node1'
}]
},
{
id: 'node2',
width: 100,
height: 100,
offsetX: 300,
offsetY: 350,
annotations: [{
content: 'Node3'
}]
}];
const width = "750px";
const height = "500px";
const pageSettings = {
// Sets the Multiple page for diagram
multiplePage: true,
// Sets the Page Break for diagram
showPageBreaks: true,
width: 300,
height: 300,
}
</script>
<style>
@import "../node_modules/@syncfusion/ej2-vue-diagrams/styles/material.css";
</style>
<template>
<div id="app">
<ejs-diagram id="diagram" :width='width' :height='height' :nodes='nodes'
:connectors='connectors' :pageSettings='pageSettings'></ejs-diagram>
</div>
</template>
<script>
import { DiagramComponent } from '@syncfusion/ej2-vue-diagrams';
let connectors = [{
id: 'connector1',
sourceID: 'node1',
targetID: 'node2',
}];
let nodes = [{
id: 'node1',
width: 100,
height: 100,
offsetX: 100,
offsetY: 100,
annotations: [{
content: 'Node1'
}]
},
{
id: 'node2',
width: 100,
height: 100,
offsetX: 300,
offsetY: 350,
annotations: [{
content: 'Node3'
}]
}];
export default {
name: "App",
components: {
"ejs-diagram": DiagramComponent
},
data() {
return {
width: "100%",
height: "500px",
nodes: nodes,
connectors: connectors,
pageSettings: {
// Sets the Multiple page for diagram
multiplePage: true,
// Sets the Page Break for diagram
showPageBreaks: true,
width: 300,
height: 300,
}
}
}
}
</script>
<style>
@import "../node_modules/@syncfusion/ej2-vue-diagrams/styles/material.css";
</style>
The color of the page break lines can be customized by overriding the styles of the .e-diagram-page-break class. For more details refer to CSS customization
Boundary constraints
The diagram supports restricting or customizing the interactive region where elements cannot be dragged, resized, or rotated. You can achieve this using the boundaryConstraints
property in page settings.
There are three types of boundary constraints. They are:
- Infinity
- Diagram
- Page
To explore these constraints further, refer toBoundary Constraints
.
Below is an example illustrating how to define boundary constraints within the diagram:
<template>
<div id="app">
<ejs-diagram id="diagram" :width='width' :height='height' :nodes='nodes'
:connectors='connectors' :pageSettings='pageSettings'></ejs-diagram>
</div>
</template>
<script setup>
import { DiagramComponent as EjsDiagram } from '@syncfusion/ej2-vue-diagrams';
const connectors = [{
id: 'connector1',
sourcePoint: {
x: 300,
y: 100
},
targetPoint: {
x: 400,
y: 100
}
}];
const nodes = [
{
id: 'node1',
width: 150,
height: 100,
offsetX: 100,
offsetY: 100,
},
{
id: 'node2',
width: 80,
height: 130,
offsetX: 200,
offsetY: 200,
},
{
id: 'node3',
width: 100,
height: 75,
offsetX: 300,
offsetY: 350,
}
]
const width = "750px";
const height = "800px";
const pageSettings = {
// Sets the BoundaryConstraints to page
boundaryConstraints: 'Page',
background: {
color: 'grey'
},
width: 400,
height: 400,
showPageBreaks: true,
}
</script>
<style>
@import "../node_modules/@syncfusion/ej2-vue-diagrams/styles/material.css";
</style>
<template>
<div id="app">
<ejs-diagram id="diagram" :width='width' :height='height' :nodes='nodes'
:connectors='connectors' :pageSettings='pageSettings'></ejs-diagram>
</div>
</template>
<script>
import { DiagramComponent } from '@syncfusion/ej2-vue-diagrams';
let connectors = [{
id: 'connector1',
sourcePoint: {
x: 300,
y: 100
},
targetPoint: {
x: 400,
y: 100
}
}];
let nodes = [
{
id: 'node1',
width: 150,
height: 100,
offsetX: 100,
offsetY: 100,
},
{
id: 'node2',
width: 80,
height: 130,
offsetX: 200,
offsetY: 200,
},
{
id: 'node3',
width: 100,
height: 75,
offsetX: 300,
offsetY: 350,
}
]
export default {
name: "App",
components: {
"ejs-diagram": DiagramComponent
},
data() {
return {
width: "100%",
height: "800px",
nodes: nodes,
connectors: connectors,
pageSettings: {
// Sets the BoundaryConstraints to page
boundaryConstraints: 'Page',
background: {
color: 'grey'
},
width: 400,
height: 400,
showPageBreaks: true,
}
}
}
}
</script>
<style>
@import "../node_modules/@syncfusion/ej2-vue-diagrams/styles/material.css";
</style>
Fit options
The fitOptions
in page settings control how diagram content is fitted within the diagram page. The canFit
property within fitOptions centers the content within the viewport during diagram rendering. Additionally, the region
property specifies whether to fit the page or the content to the center of the viewport. Choosing CustomBounds for the region
allows fitting custom bounds within the diagram by defining them in the customBounds
property of fitOptions. The canZoomIn
property enables zooming in to fit smaller content within the viewport. Additionally, the margin
property defines the space around the fitted content within the viewport, while the mode
property sets the fitting mode, typically defaulting to ‘Page’ but also offering options like ‘Width’ and ‘Height’ for specific dimension constraints.
The following example demonstrates how fitOptions are utilized in diagram page settings.
<template>
<div id="app">
<ejs-diagram id="diagram" :width='width' :height='height' :nodes='nodes'
:pageSettings='pageSettings'></ejs-diagram>
</div>
</template>
<script setup>
import { DiagramComponent as EjsDiagram } from '@syncfusion/ej2-vue-diagrams';
const nodes = [
{
id: 'node1',
width: 100,
height: 100,
offsetX: 200,
offsetY: 200,
annotations: [{ content: 'Node fits at the center of view port' }],
}
]
const width = "750px";
const height = "800px";
const pageSettings = {
background: {
color: 'grey'
},
width: 500,
height: 500,
fitOptions: {
// Fits the content to the center of the viewport
canFit: true,
// Allows zooming in to fit smaller content
canZoomIn: true,
// Specifies the region to fit to the center
region: 'Content',
// Specifies the mode of fitOptions
mode: 'Page',
// Defines the margin around the fitted content
margin: { left: 50, right: 50, top: 50, bottom: 50 },
},
}
</script>
<style>
@import "../node_modules/@syncfusion/ej2-vue-diagrams/styles/material.css";
</style>
<template>
<div id="app">
<ejs-diagram id="diagram" :width='width' :height='height' :nodes='nodes'
:connectors='connectors' :pageSettings='pageSettings'></ejs-diagram>
</div>
</template>
<script>
import { DiagramComponent } from '@syncfusion/ej2-vue-diagrams';
let connectors = [{
id: 'connector1',
sourcePoint: {
x: 300,
y: 100
},
targetPoint: {
x: 400,
y: 100
}
}];
let nodes = [
{
id: 'node1',
width: 150,
height: 100,
offsetX: 100,
offsetY: 100,
},
{
id: 'node2',
width: 80,
height: 130,
offsetX: 200,
offsetY: 200,
},
{
id: 'node3',
width: 100,
height: 75,
offsetX: 300,
offsetY: 350,
}
]
export default {
name: "App",
components: {
"ejs-diagram": DiagramComponent
},
data() {
return {
width: "100%",
height: "800px",
nodes: nodes,
connectors: connectors,
pageSettings: {
// Sets the BoundaryConstraints to page
boundaryConstraints: 'Page',
background: {
color: 'grey'
},
width: 400,
height: 400,
showPageBreaks: true,
}
}
}
}
</script>
<style>
@import "../node_modules/@syncfusion/ej2-vue-diagrams/styles/material.css";
</style>