This commit is contained in:
Riccardo Giorato
2026-01-28 23:30:59 +01:00
parent d3dbee4114
commit 95545ef676
3 changed files with 30 additions and 19 deletions
+1 -1
View File
@@ -1,4 +1,4 @@
<a href="https://make-comics.vercel.app"> <a href="https://www.makecomics.io/">
<img alt="Make Comics" src="./public/og.png"> <img alt="Make Comics" src="./public/og.png">
<h1 align="center">Make Comics</h1> <h1 align="center">Make Comics</h1>
</a> </a>
+25 -14
View File
@@ -8,7 +8,10 @@ export async function GET(request: NextRequest) {
const storySlug = searchParams.get("storySlug"); const storySlug = searchParams.get("storySlug");
if (!storySlug) { if (!storySlug) {
return NextResponse.json({ error: "Story slug required" }, { status: 400 }); return NextResponse.json(
{ error: "Story slug required" },
{ status: 400 },
);
} }
const result = await getStoryWithPagesBySlug(storySlug); const result = await getStoryWithPagesBySlug(storySlug);
@@ -23,7 +26,10 @@ export async function GET(request: NextRequest) {
.filter((url: string) => url && url !== "/placeholder.svg"); .filter((url: string) => url && url !== "/placeholder.svg");
if (images.length === 0) { if (images.length === 0) {
return NextResponse.json({ error: "No images to download" }, { status: 400 }); return NextResponse.json(
{ error: "No images to download" },
{ status: 400 },
);
} }
// Fetch all images server-side // Fetch all images server-side
@@ -45,37 +51,42 @@ export async function GET(request: NextRequest) {
if (i > 0) pdf.addPage(); if (i > 0) pdf.addPage();
const imgBuffer = imageBuffers[i]; const imgBuffer = imageBuffers[i];
const imgData = `data:image/jpeg;base64,${imgBuffer.toString('base64')}`; const imgData = `data:image/jpeg;base64,${imgBuffer.toString("base64")}`;
// For simplicity, assume images fit the page; in production you might want to scale // For simplicity, assume images fit the page; in production you might want to scale
pdf.addImage(imgData, 'JPEG', 10, 10, 190, 277); // A4 portrait size minus margins pdf.addImage(imgData, "JPEG", 10, 10, 190, 277); // A4 portrait size minus margins
// Add "Created by Make Comics" at the bottom // Add "Created by Make Comics" at the bottom
pdf.setFont('helvetica', 'bold'); pdf.setFont("helvetica", "bold");
pdf.setFontSize(12); pdf.setFontSize(12);
const text = 'Created by Make Comics'; const text = "Created by Make Comics [makecomics.io]";
const textX = 105; const textX = 105;
const textY = 290; const textY = 290;
pdf.text(text, textX, textY, { align: 'center' }); pdf.text(text, textX, textY, { align: "center" });
const dimensions = pdf.getTextDimensions(text); const dimensions = pdf.getTextDimensions(text);
pdf.link(textX - dimensions.w / 2, textY - dimensions.h / 2, dimensions.w, dimensions.h, { url: 'https://make-comics.vercel.app/' }); pdf.link(
textX - dimensions.w / 2,
textY - dimensions.h / 2,
dimensions.w,
dimensions.h,
{ url: "https://www.makecomics.io/" },
);
} }
const pdfBuffer = Buffer.from(pdf.output('arraybuffer')); const pdfBuffer = Buffer.from(pdf.output("arraybuffer"));
// Return PDF as response // Return PDF as response
return new NextResponse(pdfBuffer, { return new NextResponse(pdfBuffer, {
headers: { headers: {
'Content-Type': 'application/pdf', "Content-Type": "application/pdf",
'Content-Disposition': `attachment; filename="${story.title}.pdf"`, "Content-Disposition": `attachment; filename="${story.title}.pdf"`,
}, },
}); });
} catch (error) { } catch (error) {
console.error('Error generating PDF:', error); console.error("Error generating PDF:", error);
return NextResponse.json( return NextResponse.json(
{ error: "Failed to generate PDF" }, { error: "Failed to generate PDF" },
{ status: 500 } { status: 500 },
); );
} }
} }
+3 -3
View File
@@ -26,9 +26,9 @@ export const metadata: Metadata = {
title: "MakeComics - AI Comic Generator", title: "MakeComics - AI Comic Generator",
description: description:
"Create stunning AI-generated comics in seconds. Choose your style, describe your story, and watch the magic happen.", "Create stunning AI-generated comics in seconds. Choose your style, describe your story, and watch the magic happen.",
openGraph:{ openGraph: {
images: "https://make-comics.vercel.app/og.png" images: "https://www.makecomics.io/og.png"
} }
}; };
export default function RootLayout({ export default function RootLayout({