This article provides the source code in JavaScript to merge multiple PDF files. If you have a large number of PDF files and want to share them with friends, you may ike to merge the pdf files together and send a single pdf file.
Here is the source code. You may place the source code in the head or body tag of your html page file
<script src="https://cdn.jsdelivr.net/npm/pdf-lib@1.14.0/dist/pdf-lib.min.js"></script>
<script>
const pdfFilesInput = document.getElementById('pdf-files');
const mergeBtn = document.getElementById('merge-btn');
const clearBtn = document.getElementById('clear-btn');
mergeBtn.addEventListener('click', async () => {
const pdfFiles = pdfFilesInput.files;
if (pdfFiles.length === 0) {alert("Select Pdf File"); return;}
const numFiles = Math.min(20, pdfFiles.length);
if(numFiles<20){
const mergedPdf = await PDFLib.PDFDocument.create();
for (let i = 0; i < numFiles; i++) {
const pdfFile = pdfFiles[i];
const pdfBytes = await pdfFile.arrayBuffer();
const pdfDoc = await PDFLib.PDFDocument.load(pdfBytes);
const pages = await mergedPdf.copyPages(pdfDoc, pdfDoc.getPageIndices());
pages.forEach(page => mergedPdf.addPage(page));
}
const mergedPdfBytes = await mergedPdf.save();
const mergedPdfBlob = new Blob([mergedPdfBytes], { type: 'application/pdf' });
const mergedPdfUrl = URL.createObjectURL(mergedPdfBlob);
const downloadLink = document.createElement('a');
downloadLink.href = mergedPdfUrl;
downloadLink.download = 'merged.pdf';
downloadLink.click();
}
else{
alert("Limit exceded");
location.reload();
pdfFilesInput.value = '';
}
});
clearBtn.addEventListener('click', () => {
location.reload();
pdfFilesInput.value = '';
});
document.querySelectorAll(".drop-zone__input").forEach((inputElement) => {
const dropZoneElement = inputElement.closest(".drop-zone");
dropZoneElement.addEventListener("ondrop", (e) => {
inputElement.click();
});
inputElement.addEventListener("change", (e) => {
if (inputElement.files.length) {
updateThumbnail(dropZoneElement, inputElement.files[0]);
}
});
dropZoneElement.addEventListener("dragover", (e) => {
e.preventDefault();
dropZoneElement.classList.add("drop-zone--over");
});
["dragleave", "dragend"].forEach((type) => {
dropZoneElement.addEventListener(type, (e) => {
dropZoneElement.classList.remove("drop-zone--over");
});
});
dropZoneElement.addEventListener("drop", (e) => {
e.preventDefault();
if (e.dataTransfer.files.length) {
inputElement.files = e.dataTransfer.files;
updateThumbnail(dropZoneElement, e.dataTransfer.files[0]);
}
dropZoneElement.classList.remove("drop-zone--over");
});
});
</script>
That is all.
If you liked this article please do leave a reply and share it with friends.
Thanks.
