pdf-tailwind-forms
Version:
TypeScript Node.js library for generating PDFs with AcroForms and TailwindCSS support
123 lines • 3.41 kB
TypeScript
import { PDFOptions } from "puppeteer";
export interface PDFGeneratorOptions {
tailwindCDN?: string;
puppeteerOptions?: any;
defaultFontSize?: number;
defaultBorderWidth?: number;
}
export interface Position {
x: number;
y: number;
width: number;
height: number;
pdfY?: number;
}
export interface BaseField {
name: string;
type: "text" | "checkbox" | "radio" | "dropdown" | "button" | "signature";
selector?: string;
position?: Position;
pageIndex?: number;
offsetX?: number;
offsetY?: number;
width?: number;
height?: number;
borderWidth?: number;
backgroundColor?: [number, number, number];
borderColor?: [number, number, number];
fontSize?: number;
fontColor?: [number, number, number];
required?: boolean;
}
export interface TextField extends BaseField {
type: "text";
defaultValue?: string;
multiline?: boolean;
maxLength?: number;
password?: boolean;
alignment?: "left" | "center" | "right";
}
export interface CheckboxField extends BaseField {
type: "checkbox";
defaultValue?: boolean;
size?: number;
}
export interface RadioOption {
value: string;
label?: string;
}
export interface RadioField extends BaseField {
type: "radio";
options: RadioOption[];
defaultValue?: string;
spacing?: number;
size?: number;
}
export interface DropdownField extends BaseField {
type: "dropdown";
options: string[];
defaultValue?: string;
editable?: boolean;
}
export interface ButtonField extends BaseField {
type: "button";
label: string;
action?: "submit" | "reset" | "javascript";
javascript?: string;
}
export interface SignatureField extends BaseField {
type: "signature";
}
export type FormField = TextField | CheckboxField | RadioField | DropdownField | ButtonField | SignatureField;
export interface GenerateConfig {
content: string;
customCSS?: string;
fields?: FormField[];
outputPath?: string;
pdfOptions?: PDFOptions;
metadata?: PDFMetadata;
}
export interface PDFMetadata {
title?: string;
author?: string;
subject?: string;
keywords?: string[];
creator?: string;
producer?: string;
creationDate?: Date;
modificationDate?: Date;
}
export interface FillData {
[fieldName: string]: string | boolean | number;
}
export interface GenerationResult {
bytes: Uint8Array;
path?: string;
fieldCount: number;
pageCount: number;
}
export declare class PDFGenerator {
private browser;
private options;
constructor(options?: PDFGeneratorOptions);
private init;
destroy(): Promise<void>;
private generateHTML;
private calculateElementPosition;
private addTextField;
private addCheckboxField;
private addRadioField;
private addDropdownField;
private addButtonField;
private addSignatureField;
private createFieldOptions;
private normalizeRGB;
private setMetadata;
generate(config: GenerateConfig): Promise<GenerationResult>;
generateBatch(configs: GenerateConfig[]): Promise<GenerationResult[]>;
fillExistingPDF(pdfPath: string, data: FillData, outputPath?: string): Promise<Uint8Array>;
extractFormData(pdfPath: string): Promise<FillData>;
validateConfig(config: GenerateConfig): string[];
}
export default PDFGenerator;
//# sourceMappingURL=pdf-generator.d.ts.map