UNPKG

@maistik/nuxt-pdf

Version:

A Nuxt 3 module for server-side PDF generation using Handlebars templates

32 lines (31 loc) 1.3 kB
import { defineEventHandler, readBody, setHeader } from "h3"; import { useRuntimeConfig } from "#imports"; import { compilePdfComponent } from "../../utils/compiler.js"; import { createPdfProvider } from "../../utils/providers.js"; export default defineEventHandler(async (event) => { try { const config = useRuntimeConfig(); const { template, ctx } = await readBody(event); if (!template || !ctx) { throw new Error("Missing template or context"); } const { data, options = {}, locale } = ctx; const mergedOptions = { ...config.pdf.defaultOptions, ...options }; const messages = config.pdf.enableI18n ? config.pdf.i18nMessages[locale || config.pdf.defaultLocale] || {} : {}; const html = compilePdfComponent( template, { data, options: mergedOptions, locale }, messages, config.pdf.templateSources, config.pdf.partialSources ); const provider = createPdfProvider(config.pdf.provider, config.pdf.providers); const pdfBuffer = await provider.generatePdf(html, mergedOptions); setHeader(event, "Content-Type", "application/pdf"); setHeader(event, "Content-Length", pdfBuffer.length.toString()); return pdfBuffer; } catch (error) { console.error("PDF generation error:", error); throw error; } });