NestJS + JsReport
yarn add https://github.com/moofoo/nest-js-report
import { Module } from '@nestjs/common' ;
import { AppController } from './app.controller' ;
import { AppService } from './app.service' ;
import { JsReportModule } from 'nest-js-report' ;
@Module ( {
imports : [
JsReportModule . forRoot ( {
engines : [ 'handlebars' ] ,
recipes : [ 'docx' ] ,
extensions : [ 'unoconv' ] ,
} ) ,
] ,
controllers : [ AppController ] ,
providers : [ AppService ] ,
} )
export class AppModule { }
src/reports/reports.module.ts
import { Module } from '@nestjs/common' ;
import { JsReportModule } from 'nest-js-report' ;
import { ReportsController } from './reports.controller' ;
@Module ( {
imports : [
JsReportModule . registerTemplate ( {
folder : __dirname ,
name : 'invoice' ,
template : {
engine : 'handlebars' ,
recipe : 'docx' ,
docx : { templateAsset : { content : 'invoice/template.docx' } } ,
} ,
} ) ,
] ,
controllers : [ ReportsController ] ,
} )
export class ReportsModule { }
src/reports/reports.controller.ts
import { Controller , Get , Res } from '@nestjs/common' ;
import { InjectJsrTemplate , JsReportTemplateService } from 'nest-js-report' ;
import { Response } from 'express' ;
import invoiceData from './invoice/data.json' ;
@Controller ( )
export class ReportsController {
constructor (
@InjectJsrTemplate ( 'invoice' ) readonly invoice :JsReportTemplateService
)
@Get ( '/invoice' )
async getInvoice ( @Res ( { passthrough : true } ) res : Response ) {
return this . invoice . streamFile ( res , invoiceData )
}
}