Skip to main content

VisioPageContent

VisioPageContent gives access to all instances of VisioShapes and VisioConnects present on the given page, as well exposes an API useful in converting page contents to JointJS Cells using pageContent.toGraphCells([,opt]) method.

To work with page content, modifying shapes etc., loading VisioPageContent is always the first step. Provided API allows fetching any kind of entity that is part of the page content.

Methods

getConnect()

visioPageContent.getConnect(shapeId: number): VisioConnect | null;

Return a VisioConnect associated with the provided shapeId. If no such shape exists, return undefined.

As VisioConnect contains connection metadata, it always points to the actual VisioShape that is a visual representation of the connection.

getConnects()

visioPageContent.getConnects(): VisioConnect[];

Return all VisioConnects present in the page content.

getElementShapes()

visioPageContent.getElementShapes(): VisioShape[];

Return all VisioShape's that would be identified as Element in JointJS.

getFonts()

visioPageContent.getFonts(): string[];

Return an array of fonts used by shapes on the page. If no fonts are defined, return an empty array.

getForeignShape()

visioPageContent.getForeignShape(archivePath: string): VisioShape | null;

Return VisioShape considered foreign (i.e. image), with the given path within the VisioArchive document. If there is no shape for the given path, method will return undefined

getForeignShapes()

visioPageContent.getForeignShapes(): VisioShape[];

Return all VisioShapes considered foreign (i.e. images) from the page content.

getLinkShapes()

visioPageContent.getLinkShapes(): VisioShape[];

Return all VisioShape's that would be identified as Link in JointJS.

getRootShape()

visioPageContent.getRootShape(id: number): VisioShape | null;

Return a top-level VisioShape with the given id from the page content. Return undefined if shape does not exist or is not a root shape.

getRootShapes()

visioPageContent.getRootShapes(): VisioShape[];

Return all top-level VisioShape instances from the page content. Omit all the sub-shapes.

getShape()

visioPageContent.getShape(id: number): VisioShape | null;

Return a VisioShape with the given id.

getShapes()

visioPageContent.getShapes(): VisioShape[];

Return all VisioShape instances from the page content.

getUnsupportedFonts()

visioPageContent.getUnsupportedFonts(): string[];

Return an array of fonts that are used by shapes on the page, however are not supported by the application. If all fonts are supported, return an empty array.

toGraphCells()

visioPageContent.toGraphCells(options?: VisioPageContent.ToGraphCellsAttributes): dia.Cell[];

Method used to convert contents of a Visio project page to JointJS Graph Cells. Its main usage is in the import process of a vsdx file into a JointJS application.

The toGraphCells([,opt]) method takes an object opt with the following parameters:

interface ToGraphCellsAttributes {
ignoreNonPrinting?: boolean;
ignoreSubShapeConnects?: boolean;
importShape?: (shape: VisioShape) => dia.Element | null;
importConnect?: (connect: VisioConnect, sourceElement: dia.Element, targetElement: dia.Element) => dia.Link | null;
importLabels?: (shape: VisioShape, link: dia.Link) => dia.Element[] | void;
importImage?: (shape: VisioShape, element: dia.Element, image: VisioImageObject) => any[] | void;
onImagesLoad?: (images: any[]) => void;
}

ignoreNonPrinting

Control if shapes marked in Visio project as nonPrinting should be taken into account during import or not. It defaults to true.

ignoreSubShapeConnects

Control if connections originating from or targeting nested shapes should be imported or not. It defaults to true.

importShape

For each:

importShape: (vsdShape) => {
let element;
// .. perform logic creating an Element
// using the vsdShape as the source of information

return element;
}

importConnect

importConnect: (vsdConnect, sourceElement, targetElement) => {
let link;
// .. perform logic creating a Link from vsdConnect

return link;
}

importLabels

If VisioShape identified as a connection contains a text, it is considered a label for that connection. If this function is not used, the default converter will be used to create link labels.

Labels can be handled using importLabels function, which is passed vsdShape and link, and expects an array of label dia.Elements to be returned. If no new elements are being created for the links (i.e. we append labels to link directly), the function does not have to return anything.

importLabels: (vsdShape, link) => {
const data = vsdShape.getSection(VisioSectionType.Property);
const name = data.getProperty('BpmnName');
if (name) {
link.appendLabel({
attrs: {
body: {
fill: '#F4F7F6'
},
label: {
text: name,
fontWeight: 'bold',
fontSize: 10
}
},
position: 0.5
});
}
}

importImage

Foreign shapes, i.e. images, can be handled separately with importImage function. The function is passed vsdShape, element, vsdImage. Function can be used i.e. to set xlinkHref attribute on an element.

importImage: (vsdShape, element, image) => {
element.attr('image/xlinkHref', image.base64);
}

onImagesLoad

Although toGraphCells is run synchronously, images take time to load. To catch the moment where all images are ready, onImageLoad callback can be used. Callback function is passed the images collection.

onImagesLoad: (images) => {
// i.e. finish preloading
}

A full example of usage can be found in the Visio BPMN import application.

Types

ToGraphCellsAttributes

interface ToGraphCellsAttributes {
ignoreNonPrinting?: boolean;
ignoreSubShapeConnects?: boolean;
importShape?: (shape: VisioShape) => dia.Element | null;
importConnect?: (connect: VisioConnect, sourceElement: dia.Element, targetElement: dia.Element) => dia.Link | null;
importLabels?: (shape: VisioShape, link: dia.Link) => dia.Element[] | void;
importImage?: (shape: VisioShape, element: dia.Element, image: VisioImageObject) => any[] | void;
onImagesLoad?: (images: any[]) => void;
}