@maistik/nuxt-pdf
Version:
A Nuxt 3 module for server-side PDF generation using Handlebars templates
32 lines (31 loc) • 1.3 kB
JavaScript
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;
}
});