Skip to main content
Glama

mcp-google-sheets

add-image-to-pdf.ts3.99 kB
import { Property, createAction } from '@activepieces/pieces-framework'; import { httpClient, HttpMethod, HttpError } from '@activepieces/pieces-common'; import { PdfCoSuccessResponse, PdfCoErrorResponse, PdfCoImageAnnotation, PdfCoAddImagesRequestBody, } from '../common/types'; import { pdfCoAuth } from '../../index'; import { BASE_URL, commonProps } from '../common/props'; export const addImageToPdf = createAction({ name: 'add_image_to_pdf', displayName: 'Add Image to PDF', description: 'Add image to a PDF document.', auth: pdfCoAuth, props: { url: Property.ShortText({ displayName: 'Source PDF URL', description: 'URL of the PDF file to modify.', required: true, }), imageUrl: Property.ShortText({ displayName: 'Image URL', required: true, }), xCoordinate: Property.Number({ displayName: 'X Coordinate', description: 'X coordinate (from top-left corner) to place the image.', required: true, }), yCoordinate: Property.Number({ displayName: 'Y Coordinate', required: true, description: 'Y coordinate (from top-left corner) to place the image.', }), width: Property.Number({ displayName: 'Width', description: 'Optional width for the image on the PDF (in points). Aspect ratio is kept by default.', required: false, }), height: Property.Number({ displayName: 'Height', description: 'Optional height for the image on the PDF (in points). Aspect ratio is kept by default.', required: false, }), pages: Property.ShortText({ displayName: 'Target Pages', description: 'Specify page indices as comma-separated values or ranges to process (e.g. "0, 1, 2-" or "1, 2, 3-7").', required: false, }), ...commonProps, }, async run(context) { const { auth, propsValue } = context; const { url, imageUrl, fileName, pdfPassword, xCoordinate, pages, yCoordinate, width, height, expiration, httpPassword, httpUsername, } = propsValue; const imageAnnotationPayload: PdfCoImageAnnotation = { url: imageUrl, x: xCoordinate, y: yCoordinate, pages, height, width, }; const requestBody: PdfCoAddImagesRequestBody = { url: url, images: [imageAnnotationPayload], async: false, name: fileName, expiration, httppassword: httpPassword, httpusername: httpUsername, password: pdfPassword, inline: false, }; try { const response = await httpClient.sendRequest<PdfCoSuccessResponse | PdfCoErrorResponse>({ method: HttpMethod.POST, url: `${BASE_URL}/pdf/edit/add`, headers: { 'x-api-key': auth as string, 'Content-Type': 'application/json', }, body: requestBody, }); console.log(JSON.stringify(response, null, 2)); if (response.body.error) { const errorBody = response.body as PdfCoErrorResponse; let errorMessage = `PDF.co API Error (Add Image): Status ${errorBody.status}.`; if (errorBody.message) { errorMessage += ` Message: ${errorBody.message}.`; } else { errorMessage += ` An unspecified error occurred.`; } errorMessage += ` Raw response: ${JSON.stringify(errorBody)}`; throw new Error(errorMessage); } const successBody = response.body as PdfCoSuccessResponse; return { outputUrl: successBody.url, pageCount: successBody.pageCount, outputName: successBody.name, creditsUsed: successBody.credits, remainingCredits: successBody.remainingCredits, }; } catch (error) { if (error instanceof HttpError) { const responseBody = error.response?.body as PdfCoErrorResponse | undefined; let detailedMessage = `HTTP Error calling PDF.co API (Add Image): ${error.message}.`; if (responseBody && responseBody.message) { detailedMessage += ` Server message: ${responseBody.message}.`; } else if (responseBody) { detailedMessage += ` Server response: ${JSON.stringify(responseBody)}.`; } throw new Error(detailedMessage); } throw error; } }, });

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/activepieces/activepieces'

If you have feedback or need assistance with the MCP directory API, please join our Discord server