survey-pdf
Version:
A UI component that uses SurveyJS form JSON schemas to render forms as PDF documents. It populates PDF fields with data collected using SurveyJS Form Library and lets you export your SurveyJS forms as editable or pre-filled PDFs.
142 lines (141 loc) • 8.36 kB
TypeScript
import { IQuestion, Question, QuestionRatingModel, QuestionFileModel, LocalizableString } from 'survey-core';
import { SurveyPDF } from './survey';
import { IPoint, IRect, ISize, DocController } from './doc_controller';
import { IHTMLRenderType } from './flat_layout/flat_html';
import { IPdfBrick, PdfBrick } from './pdf_render/pdf_brick';
import { CompositeBrick } from './pdf_render/pdf_composite';
import { ITextFieldBrickOptions } from './pdf_render/pdf_textfield';
export type IBorderDescription = IRect & ISize & Pick<PdfBrick, 'formBorderColor'> & {
rounded?: boolean;
dashStyle?: {
dashArray: [number, number] | [number];
dashPhase: number;
};
outside?: boolean;
};
export declare class SurveyHelper {
static EPSILON: number;
static TITLE_SURVEY_FONT_SIZE_SCALE: number;
static TITLE_PAGE_FONT_SIZE_SCALE: number;
static TITLE_PANEL_FONT_SIZE_SCALE: number;
static DESCRIPTION_FONT_SIZE_SCALE: number;
static OTHER_ROWS_COUNT: number;
static RATING_MIN_WIDTH: number;
static RATING_MIN_HEIGHT: number;
static RATING_COLUMN_WIDTH: number;
static MATRIX_COLUMN_WIDTH: number;
static IMAGEPICKER_COUNT: number;
static IMAGEPICKER_RATIO: number;
static MULTIPLETEXT_TEXT_PERS: number;
static HTML_TAIL_TEXT_SCALE: number;
static SELECT_ITEM_FLAT_SCALE: number;
static GAP_BETWEEN_ROWS: number;
static GAP_BETWEEN_COLUMNS: number;
static GAP_BETWEEN_ITEM_TEXT: number;
static FORM_BORDER_VISIBLE: boolean;
static BORDER_SCALE: number;
static VISIBLE_BORDER_SCALE: number;
static UNVISIBLE_BORDER_SCALE: number;
static RADIUS_SCALE: number;
static TITLE_FONT_SCALE: number;
static VALUE_READONLY_PADDING_SCALE: number;
static HTML_TO_IMAGE_QUALITY: number;
static FORM_BORDER_COLOR: string;
static TEXT_COLOR: string;
static BACKGROUND_COLOR: string;
static TITLE_LOCATION_MATRIX: string;
static STANDARD_FONT: string;
static CUSTOM_FONT_ENCODING: string;
static parseWidth(width: string, maxWidth: number, columnsCount?: number, defaultUnit?: string): number;
static pxToPt(value: number | string): number;
static mergeRects(...rects: IRect[]): IRect;
static createPoint(rect: IRect, isLeft?: boolean, isTop?: boolean): IPoint;
static createRect(point: IPoint, width: number, height: number): IRect;
static createHeaderRect(controller: DocController): IRect;
static createFooterRect(controller: DocController): IRect;
static chooseHtmlFont(controller: DocController): string;
static generateCssTextRule(fontSize: number, fontStyle: string, fontName: string): string;
static createHtmlContainerBlock(html: string, controller: DocController, renderAs: IHTMLRenderType): string;
static splitHtmlRect(controller: DocController, htmlBrick: IPdfBrick): IPdfBrick;
static createPlainTextFlat<T extends IPdfBrick>(point: IPoint, question: IQuestion, controller: DocController, text: string, fabric: new (question: IQuestion, controller: DocController, rect: IRect, text: string) => T): CompositeBrick;
static createTextFlat<T extends IPdfBrick>(point: IPoint, question: IQuestion, controller: DocController, text: string | LocalizableString, fabric: new (question: IQuestion, controller: DocController, rect: IRect, text: string) => T): Promise<IPdfBrick>;
private static hasHtml;
private static getHtmlMargins;
static createHTMLRect(point: IPoint, controller: DocController, margins: {
top: number;
bottom: number;
width: number;
}, resultY: number): IRect;
static createHTMLFlat(point: IPoint, question: Question, controller: DocController, html: string): Promise<IPdfBrick>;
static generateFontFace(fontName: string, fontBase64: string, fontWeight: string): string;
static generateFontFaceWithItalicStyle(fontName: string, fontBase64: string, fontWeight: string): string;
static htmlToXml(html: string): string;
static createSvgContent(html: string, width: number, controller: DocController): {
svg: string;
divWidth: number;
divHeight: number;
};
private static setCanvas;
static htmlToImage(html: string, width: number, controller: DocController): Promise<{
url: string;
aspect: number;
}>;
static createBoldTextFlat(point: IPoint, question: Question, controller: DocController, text: string | LocalizableString): Promise<IPdfBrick>;
static createTitleFlat(point: IPoint, question: Question, controller: DocController): Promise<IPdfBrick>;
private static createTitleSurveyPanelFlat;
static createTitleSurveyFlat(point: IPoint, controller: DocController, text: string | LocalizableString): Promise<IPdfBrick>;
static createTitlePanelFlat(point: IPoint, controller: DocController, text: string | LocalizableString, isPage?: boolean): Promise<IPdfBrick>;
static createDescFlat(point: IPoint, question: IQuestion, controller: DocController, text: string | LocalizableString): Promise<IPdfBrick>;
static getReadonlyRenderAs(question: Question, controller: DocController): 'auto' | 'text' | 'acroform';
static createCommentFlat(point: IPoint, question: Question, controller: DocController, options: {
rows?: number;
} & ITextFieldBrickOptions): Promise<IPdfBrick>;
static get hasDocument(): boolean;
static createImageFlat(point: IPoint, question: any, controller: DocController, options: {
link: string;
width: number;
height: number;
objectFit?: 'cover' | 'contain' | 'fill';
}, applyImageFit?: boolean): Promise<IPdfBrick>;
static canPreviewImage(question: QuestionFileModel, item: {
name: string;
type: string;
content: string;
}, url: string): boolean;
static createRowlineFlat(point: IPoint, controller: DocController, width?: number, color?: string): IPdfBrick;
static createLinkFlat(point: IPoint, question: Question, controller: DocController, text: string, link: string): Promise<IPdfBrick>;
static createAcroformRect(rect: IRect): number[];
static createTextFieldRect(point: IPoint, controller: DocController, lines?: number): IRect;
static createReadOnlyTextFieldTextFlat(point: IPoint, controller: DocController, question: Question, value: string): Promise<IPdfBrick>;
static renderFlatBorders(controller: DocController, borderOptions: IBorderDescription): void;
static getLocString(text: LocalizableString): string;
static getContentQuestion(question: Question): Question;
static getContentQuestionTypeRenderAs(question: Question, survey: SurveyPDF): string;
static getContentQuestionType(question: Question, survey: SurveyPDF): string;
static getRatingMinWidth(controller: DocController): number;
static getRatingItemText(question: QuestionRatingModel, index: number, locText: LocalizableString): LocalizableString;
static getPageAvailableWidth(controller: DocController): number;
static getImagePickerAvailableWidth(controller: DocController): number;
static getColumnWidth(controller: DocController, colCount: number): number;
static setColumnMargins(controller: DocController, colCount: number, column: number): void;
static moveRect(rect: IRect, left?: number, top?: number): IRect;
static scaleRect(rect: IRect, scale: number): IRect;
static getBorderWidth(controller: DocController): number;
static formScale(controller: DocController, flat: ISize): number;
static generateQuestionFlats(survey: SurveyPDF, controller: DocController, question: Question, point: IPoint): Promise<IPdfBrick[]>;
static isFontExist(controller: DocController, fontName: string): boolean;
static isCustomFont(controller: DocController, fontName: string): boolean;
static fixFont(controller: DocController): void;
static clone(src: any): any;
static shouldRenderReadOnly(question: IQuestion, controller: DocController, readOnly?: boolean): boolean;
static isSizeEmpty(val: any): boolean;
static isHeightEmpty(val: any): boolean;
static getCorrectedImageSize(controller: DocController, imageOptions: {
imageWidth?: any;
imageHeight?: any;
imageLink: string;
defaultImageWidth?: any;
defaultImageHeight?: any;
}): Promise<ISize>;
static clear(): void;
}