Print in Angular Document editor component
26 Jun 202416 minutes to read
To print the document, use the print
method from document editor instance.
Refer to the following example for showing a document and print it.
import { NgModule } from '@angular/core'
import { BrowserModule } from '@angular/platform-browser'
import { ButtonModule } from '@syncfusion/ej2-angular-buttons'
import { DocumentEditorAllModule } from '@syncfusion/ej2-angular-documenteditor'
import { Component, ViewEncapsulation, ViewChild } from '@angular/core';
import {
DocumentEditorComponent, PrintService
} from '@syncfusion/ej2-angular-documenteditor';
@Component({
imports: [
ButtonModule,
DocumentEditorAllModule
],
standalone: true,
selector: 'app-container',
//specifies the template string for the Document Editor component
template: `<div>
<button ejs-button (click)="onPrint()" >Print</button>
<ejs-documenteditor #document_editor height="330px" style="display:block" [enablePrint]=true (created)="onCreated()"></ejs-documenteditor>
</div>`,
encapsulation: ViewEncapsulation.None,
providers: [PrintService]
})
export class AppComponent {
@ViewChild('document_editor')
public documentEditor?: DocumentEditorComponent;
onCreated(): void {
if ((this.documentEditor as DocumentEditorComponent).isDocumentLoaded) {
let sfdt: string = `{
"sections": [
{
"blocks": [
{
"inlines": [
{
"characterFormat": {
"bold": true,
"italic": true
},
"text": "Hello World"
}
]
}
],
"headersFooters": {
}
}
]
}`;
//Open the default document.
(this.documentEditor as DocumentEditorComponent).open(sfdt);
}
}
public onPrint(): void {
//Print the document content.
(this.documentEditor as DocumentEditorComponent).print();
}
}
import { bootstrapApplication } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import 'zone.js';
bootstrapApplication(AppComponent).catch((err) => console.error(err));
Refer to the following example for creating a document and print it.
import { NgModule } from '@angular/core'
import { BrowserModule } from '@angular/platform-browser'
import { ButtonModule } from '@syncfusion/ej2-angular-buttons'
import { DocumentEditorAllModule } from '@syncfusion/ej2-angular-documenteditor'
import { Component, ViewEncapsulation, ViewChild } from '@angular/core';
import {
DocumentEditorComponent, PrintService, SelectionService, EditorService, EditorHistoryService
} from '@syncfusion/ej2-angular-documenteditor';
@Component({
imports: [
ButtonModule,
DocumentEditorAllModule
],
standalone: true,
selector: 'app-container',
template: `<div>
<button ejs-button (click)="onPrint()" >Print</button>
<ejs-documenteditor #document_editor height="330px" style="display:block" [isReadOnly]=true [enableSelection]=true [enableEditor]=true [enablePrint]=true (created)="onCreated()"></ejs-documenteditor>
</div>`,
encapsulation: ViewEncapsulation.None,
providers: [PrintService, SelectionService, EditorService, EditorHistoryService]
})
export class AppComponent {
@ViewChild('document_editor')
public documentEditor?: DocumentEditorComponent;
onCreated(): void {
if ((this.documentEditor as DocumentEditorComponent).isDocumentLoaded) {
let sfdt: string = `{
"sections": [
{
"blocks": [
{
"inlines": [
{
"characterFormat": {
"bold": true,
"italic": true
},
"text": "Hello World"
}
]
}
],
"headersFooters": {
}
}
]
}`;
//Open the document content.
(this.documentEditor as DocumentEditorComponent).open(sfdt);
}
}
public onPrint(): void {
//Print the document content.
(this.documentEditor as DocumentEditorComponent).print();
}
}
import { bootstrapApplication } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import 'zone.js';
bootstrapApplication(AppComponent).catch((err) => console.error(err));
Improve print quality
Document editor provides an option to improve the print quality using printDevicePixelRatio
in Document editor settings. Document editor using canvas approach to render content. Then, canvas are converted to image and it process for print. Using printDevicePixelRatio API, you can increase the image quality based on your requirement.
The following example code illustrates how to improve the print quality in Document editor container.
import { Component, OnInit } from '@angular/core';
import { ToolbarService } from '@syncfusion/ej2-angular-documenteditor';
@Component({
selector: 'app-root',
// specifies the template string for the DocumentEditorContainer component
template: `<ejs-documenteditorcontainer id="container" serviceUrl="https://services.syncfusion.com/angular/production/api/documenteditor/" height="600px" style="display:block" [documentEditorSettings]= "settings" [enableToolbar]=true> </ejs-documenteditorcontainer>`,
providers: [ToolbarService]
})
export class AppComponent implements OnInit {
// Add required font families to list it in font drop down
public settings={printDevicePixelRatio :2};
ngOnInit(): void {
}
}
Note: By default, printDevicePixelRatio value is 1.
Print using window object
You can print the document in document editor by passing the window instance. This is useful to implement print in third party frameworks such as electron, where the window instance will not be available. Refer to the following example.
import { Component, ViewEncapsulation, ViewChild } from '@angular/core';
import {
DocumentEditorComponent, PrintService, SelectionService, EditorService, EditorHistoryService
} from '@syncfusion/ej2-angular-documenteditor';
@Component({
selector: 'app-container',
template: `<div>
<button ejs-button (click)="onPrint()" >Print</button>
<ejs-documenteditor #document_editor height="330px" style="display:block" [enablePrint]=true></ejs-documenteditor>
</div>`,
encapsulation: ViewEncapsulation.None,
providers: [PrintService]
})
export class AppComponent {
@ViewChild('document_editor')
public documentEditor: DocumentEditorComponent;
public onPrint(): void {
//Print the document content.
this.documentEditor.print(window);
}
}
Page setup
Some of the print options cannot be configured using JavaScript. Refer to the following links to learn more about the browser page setup:
However, you can customize margins, paper, and layout options by modifying the section format properties using page setup dialog
this.documentEditor.showPageSetupDialog();
By customizing margins, papers, and layouts, the layout of the document will be changed in document editor. To modify these options during print operation, serialize the document as SFDT using the serialize
method in document editor instance and open the SFDT data in another instance of document editor in separate window.
The following example shows how to customize layout options only for printing.
import { NgModule } from '@angular/core'
import { BrowserModule } from '@angular/platform-browser'
import { ButtonModule } from '@syncfusion/ej2-angular-buttons'
import { DocumentEditorAllModule } from '@syncfusion/ej2-angular-documenteditor'
import { Component, ViewEncapsulation, ViewChild } from '@angular/core';
import {
DocumentEditorComponent, PrintService, SelectionService, EditorService, EditorHistoryService, SfdtExportService
} from '@syncfusion/ej2-angular-documenteditor';
@Component({
imports: [
ButtonModule,
DocumentEditorAllModule
],
standalone: true,
selector: 'app-container',
//specifies the template string for the Document Editor component
template: `<div>
<button ejs-button (click)="onPrint()" >Print</button>
<ejs-documenteditor #document_editor height="330px" style="display:block" [isReadOnly]=false [enableSelection]=true [enableEditor]=true [enablePrint]=true [enableSfdtExport]=true></ejs-documenteditor>
<ejs-documenteditor #document_editor_preview height="330px" style="display:block" [isReadOnly]=false [enableSelection]=true [enableEditor]=true [enablePrint]=true [enableSfdtExport]=true></ejs-documenteditor>
</div>`,
encapsulation: ViewEncapsulation.None,
providers: [PrintService, SelectionService, EditorService, EditorHistoryService, SfdtExportService]
})
export class AppComponent {
@ViewChild('document_editor')
public documentEditor?: DocumentEditorComponent;
@ViewChild('document_editor_preview')
public documentEditorPreview?: DocumentEditorComponent;
public onPrint(): void {
let sfdtData = (this.documentEditor as DocumentEditorComponent).serialize();
//Open the document in preview document editor.
(this.documentEditorPreview as DocumentEditorComponent).open(sfdtData);
//Set A5 paper size
(this.documentEditorPreview as DocumentEditorComponent).selection.sectionFormat.pageWidth = 419.55;
(this.documentEditorPreview as DocumentEditorComponent).selection.sectionFormat.pageHeight = 595.30;
//Print the document content.
(this.documentEditorPreview as DocumentEditorComponent).print();
}
}
import { bootstrapApplication } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import 'zone.js';
bootstrapApplication(AppComponent).catch((err) => console.error(err));