Export in Angular Diagram Component

25 Aug 202524 minutes to read

The Angular Diagram component provides comprehensive support for exporting diagram content as image files (JPG, PNG) or vector graphics (SVG). This functionality enables users to save diagrams for documentation, presentations, or further processing. The exportDiagram method serves as the primary interface for all export operations.

NOTE

To export diagrams, inject PrintAndExport in the diagram component.

To print and export the diagram in Angular, refer to the below video link.

Basic Export Example

The following code demonstrates a simple diagram export operation:

import { IExportOptions } from '@syncfusion/ej2-diagrams';

public options: IExportOptions;
this.options = {};
this.options.mode = 'Download';
this.diagram.exportDiagram(this.options);

Export Configuration Options

The diagram component supports extensive customization through the exportOptions interface. The following table details all available configuration properties:

Name Type Description
bounds object Defines specific bounds for CustomBounds region export
region enum Specifies the diagram area to export (PageSettings, Content, or CustomBounds)
fileName string Sets the exported file name (default: “Diagram”)
format string Defines export format (JPG, PNG, or SVG)
mode string Controls export behavior (Download or Data)
margin object Adds spacing around the exported content
stretch enum Adjusts aspect ratio and image quality of exported content
multiplePage boolean Enables multi-page export for large diagrams
pageWidth number Sets page width for multi-page exports
pageHeight number Sets page height for multi-page exports
pageOrientation enum Controls page orientation (Portrait or Landscape)

File Name Configuration

The fileName property specifies the name for downloaded files. When not specified, the default name “Diagram” is used.

Export Formats

The format property determines the output file type. The component supports three formats with distinct characteristics:

  • JPG: Compressed format suitable for photographs and complex diagrams with many colors
  • PNG: Lossless format ideal for diagrams with transparency or sharp edges
  • SVG: Vector format that maintains quality at any scale and supports text selection

The default export format is JPG. The following example shows format specification:

import { Component, ViewEncapsulation, OnInit, ViewChild } from '@angular/core';
import { Diagram, NodeModel, PrintAndExport, DiagramComponent, SnapConstraints, DiagramModule,
  FileFormats, IExportOptions, SnapSettingsModel } from '@syncfusion/ej2-angular-diagrams';

Diagram.Inject(PrintAndExport);

@Component({
  selector: 'app-container',

  template: `
    <select id="format" (change)="onExportFormatChange($event)">
      <option value="JPG">JPG</option>
      <option value="PNG">PNG</option>
      <option value="SVG">SVG</option>
    </select>
    <ejs-diagram #diagram id="diagram" width="100%" height="580px"
    [nodes]='nodes' [snapSettings]="snapSettings"></ejs-diagram> `,

  encapsulation: ViewEncapsulation.None,
  standalone: true,
  imports: [DiagramModule],
})

export class AppComponent implements OnInit {
  @ViewChild('diagram')
  public diagram!: DiagramComponent;

  public nodes: NodeModel[] = [];
  public snapSettings!: SnapSettingsModel;
  public exportOptions!: IExportOptions;

  ngOnInit() {
    // Initialize nodes
    this.nodes = [
      {
        id: 'node1',
        width: 100,
        height: 50,
        offsetX: 100,
        offsetY: 100,
        style: { strokeColor: '#868686', fill: '#d5f5d5' },
        annotations: [{ content: 'Node 1' }],
      },
      {
        id: 'node2',
        width: 100,
        height: 75,
        offsetX: 100,
        offsetY: 225,
        shape: { type: 'Basic', shape: 'Diamond' },
        style: { strokeColor: '#8f908f', fill: '#e2f3fa' },
        annotations: [{ content: 'Node 2' }],
      },
    ];

    this.snapSettings = { constraints: SnapConstraints.None };
  }

  onExportFormatChange(event: Event) {
    const selectedFormat = (event.target as HTMLSelectElement).value as FileFormats;
    this.exportOptions = {
      format: selectedFormat,
      fileName: 'Export',
    };
    this.diagram.exportDiagram(this.exportOptions);
  }
}
import { bootstrapApplication } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import 'zone.js';
bootstrapApplication(AppComponent).catch((err) => console.error(err));

Margin Configuration

The margin property adds whitespace around the exported diagram content. This spacing improves presentation and prevents content from appearing cramped.

import { Component, ViewEncapsulation, OnInit, ViewChild } from '@angular/core';
import { Diagram, NodeModel, PrintAndExport, DiagramComponent, SnapConstraints,
  DiagramModule, IExportOptions, SnapSettingsModel } from '@syncfusion/ej2-angular-diagrams';

Diagram.Inject(PrintAndExport);

@Component({
  selector: 'app-container',

  template: `
    <button id="export" (click)="exportDiagram()">Export</button>
    <ejs-diagram #diagram id="diagram" width="100%" height="580px" [nodes]='nodes'
    [snapSettings]="snapSettings"></ejs-diagram> `,

  encapsulation: ViewEncapsulation.None,
  standalone: true,
  imports: [DiagramModule], 
})

export class AppComponent implements OnInit {
  @ViewChild('diagram')
  public diagram!: DiagramComponent;

  public nodes: NodeModel[] = [];
  public snapSettings: SnapSettingsModel = {};
  
  ngOnInit() {
    // Initialize nodes
    this.nodes = [
      {
        id: 'node1',
        width: 100,
        height: 50,
        offsetX: 100,
        offsetY: 100,
        style: { strokeColor: '#868686', fill: '#d5f5d5' },
        annotations: [{ content: 'Node 1' }],
      },
      {
        id: 'node2',
        width: 100,
        height: 75,
        offsetX: 100,
        offsetY: 225,
        shape: { type: 'Basic', shape: 'Diamond' },
        style: { strokeColor: '#8f908f', fill: '#e2f3fa' },
        annotations: [{ content: 'Node 2' }],
      },
    ];

    this.snapSettings = { constraints: SnapConstraints.None };
  }

  exportDiagram() {
    const exportOptions: IExportOptions = {};
      exportOptions.margin = { left: 100, top: 100, bottom: 100, right: 100 }
    this.diagram.exportDiagram(exportOptions);
  }
}
import { bootstrapApplication } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import 'zone.js';
bootstrapApplication(AppComponent).catch((err) => console.error(err));

Export Modes

The mode property controls how the exported content is delivered:

  • Download: Automatically downloads the diagram as a file to the user’s device
  • Data: Returns a base64 string representation for programmatic processing

The Data mode is useful for applications that need to process or transmit the exported content programmatically:

import { IExportOptions } from '@syncfusion/ej2-diagrams';

public options: IExportOptions;
this.options = {};
this.options.mode = 'Data';
this.options.margin = { left: 10, right: 10, top: 10, bottom: 10};
this.options.fileName = 'format';
this.options.format = 'SVG';
let base64data = this.diagram.exportDiagram(this.options);

Region-Based Export

The region property defines which portion of the diagram to export:

Region Description
PageSettings Exports based on the configured page dimensions and settings
Content Exports only the visible diagram elements, excluding empty space
CustomBounds Exports a user-defined rectangular area

The following example demonstrates different region export options:

import { Component, ViewEncapsulation, OnInit, ViewChild } from '@angular/core';
import { Diagram, NodeModel, PrintAndExport, DiagramComponent, SnapConstraints, DiagramModule,
  IExportOptions, SnapSettingsModel, DiagramRegions, Rect } from '@syncfusion/ej2-angular-diagrams';

Diagram.Inject(PrintAndExport);

@Component({
  selector: 'app-container',

  template: `
  <button (click)="exportDiagram(regionSelect.value)">Export</button>
  <label for="Region"> Region: </label>
    <select #regionSelect>
        <option value="Content">Content</option>
        <option value="PageSettings">PageSettings</option>
        <option value="CustomBounds">Custom Bounds</option>
    </select>
    <ejs-diagram #diagram id="diagram" width="100%" height="580px" [nodes]='nodes'
    [snapSettings]='snapSettings'></ejs-diagram> `,

  encapsulation: ViewEncapsulation.None,
  standalone: true,
  imports: [DiagramModule],
})
export class AppComponent implements OnInit {
  @ViewChild('diagram')
  public diagram!: DiagramComponent;

  public nodes: NodeModel[] = [];
  public snapSettings: SnapSettingsModel = {};

  ngOnInit() {
    // Initialize nodes
    this.nodes = [
      {
        id: 'node1',
        width: 100,
        height: 50,
        offsetX: 100,
        offsetY: 100,
        style: { strokeColor: '#868686', fill: '#d5f5d5' },
        annotations: [{ content: 'Node 1' }],
      },
      {
        id: 'node2',
        width: 100,
        height: 75,
        offsetX: 100,
        offsetY: 225,
        shape: { type: 'Basic', shape: 'Diamond' },
        style: { strokeColor: '#8f908f', fill: '#e2f3fa' },
        annotations: [{ content: 'Node 2' }],
      },
    ];

    this.snapSettings = { constraints: SnapConstraints.None };
  }

  exportDiagram(region: string) {
    // Sets the region for the exported image.
    const exportOptions: IExportOptions = {}
    exportOptions.region = region as DiagramRegions;
    if (region === 'CustomBounds') {
      exportOptions.bounds = new Rect(0, 0, 300, 300);
    } else if (region === 'Content') {
      this.diagram.pageSettings = {};
    } else {
      this.diagram.pageSettings = { width: 500, height: 500 };
    }
    this.diagram.exportDiagram(exportOptions);
  }
  
}
import { bootstrapApplication } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import 'zone.js';
bootstrapApplication(AppComponent).catch((err) => console.error(err));

NOTE

When using CustomBounds region, the bounds property must be defined to specify the export area coordinates.

Multi-Page Export

For large diagrams that exceed standard page dimensions, the multiplePage option enables export across multiple pages:

  • false (default): Export as a single image regardless of size
  • true: Split the diagram across multiple pages based on specified dimensions

The following example shows multi-page export configuration:

import { Component, ViewEncapsulation, OnInit, ViewChild } from '@angular/core';
import { Diagram, NodeModel, PrintAndExport, DiagramComponent, SnapConstraints, DiagramModule,
  IExportOptions, SnapSettingsModel, PageSettingsModel } from '@syncfusion/ej2-angular-diagrams';

Diagram.Inject(PrintAndExport);

@Component({
  selector: 'app-container',

  template: `
  <button (click)="exportDiagram()">Export</button>
    <ejs-diagram #diagram id="diagram" width="100%" height="580px" [nodes]='nodes'
    [snapSettings]='snapSettings' [pageSettings]='pageSettings'></ejs-diagram> `,

  encapsulation: ViewEncapsulation.None,
  standalone: true,
  imports: [DiagramModule],
})

export class AppComponent implements OnInit {
  @ViewChild('diagram')
  public diagram!: DiagramComponent;

  public nodes: NodeModel[] = [];
  public snapSettings: SnapSettingsModel = {};
  public pageSettings: PageSettingsModel = {};

  ngOnInit() {
    // Initialize nodes
    this.nodes = [
      {
        id: 'node1',
        width: 100,
        height: 50,
        offsetX: 100,
        offsetY: 100,
        style: { strokeColor: '#868686', fill: '#d5f5d5' },
        annotations: [{ content: 'Node 1' }],
      },
      {
        id: 'node2',
        width: 100,
        height: 75,
        offsetX: 500,
        offsetY: 100,
        shape: { type: 'Basic', shape: 'Diamond' },
        style: { strokeColor: '#8f908f', fill: '#e2f3fa' },
        annotations: [{ content: 'Node 2' }],
      },
    ];

    this.snapSettings = { constraints: SnapConstraints.None };
    this.pageSettings = { width: 400, height: 300, showPageBreaks: true,
      multiplePage: true };
  }

  exportDiagram() {
    const exportOptions: IExportOptions = {};
    //Sets the multiple page as true for exporting image.
    exportOptions.multiplePage = true;
    exportOptions.region = 'PageSettings';
    this.diagram.exportDiagram(exportOptions);
  }
}
import { bootstrapApplication } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import 'zone.js';
bootstrapApplication(AppComponent).catch((err) => console.error(err));

Direct Image Export

The exportImage method allows direct export of base64 image data without requiring a diagram instance. This method is useful for processing pre-existing image data.

import { Component, ViewEncapsulation, OnInit, ViewChild } from '@angular/core';
import { Diagram, PrintAndExport, DiagramComponent, DiagramModule, IExportOptions, Rect } from '@syncfusion/ej2-angular-diagrams';

Diagram.Inject(PrintAndExport);

@Component({
  selector: 'app-container',

  template: `
  <button (click)="exportDiagram()">Export</button>
    <ejs-diagram #diagram id="diagram" width="100%" height="580px"></ejs-diagram> `,

  encapsulation: ViewEncapsulation.None,
  standalone: true,
  imports: [DiagramModule],
})
export class AppComponent implements OnInit {
  @ViewChild('diagram')
  public diagram!: DiagramComponent;

  ngOnInit() {
    // Initialize nodes
  }

  exportDiagram() {
    const exportOptions: IExportOptions = {};

    //Base64 data
    const base64 =
      'data:image/png;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/4gHYSUNDX1BST0ZJTEUAAQEAAAHIAAAAAAQwAABtbnRyUkdCIFhZWiAAAAAAAAAAAAAAAABhY3NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlkZXNjAAAA8AAAACRyWFlaAAABFAAAABRnWFlaAAABKAAAABRiWFlaAAABPAAAABR3dHB0AAABUAAAABRyVFJDAAABZAAAAChnVFJDAAABZAAAAChiVFJDAAABZAAAAChjcHJ0AAABjAAAADxtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAAgAAAAcAHMAUgBHAEJYWVogAAAAAAAAb6IAADj1AAADkFhZWiAAAAAAAABimQAAt4UAABjaWFlaIAAAAAAAACSgAAAPhAAAts9YWVogAAAAAAAA9tYAAQAAAADTLXBhcmEAAAAAAAQAAAACZmYAAPKnAAANWQAAE9AAAApbAAAAAAAAAABtbHVjAAAAAAAAAAEAAAAMZW5VUwAAACAAAAAcAEcAbwBvAGcAbABlACAASQBuAGMALgAgADIAMAAxADb/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAKrB4ADASIAAhEBAxEB/8QAHgABAAMBAQEBAQEBAAAAAAAAAAcICgkGAQUEAwL/xAA9EAEAAAYCAAIFCAsAAgIDAAAAAgMEBQYHAQgJeDc4V7fWFhk5WHeXmLYRExQVFxghlZbT1RIiCjEkQYH/xAAdAQEAAQUBAQEAAAAAAAAAAAAABwMEBQYIAgkB/8QASREBAAICAQEDAg4OCwEBAQAAAAIDAQQFEQYSEwchFBYXMTM0NjdRVXN0lNQiI1NUVmGRk7KztLXS0wgVMkFScZKVsdHwJCVC/9oADAMBAAIRAxEAPwDfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/2Q==';
    (exportOptions.pageWidth = 1000),
    (exportOptions.pageHeight = 800),
    (exportOptions.bounds = new Rect(0, 0, 800, 800));
    
    this.diagram.exportImage(base64, exportOptions);
  }
  
}
import { bootstrapApplication } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import 'zone.js';
bootstrapApplication(AppComponent).catch((err) => console.error(err));

Diagram Content Retrieval

The getDiagramContent method retrieves the HTML representation of the diagram at runtime. This functionality supports dynamic content analysis and processing.

import { Component, ViewEncapsulation, OnInit, ViewChild } from '@angular/core';
import { Diagram, NodeModel, PrintAndExport, DiagramComponent, DiagramModule } from '@syncfusion/ej2-angular-diagrams';

Diagram.Inject(PrintAndExport);

@Component({
  selector: 'app-container',

  template: `
  <button (click)="getDiagramContent()">DiagramContent</button>
    <ejs-diagram #diagram id="diagram" width="100%" height="580px" [nodes]="nodes"></ejs-diagram> `,

  encapsulation: ViewEncapsulation.None,
  standalone: true,
  imports: [DiagramModule],
})

export class AppComponent implements OnInit {
  @ViewChild('diagram')
  public diagram!: DiagramComponent;

  public nodes: NodeModel[] = [];

  ngOnInit() {
    // Initialize nodes
    this.nodes = [
      {
        id: 'node1',
        width: 100,
        height: 100,
        offsetX: 200,
        offsetY: 100,
        style: { strokeColor: '#6BA5D7', fill: '#6BA5D7' },
        annotations: [{ content: 'Node 1' }],
      },
    ];
  }

  getDiagramContent() {
    /**
     * parameter (Optional) -  defines the collection of style files to be considered while exporting.
     */
    const content = this.diagram.getDiagramContent();
    console.log(content);
  }
  
}
import { bootstrapApplication } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import 'zone.js';
bootstrapApplication(AppComponent).catch((err) => console.error(err));

Stretch Option for Enhanced Quality

The stretch property improves exported image quality by adjusting the aspect ratio. Images exported with stretch enabled are clearer but result in larger file sizes.

import { IExportOptions } from '@syncfusion/ej2-diagrams';

public options: IExportOptions;
this.options = {};
this.options.mode = 'Download';
this.options.margin = { left: 10, right: 10, top: 10, bottom: 10};
this.options.fileName = 'region';
this.options.format = 'SVG';
this.options.region = 'Content';
this.options.stretch = 'Stretch';
this.diagram.exportDiagram(this.options);

Export Limitations

The standard export functionality does not support diagrams containing native HTML nodes or HTML templates. For these scenarios, specialized handling is required using the Syncfusion Essential PDF library with the HTML converter component. This converter uses the Blink rendering engine to transform HTML content into exportable images.

For detailed implementation guidance with HTML and native nodes, refer to the export HTML and Native node knowledge base article.