UNPKG

@compdfkit_pdf_sdk/react_native

Version:

ComPDFKit for React Native is a comprehensive SDK that allows you to quickly add PDF functionality to Android, iOS, and React Native applications.

158 lines 6.09 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createTextWatermark = createTextWatermark; exports.createImageWatermark = createImageWatermark; exports.copyWatermark = copyWatermark; exports.fromNativeWatermark = fromNativeWatermark; exports.toNativeWatermark = toNativeWatermark; function asNumber(value, fallback) { return typeof value === "number" && Number.isFinite(value) ? value : fallback; } function asPositiveNumber(value, fallback) { return typeof value === "number" && Number.isFinite(value) && value > 0 ? value : fallback; } function asBoolean(value, fallback) { return typeof value === "boolean" ? value : fallback; } function asString(value, fallback) { return typeof value === "string" ? value : fallback; } function parsePages(value) { if (Array.isArray(value)) { return value.filter((page) => Number.isInteger(page)); } if (typeof value !== "string" || value.trim().length === 0) { return []; } const pages = []; for (const part of value.split(",")) { const trimmed = part.trim(); if (trimmed.includes("-")) { const [startRaw, endRaw] = trimmed.split("-"); const start = Number(startRaw); const end = Number(endRaw); if (Number.isInteger(start) && Number.isInteger(end) && end >= start) { for (let page = start; page <= end; page += 1) { pages.push(page); } } continue; } const page = Number(trimmed); if (Number.isInteger(page)) { pages.push(page); } } return pages; } function serializePages(pages) { return pages.join(","); } function normalizeWatermark(watermark) { return { index: watermark.index ?? -1, type: watermark.type, pages: watermark.pages ?? [], imagePath: watermark.imagePath ?? "", isImageExported: watermark.isImageExported ?? false, textContent: watermark.textContent ?? "", textColor: watermark.textColor ?? "#000000", fontSize: asPositiveNumber(watermark.fontSize, 24), scale: watermark.scale ?? 1, rotation: watermark.rotation ?? 45, opacity: watermark.opacity ?? 1, verticalAlignment: watermark.verticalAlignment ?? "center", horizontalAlignment: watermark.horizontalAlignment ?? "center", verticalOffset: watermark.verticalOffset ?? 0, horizontalOffset: watermark.horizontalOffset ?? 0, isFront: watermark.isFront ?? true, isTilePage: watermark.isTilePage ?? false, horizontalSpacing: watermark.horizontalSpacing ?? 0, verticalSpacing: watermark.verticalSpacing ?? 0, }; } function createTextWatermark(params) { return normalizeWatermark({ ...params, index: params.index ?? -1, type: "text", imagePath: "", isImageExported: false, }); } function createImageWatermark(params) { return normalizeWatermark({ ...params, index: params.index ?? -1, type: "image", textContent: "", textColor: "#000000", fontSize: 24, isImageExported: params.isImageExported ?? false, }); } function copyWatermark(watermark, patch) { return normalizeWatermark({ ...watermark, ...patch, }); } function fromNativeWatermark(payload) { return normalizeWatermark({ index: asNumber(payload.index, -1), type: asString(payload.type, "text") === "image" ? "image" : "text", textContent: asString(payload.text_content, ""), imagePath: asString(payload.image_path, ""), isImageExported: asBoolean(payload.is_image_exported, false), textColor: asString(payload.text_color, "#000000"), fontSize: asPositiveNumber(payload.font_size, 24), scale: asNumber(payload.scale, 1), rotation: asNumber(payload.rotation, 45), opacity: asNumber(payload.opacity, 1), verticalAlignment: asString(payload.vertical_alignment, "center"), horizontalAlignment: asString(payload.horizontal_alignment, "center"), verticalOffset: asNumber(payload.vertical_offset, 0), horizontalOffset: asNumber(payload.horizontal_offset, 0), pages: parsePages(payload.pages), isFront: asBoolean(payload.is_front, true), isTilePage: asBoolean(payload.is_tile_page, false), horizontalSpacing: asNumber(payload.horizontal_spacing, 0), verticalSpacing: asNumber(payload.vertical_spacing, 0), }); } function toNativeWatermark(watermark, options = {}) { const normalized = normalizeWatermark(watermark); if (normalized.pages.length === 0) { throw new Error("Watermark pages cannot be empty."); } if (normalized.type === "text" && !normalized.textContent) { throw new Error("Text watermark textContent cannot be empty."); } if (normalized.type === "image" && !normalized.imagePath && !options.allowEmptyImagePath) { throw new Error("Image watermark imagePath cannot be empty."); } return { index: normalized.index, type: normalized.type, text_content: normalized.textContent, image_path: normalized.imagePath, is_image_exported: normalized.isImageExported, text_color: normalized.textColor, font_size: normalized.fontSize, scale: normalized.scale, rotation: normalized.rotation, opacity: normalized.opacity, vertical_alignment: normalized.verticalAlignment, horizontal_alignment: normalized.horizontalAlignment, vertical_offset: normalized.verticalOffset, horizontal_offset: normalized.horizontalOffset, pages: serializePages(normalized.pages), is_front: normalized.isFront, is_tile_page: normalized.isTilePage, horizontal_spacing: normalized.horizontalSpacing, vertical_spacing: normalized.verticalSpacing, }; } //# sourceMappingURL=CPDFWatermark.js.map