@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
JavaScript
;
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