Files
bentopdf/public/workers/alternate-merge.worker.js
abdullahalam123 1fe05ec59f ci: Improve Docker build workflow and update dependencies
- Add release type detection to distinguish between version tags and edge builds
- Implement separate Docker build steps for release and edge builds with appropriate tags
- Add edge and SHA-based image tags for main branch builds
- Update nginx configuration to support Vietnamese (vi) language routing
- Simplify nginx location block to handle static files and fallback to index.html
- Remove javascript-obfuscator and ts-migrate from dependencies
- Update README with simplified self-hosting instructions using npx http-server
- Consolidate multiple server setup examples into single recommended approach
- Update build preview command to use npm run preview instead of npx serve
- Improve localization files for German, English, Vietnamese, and Chinese
- Update worker files and TypeScript logic files for improved functionality
- Enhance PDF tool pages with better structure and internationalization support
2025-12-13 20:57:32 +05:30

65 lines
1.9 KiB
JavaScript

const baseUrl = self.location.href.substring(0, self.location.href.lastIndexOf('/workers/') + 1);
self.importScripts(baseUrl + 'coherentpdf.browser.min.js');
self.onmessage = function (e) {
const { command, files } = e.data;
if (command === 'interleave') {
interleavePDFs(files);
}
};
function interleavePDFs(files) {
try {
const loadedPdfs = [];
const pageCounts = [];
for (const file of files) {
const uint8Array = new Uint8Array(file.data);
const pdfDoc = coherentpdf.fromMemory(uint8Array, "");
loadedPdfs.push(pdfDoc);
pageCounts.push(coherentpdf.pages(pdfDoc));
}
if (loadedPdfs.length < 2) {
throw new Error('At least two PDF files are required for interleaving.');
}
const maxPages = Math.max(...pageCounts);
const pdfsToMerge = [];
const rangesToMerge = [];
for (let i = 1; i <= maxPages; i++) {
for (let j = 0; j < loadedPdfs.length; j++) {
if (i <= pageCounts[j]) {
pdfsToMerge.push(loadedPdfs[j]);
rangesToMerge.push(coherentpdf.range(i, i));
}
}
}
if (pdfsToMerge.length === 0) {
throw new Error('No valid pages to merge.');
}
const mergedPdf = coherentpdf.mergeSame(pdfsToMerge, true, true, rangesToMerge);
const mergedPdfBytes = coherentpdf.toMemory(mergedPdf, false, true);
const buffer = mergedPdfBytes.buffer;
coherentpdf.deletePdf(mergedPdf);
loadedPdfs.forEach(pdf => coherentpdf.deletePdf(pdf));
self.postMessage({
status: 'success',
pdfBytes: buffer
}, [buffer]);
} catch (error) {
self.postMessage({
status: 'error',
message: error.message || 'Unknown error during interleave merge'
});
}
}