/// <reference types="node" />
import { Readable } from 'stream';
import { ModuleMetadata, FactoryProvider } from '@nestjs/common/interfaces';
import { Type } from '@nestjs/common';
import { Options as JuiceOptions } from 'juice';
import { Observable, SchedulerLike } from 'rxjs';
import { CreateOptions, FileInfo } from 'html-pdf';
export declare type engine = 'arc-templates' | 'atpl' | 'bracket' | 'dot' | 'dust' | 'eco' | 'ejs' | 'ect' | 'haml' | 'haml-coffee' | 'hamlet' | 'handlebars' | 'hogan' | 'htmling' | 'jade' | 'jazz' | 'jqtpl' | 'just' | 'liquid' | 'liquor' | 'lodash' | 'marko' | 'mote' | 'mustache' | 'nunjucks' | 'plates' | 'pug' | 'qejs' | 'ractive' | 'razor' | 'react' | 'slm' | 'squirrelly' | 'swig' | 'teacup' | 'templayed' | 'toffee' | 'twig' | 'underscore' | 'vash' | 'velocityjs' | 'walrus' | 'whiskers';
declare type ViewEngineOptions = {
    cache: boolean;
    [options: string]: any;
};
export interface PDFModuleOptions {
    view: ViewOptions;
    juice?: JuiceOptions;
}
export interface PDFModuleRegisterOptions extends PDFModuleOptions {
    isGlobal?: boolean;
}
export interface PDFOptionsFactory {
    createPdfOptions(): PDFModuleOptions;
}
export interface PDFModuleRegisterAsyncOptions extends Pick<ModuleMetadata, 'imports'> {
    isGlobal?: boolean;
    useClass?: Type<PDFOptionsFactory>;
    useExisting?: Type<PDFOptionsFactory>;
    useFactory?: (...args: any[]) => PDFModuleOptions;
    inject?: Extract<FactoryProvider, 'inject'>;
}
export interface ViewOptions {
    root: string;
    engine: engine;
    extension?: string;
    engineOptions?: ViewEngineOptions;
}
export interface ViewPortSize {
    width?: number;
    height?: number;
}
export interface PDFOptions extends CreateOptions {
    orientation?: 'portrait' | 'landscape' | undefined;
    border?: string | {
        top?: string | undefined;
        right?: string | undefined;
        bottom?: string | undefined;
        left?: string | undefined;
    } | undefined;
    header?: {
        height?: string | undefined;
        contents?: string | undefined;
    } | undefined;
    footer?: {
        height?: string | undefined;
        contents?: {
            first?: string | undefined;
            [page: number]: string;
            default?: string | undefined;
            last?: string | undefined;
        } | undefined;
    } | undefined;
    viewportSize?: ViewPortSize;
    locals?: Record<string, any>;
}
export interface PDF {
    toFile(template: string, filename?: string, options?: PDFOptions, scheduler?: SchedulerLike): Observable<FileInfo>;
    toStream(template: string, options?: PDFOptions, scheduler?: SchedulerLike): Observable<Readable>;
    toBuffer(template: string, options?: PDFOptions, scheduler?: SchedulerLike): Observable<Buffer>;
}
export { ViewEngineOptions, JuiceOptions };
