add pdf watermark tool

This commit is contained in:
achraf
2026-06-07 20:13:05 +02:00
parent 365b98c7dd
commit 543122329e
9 changed files with 1105 additions and 7 deletions

View File

@@ -0,0 +1,80 @@
import type { PlimiPlugin } from "../../core/plugins/plugin-types";
import { runPdfWatermark } from "./run";
import { COLOR_PRESETS, MAX_WATERMARK_CHARS } from "./watermark";
import PdfWorker from "./worker?worker";
export interface PdfWatermarkOptions {
text: string;
orientation: "horizontal" | "vertical" | "diagonal";
opacity: number;
color: string;
}
export const pdfWatermarkPlugin: PlimiPlugin<PdfWatermarkOptions> = {
manifest: {
id: "pdf-watermark",
name: "PDF Watermark",
description:
"Stamp custom text over every page of a PDF, entirely in your browser. The text auto-sizes to fit each page.",
category: "pdf",
version: "1.0.0",
tags: ["pdf", "watermark", "stamp", "text"],
input: {
type: "files",
accept: ["application/pdf"],
multiple: false,
},
output: { type: "files" },
offlineReady: true,
},
optionsSchema: {
fields: [
{
type: "text",
key: "text",
label: `Watermark Text (max ${MAX_WATERMARK_CHARS} chars)`,
defaultValue: "CONFIDENTIAL",
placeholder: "e.g. CONFIDENTIAL",
},
{
type: "select",
key: "orientation",
label: "Orientation",
defaultValue: "diagonal",
options: [
{ label: "Diagonal", value: "diagonal" },
{ label: "Horizontal", value: "horizontal" },
{ label: "Vertical", value: "vertical" },
],
},
{
type: "slider",
key: "opacity",
label: "Opacity (%)",
defaultValue: 30,
min: 5,
max: 100,
step: 5,
},
{
type: "select",
key: "color",
label: "Color",
defaultValue: "light-grey",
options: Object.entries(COLOR_PRESETS).map(([value, { label }]) => ({
label,
value,
})),
},
],
},
capabilities: {
cancelable: true,
worker: true,
},
run: runPdfWatermark,
worker: () => new PdfWorker(),
};