From 2b94dc5942a256e7a81dba804a24ddf74098bd48 Mon Sep 17 00:00:00 2001 From: Sean Engelhardt Date: Wed, 19 Apr 2017 14:56:15 +0200 Subject: [PATCH] Added configurable header and footer logos for PDF. --- openslides/core/config_variables.py | 25 ++++++++++++++- openslides/core/static/js/core/pdf.js | 20 ++++++------ .../templates/mediafiles/mediafile-list.html | 17 ++++++++++ openslides/users/static/js/users/site.js | 31 +++++++++++++++---- 4 files changed, 76 insertions(+), 17 deletions(-) diff --git a/openslides/core/config_variables.py b/openslides/core/config_variables.py index 58cb779f2..997e8685e 100644 --- a/openslides/core/config_variables.py +++ b/openslides/core/config_variables.py @@ -223,7 +223,9 @@ def get_config_variables(): name='logos_available', default_value=[ 'logo_projector_main', - 'logo_projector_header'], + 'logo_projector_header', + 'logo_pdf_header', + 'logo_pdf_footer'], weight=300, group='Logo', hidden=True) @@ -247,3 +249,24 @@ def get_config_variables(): weight=302, group='Logo', hidden=True) + + #PDF logos + yield ConfigVariable( + name='logo_pdf_header', + default_value={ + 'display_name': 'Header PDF logo', + 'path': ''}, + input_type='logo', + weight=310, + group='Logo', + hidden=True) + + yield ConfigVariable( + name='logo_pdf_footer', + default_value={ + 'display_name': 'Footer PDF logo', + 'path': ''}, + input_type='logo', + weight=311, + group='Logo', + hidden=True) diff --git a/openslides/core/static/js/core/pdf.js b/openslides/core/static/js/core/pdf.js index 8e02663ac..0bd2faf99 100644 --- a/openslides/core/static/js/core/pdf.js +++ b/openslides/core/static/js/core/pdf.js @@ -144,18 +144,19 @@ angular.module('OpenSlidesApp.core.pdf', []) * @param {object} contentProvider - Object with on method `getContent`, which * returns an array for content */ - var createInstance = function(contentProvider) { + //images shall contain the the logos as URL: base64Str, just like the converter + var createInstance = function(contentProvider, images) { // PDF header var getHeader = function() { var columns = []; + var logoUrl = Config.get('logo_pdf_header').value.path; - // add here your custom logo (which has to be added to a custom vfs_fonts.js) - // see https://github.com/pdfmake/pdfmake/wiki/Custom-Fonts---client-side - /* - columns.push({ - image: 'logo.png', - fit: [180,40] - });*/ + if (logoUrl) { + columns.push({ + image: images[logoUrl], + fit: [180,40] + }); + } var line1 = [ Config.translate(Config.get('general_event_name').value), @@ -768,7 +769,7 @@ angular.module('OpenSlidesApp.core.pdf', []) height *= scaleByHeight; } alreadyConverted.push({ - image: BaseMap[element.getAttribute("src")], + image: images[element.getAttribute("src")], width: width, height: height }); @@ -837,7 +838,6 @@ angular.module('OpenSlidesApp.core.pdf', []) ParseHtml(content, html); return content; }, - BaseMap = images, /** * Creates containerelements for pdfMake * e.g create("text":"MyText") result in { text: "MyText" } diff --git a/openslides/mediafiles/static/templates/mediafiles/mediafile-list.html b/openslides/mediafiles/static/templates/mediafiles/mediafile-list.html index c76c40676..4b756399d 100644 --- a/openslides/mediafiles/static/templates/mediafiles/mediafile-list.html +++ b/openslides/mediafiles/static/templates/mediafiles/mediafile-list.html @@ -321,6 +321,7 @@ ng-mouseleave="mediafile.logoHover=false" ng-show="mediafile.canBeUsedAsLogo()"> +<<<<<<< e1a95588e7f81cf06db3e753be82bc17a125d059 @@ -335,6 +336,22 @@ {{ logo.display_name | translate }},
+======= + + + + + + + + + + {{ logo.display_name }} + +
+>>>>>>> add logos in PDF (WIP)
': 1}}}, $scope, 'groups'); $scope.$watch(function () { @@ -685,10 +687,27 @@ angular.module('OpenSlidesApp.users.site', [ // Export as PDF $scope.pdfExportUserList = function () { - var filename = gettextCatalog.getString("List of participants")+".pdf"; - var userListContentProvider = UserListContentProvider.createInstance($scope.usersFiltered, $scope.groups); - var documentProvider = PdfMakeDocumentProvider.createInstance(userListContentProvider); - PdfCreate.download(documentProvider.getDocument(), filename); + var imageMap = {}; + var imagePromises = []; + var imageSources = []; + + imageSources.push(Config.get('logo_pdf_header').value.path); + imageSources.push(Config.get('logo_pdf_footer').value.path); + + imagePromises = _.map(imageSources, function (image_source) { + return PDFLayout.imageURLtoBase64(image_source).then(function (base64Str) { + imageMap[image_source] = base64Str; + }); + }); + + return $q(function (resolve) { + $q.all(imagePromises).then(function(base64Str) { + var filename = gettextCatalog.getString("List of participants")+".pdf"; + var userListContentProvider = UserListContentProvider.createInstance($scope.usersFiltered, $scope.groups); + var documentProvider = PdfMakeDocumentProvider.createInstance(userListContentProvider, imageMap); + PdfCreate.download(documentProvider.getDocument(), filename); + }); + }); }; $scope.pdfExportUserAccessDataList = function () { var filename = gettextCatalog.getString("List of access data")+".pdf"; @@ -1506,7 +1525,7 @@ angular.module('OpenSlidesApp.users.site', [ }, function (error) { // Error: Username or password is not correct. - $state.transitionTo($state.current, {msg: error.data.detail}, { + $state.transitionTo($state.current, {msg: error.data.detail}, { reload: true, inherit: false, notify: true }); }