mirror of
https://github.com/AmruthPillai/Reactive-Resume.git
synced 2026-08-23 14:52:18 +10:00
34 lines
1.1 KiB
TypeScript
34 lines
1.1 KiB
TypeScript
import type { ResumeData } from "@reactive-resume/schema/resume/data";
|
|
import type { Template } from "@reactive-resume/schema/templates";
|
|
import type { SectionTitleResolver } from "./section-title";
|
|
import { createElement } from "react";
|
|
import { parseResumeData } from "@reactive-resume/schema/resume/data";
|
|
import { renderToBuffer } from "#react-pdf-renderer";
|
|
import { ResumeDocument } from "./document";
|
|
|
|
export type CreateResumePdfFileOptions = {
|
|
data: ResumeData;
|
|
filename: string;
|
|
template?: Template | undefined;
|
|
resolveSectionTitle?: SectionTitleResolver | undefined;
|
|
};
|
|
|
|
export const createResumePdfFile = async ({
|
|
data: input,
|
|
filename,
|
|
template,
|
|
resolveSectionTitle,
|
|
}: CreateResumePdfFileOptions): Promise<File> => {
|
|
const data = parseResumeData(input);
|
|
const document = createElement(ResumeDocument, {
|
|
data,
|
|
template: template ?? data.metadata.template,
|
|
resolveSectionTitle,
|
|
}) as Parameters<typeof renderToBuffer>[0];
|
|
const buffer = await renderToBuffer(document);
|
|
const bytes = new Uint8Array(new ArrayBuffer(buffer.byteLength));
|
|
bytes.set(buffer);
|
|
|
|
return new File([bytes], filename, { type: "application/pdf" });
|
|
};
|