fade22015f
* Adds new features table to top of v4 upgrade guide * Adds wait idempotency to wait-until, wait-for, and wait-for-token pages * Adds new priority docs page and updates the v4 upgrade guide * Adds new task lifecycle hooks * Removes the message about requiring tasks to be exported * Adds new global lifecycle hooks section * Moves sections from upgrade guide into the table * Adds hidden task page * Improves the global lifecycle hooks section * Updates middleware and locals section * Adds new useWaitToken page to the react hooks section * Adds a new ai.tool section * Moves Docker (legacy) page into self-hosting section * Removes known issues from v4 upgrade guide * Replace “toolTask” with “ai.tool” in the Streams page example * Renames guide to “Migrating from v3” and adds redirect * Remove references to v4 * Removes changelog from migration guide * The installation guide now references `@latest update` * Changes all references from `/sdk/v3` to `/sdk` * Updates @v4-beta to @latest * Fixed broken link * Fixes broken link * Adds an upgrade to v4 using AI section * Fixes 2 broken links * Adds an entry for targetting preview branches * Updates the run statuses * Adds boolean helpers section to the runs and realtime pages * Updates the concurrency page * Updates the test page to include the new options * Adds SDK and curl options for the preview branch targeting * Updates new bulk actions page * Remove the releasing concurrency section * Got rid of some more @v4-beta mentions * Improved rate limit docs * Improved migrating docs * Removed commented sections of the docs * useWaitToken hook * Fixed the description * Fix for missing test image --------- Co-authored-by: Matt Aitken <matt@mattaitken.com> Co-authored-by: Dan <8297864+D-K-P@users.noreply.github.com>
86 lines
2.3 KiB
Plaintext
86 lines
2.3 KiB
Plaintext
---
|
|
title: "Generate a PDF using react-pdf and save it to R2"
|
|
sidebarTitle: "React to PDF"
|
|
description: "This example will show you how to generate a PDF using Trigger.dev."
|
|
---
|
|
|
|
## Overview
|
|
|
|
This example demonstrates how to use Trigger.dev to generate a PDF using [react-pdf](https://react-pdf.org/) and save it to Cloudflare R2.
|
|
|
|
## Task code
|
|
|
|
<Info> This example must be a .tsx file to use React components.</Info>
|
|
|
|
```ts trigger/generateResumePDF.tsx
|
|
import { logger, task } from "@trigger.dev/sdk";
|
|
import { renderToBuffer, Document, Page, Text, View } from "@react-pdf/renderer";
|
|
import { PutObjectCommand, S3Client } from "@aws-sdk/client-s3";
|
|
|
|
// Initialize R2 client
|
|
const r2Client = new S3Client({
|
|
// How to authenticate to R2: https://developers.cloudflare.com/r2/api/s3/tokens/
|
|
region: "auto",
|
|
endpoint: process.env.R2_ENDPOINT,
|
|
credentials: {
|
|
accessKeyId: process.env.R2_ACCESS_KEY_ID ?? "",
|
|
secretAccessKey: process.env.R2_SECRET_ACCESS_KEY ?? "",
|
|
},
|
|
});
|
|
|
|
export const generateResumePDF = task({
|
|
id: "generate-resume-pdf",
|
|
run: async (payload: { text: string }) => {
|
|
// Log the payload
|
|
logger.log("Generating PDF resume", payload);
|
|
|
|
// Render the ResumeDocument component to a PDF buffer
|
|
const pdfBuffer = await renderToBuffer(
|
|
<Document>
|
|
<Page size="A4">
|
|
<View>
|
|
<Text>{payload.text}</Text>
|
|
</View>
|
|
</Page>
|
|
</Document>
|
|
);
|
|
|
|
// Generate a unique filename based on the text and current timestamp
|
|
const filename = `${payload.text.replace(/\s+/g, "-").toLowerCase()}-${Date.now()}.pdf`;
|
|
|
|
// Set the R2 key for the PDF file
|
|
const r2Key = `resumes/${filename}`;
|
|
|
|
// Set the upload parameters for R2
|
|
const uploadParams = {
|
|
Bucket: process.env.R2_BUCKET,
|
|
Key: r2Key,
|
|
Body: pdfBuffer,
|
|
ContentType: "application/pdf",
|
|
};
|
|
|
|
// Log the upload parameters
|
|
logger.log("Uploading to R2 with params", uploadParams);
|
|
|
|
// Upload the PDF to R2
|
|
await r2Client.send(new PutObjectCommand(uploadParams));
|
|
|
|
// Return the Bucket and R2 key for the uploaded PDF
|
|
return {
|
|
Bucket: process.env.R2_BUCKET,
|
|
Key: r2Key,
|
|
};
|
|
},
|
|
});
|
|
```
|
|
|
|
## Testing your task
|
|
|
|
To test this task in the dashboard, you can use the following payload:
|
|
|
|
```json
|
|
{
|
|
"text": "Hello, world!"
|
|
}
|
|
```
|