From e7bf5952d0729b37e677168b6e8fbd1ce58ed1a2 Mon Sep 17 00:00:00 2001 From: Pacien TRAN-GIRARD Date: Sun, 10 Aug 2014 17:28:37 +0200 Subject: First version --- point/data/pdf.js | 130 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100644 point/data/pdf.js (limited to 'point/data/pdf.js') diff --git a/point/data/pdf.js b/point/data/pdf.js new file mode 100644 index 0000000..f789bdf --- /dev/null +++ b/point/data/pdf.js @@ -0,0 +1,130 @@ +/* + * This file is part of "What's The Point" + * Copyright (C) 2014 Pacien TRAN-GIRARD + * + * "What's The Point" is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * "What's The Point" is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +requirejs.config({ + shim: { + "pdfjs": { + exports: "PDFJS", + }, + }, + paths: { + "pdfjs": "libs/pdfjs/pdf", + }, +}); + +define(["pdfjs"], function (pdfjs) { + + var pdf = { + + init: function (settings) { + this.fileUrl = settings.data.file; + this.width = settings.dimension.width; + this.height = settings.dimension.height; + + this.slides = []; + + pdfjs.disableRange = true; + pdfjs.workerSrc = "point/libs/pdfjs/pdf.worker.js"; + }, + + makeCanvas: function () { + var canvas = document.createElement("canvas"); + canvas.width = pdf.width; + canvas.height = pdf.height; + return canvas; + }, + + clearOutline: function (context, slideWidth, slideHeight, offsetX, offsetY) { + context.clearRect(0, 0, offsetX, pdf.height); + context.clearRect(offsetX + slideWidth, 0, offsetX, pdf.height); + context.clearRect(0, 0, pdf.width, offsetY); + context.clearRect(0, offsetY + slideHeight, pdf.width, offsetY); + return context; + }, + + renderSlide: function (pdfDocument, slideIndex, callback) { + pdfDocument.getPage(slideIndex).then(function (pdfPage) { + + var viewport = pdfPage.getViewport(1); + var slideWidth = viewport.width / 2; + var slideHeight = viewport.height; + + var widthRatio = pdf.width / slideWidth; + var heightRatio = pdf.height / slideHeight; + var scale = Math.min(widthRatio, heightRatio); + slideWidth *= scale; + slideHeight *= scale; + + var offsetX = (pdf.width - slideWidth) / 2; + var offsetY = (pdf.height - slideHeight) / 2; + + var contentViewport = new pdfjs.PageViewport(pdfPage.view, scale, 0, offsetX, offsetY); + var notesViewport = new pdfjs.PageViewport(pdfPage.view, scale, 0, -slideWidth + offsetX, offsetY); + + var contentCanvas = pdf.makeCanvas(); + var contentContext = contentCanvas.getContext("2d"); + + var notesCanvas = pdf.makeCanvas(); + var notesContext = notesCanvas.getContext("2d"); + + var contentRenderContext = { + canvasContext: contentContext, + viewport: contentViewport, + }; + + var notesRenderContext = { + canvasContext: notesContext, + viewport: notesViewport, + }; + + pdfPage.render(contentRenderContext).then(function () { + pdf.clearOutline(contentContext, slideWidth, slideHeight, offsetX, offsetY); + + pdfPage.render(notesRenderContext).then(function () { + pdf.clearOutline(notesContext, slideWidth, slideHeight, offsetX, offsetY); + + pdf.registerSlide(contentCanvas, notesCanvas, pdfDocument, slideIndex, callback); + + }); + }); + }); + }, + + registerSlide: function (contentCanvas, notesCanvas, pdfDocument, slideIndex, callback) { + pdf.slides[slideIndex - 1] = { + content: contentCanvas, + notes: notesCanvas, + }; + + if (slideIndex < pdfDocument.pdfInfo.numPages) { + pdf.renderSlide(pdfDocument, slideIndex + 1, callback); + } else { + callback(pdf.slides); + } + }, + + parse: function (rawData, callback) { + pdfjs.getDocument(require.toUrl(this.fileUrl)).then(function (pdfDocument) { + pdf.renderSlide(pdfDocument, 1, callback); + }); + }, + }; + + return pdf; + +}); -- cgit v1.2.3