- 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
65 lines
1.9 KiB
JavaScript
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'
|
|
});
|
|
}
|
|
}
|