-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsplit-pdf.js
More file actions
35 lines (28 loc) · 1.16 KB
/
Copy pathsplit-pdf.js
File metadata and controls
35 lines (28 loc) · 1.16 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// split-pdf.js - extract selected pages from one PDF tab
window.SplitPdfFeature = (() => {
async function split(pdf, rangeText, helpers) {
const { fetchPdfBytes, savePdfBytes, setProgress, toast, truncate } = helpers;
const { PDFDocument } = PDFLib;
setProgress(10);
const bytes = await fetchPdfBytes(pdf);
const srcDoc = await PDFDocument.load(bytes, { ignoreEncryption: true });
const pageIndices = PageRanges.parse(rangeText, srcDoc.getPageCount());
setProgress(55);
const outDoc = await PDFDocument.create();
const pages = await outDoc.copyPages(srcDoc, pageIndices);
pages.forEach(page => outDoc.addPage(page));
setProgress(85);
const outBytes = await outDoc.save({ useObjectStreams: true });
savePdfBytes(outBytes, `split-${safeName(pdf.title)}.pdf`);
setProgress(100);
toast(`Extracted ${pageIndices.length} page${pageIndices.length === 1 ? '' : 's'} from ${truncate(pdf.title, 24)}`);
}
function safeName(name) {
return String(name || 'pdf')
.replace(/\.pdf$/i, '')
.replace(/[\\/:*?"<>|]+/g, '-')
.replace(/\s+/g, '-')
.slice(0, 48) || 'pdf';
}
return { split };
})();