Combining several documents and simply displaying them as one with pdf.js is easy - I just hacked the following example based on the simple prev / next viewer that mozilla provides in its repository.
var urls = [
'http://mozilla.imtqy.com/pdf.js/web/compressed.tracemonkey-pldi-09.pdf',
'http://mozilla.imtqy.com/pdf.js/web/compressed.tracemonkey-pldi-09.pdf'
];
var pdfDocs = [],
current = {},
totalPageCount = 0,
pageNum = 1,
pageRendering = false,
pageNumPending = null,
scale = 0.8,
canvas = document.getElementById('the-canvas'),
ctx = canvas.getContext('2d');
function renderPage(num) {
pageRendering = true;
current = getPageInfo(num);
pdfDocs[current.documentIndex]
.getPage(current.pageNumber).then(function (page) {
var viewport = page.getViewport(scale);
canvas.height = viewport.height;
canvas.width = viewport.width;
var renderContext = {
canvasContext: ctx,
viewport: viewport
};
var renderTask = page.render(renderContext);
renderTask.promise.then(function () {
pageRendering = false;
if (pageNumPending !== null) {
renderPage(pageNumPending);
pageNumPending = null;
}
});
});
document.getElementById('page_num').textContent = pageNum;
}
function queueRenderPage(num) {
if (pageRendering) {
pageNumPending = num;
} else {
renderPage(num);
}
}
function onPrevPage() {
if (pageNum <= 1) {
return;
}
pageNum--;
queueRenderPage(pageNum);
}
document.getElementById('prev').addEventListener('click', onPrevPage);
function onNextPage() {
if (pageNum >= totalPageCount && current.documentIndex + 1 === pdfDocs.length) {
return;
}
pageNum++;
queueRenderPage(pageNum);
}
document.getElementById('next').addEventListener('click', onNextPage);
function getPageInfo (num) {
var totalPageCount = 0;
for (var docIdx = 0; docIdx < pdfDocs.length; docIdx++) {
totalPageCount += pdfDocs[docIdx].numPages;
if (num <= totalPageCount) {
return {documentIndex: docIdx, pageNumber: num};
}
num -= pdfDocs[docIdx].numPages;
}
return false;
};
function getTotalPageCount() {
var totalPageCount = 0;
for (var docIdx = 0; docIdx < pdfDocs.length; docIdx++) {
totalPageCount += pdfDocs[docIdx].numPages;
}
return totalPageCount;
}
var loadedCount = 0;
function load() {
pdfjsLib.getDocument(urls[loadedCount]).then(function (pdfDoc_) {
console.log('loaded PDF ' + loadedCount);
pdfDocs.push(pdfDoc_);
loadedCount++;
if (loadedCount !== urls.length) {
return load();
}
console.log('Finished loading');
totalPageCount = getTotalPageCount();
document.getElementById('page_count').textContent = totalPageCount;
renderPage(pageNum);
});
}
<!DOCTYPE html>
<html>
<head>
<base href="https://mozilla.imtqy.com/pdf.js/" />
<meta charset="UTF-8">
<title>Previous/Next example</title>
</head>
<body onload="load()">
<div>
<button id="prev">Previous</button>
<button id="next">Next</button>
<span>Page: <span id="page_num"></span> / <span id="page_count"></span></span>
</div>
<div>
<canvas id="the-canvas" style="border:1px solid black"></canvas>
</div>
<script src="build/pdf.js"></script>
</body>
</html>
Run codeHide result, CORS-, . , , , , , urls.