diff --git a/generator/scripts/pdf.js b/generator/scripts/pdf.js index 91aa0c9..c22f7ed 100644 --- a/generator/scripts/pdf.js +++ b/generator/scripts/pdf.js @@ -1,59 +1,95 @@ -/**********************/ -/*** PDF generation ***/ -/**********************/ +/** + * Generate the PDF from the current playset + */ function generate_pdf() { var jsonPlayset = get_generated_json(); var docDefinition = { content: [ ], - styles: { - sectionHeader: { - fontSize: 22, - bold: true, - marginBottom: 8 - }, - sectionFooter: { - fontSize: 20, - bold: true, - alignment: 'right', - marginTop: 5 - }, - category: { - fontSize: 14, - bold: true, - marginLeft: 10, - marginTop: 3, - marginBottom: 2, - background: '#AAAAAA' - }, - details: { - fontSize: 12, - marginLeft: 22, - marginTop: 1 - } - } + styles: get_pdf_style() }; // Generation of the Sections for(var iSection = 0; iSection < jsonPlayset.sections.length; iSection++) { var currentSection = jsonPlayset.sections[iSection]; - docDefinition.content.push({ text: currentSection.label + " ...", style: 'sectionHeader' }); - // Chaque catégorie de la page - for (var iCategory = 0; iCategory < currentSection.categories.length; iCategory++) + pdf_add_section(docDefinition.content, currentSection, jsonPlayset.teaser); + } + + pdfMake.createPdf(docDefinition).download(); +} + +function pdf_add_introduction(content, jsonPlayset) +{ + +} + +/** + * Add the Sections part for the PDF generation + * @param {json} content Json data for pdfmake generation + * @param {json} jsonSection Json data for the Section description + * @param {string} playsetTeaser Teaser (bottom description) for the playset + */ +function pdf_add_section(content, jsonSection, playsetTeaser) +{ + content.push({ text: jsonSection.label + " ...", style: 'sectionHeader', pageBreak: 'before', pageOrientation: 'landscape' }); + + var columns = [ ]; + var iColumn = 0; + // For each category of the page, add the 6 Details and put it in the right column + for (var iCategory = 0; iCategory < jsonSection.categories.length; iCategory++) + { + if ((iCategory % 3) == 0) + { + columns.push([ ]); + iColumn = columns.length - 1; + } + + var currentCategory = jsonSection.categories[iCategory]; + columns[iColumn].push({ text: (iCategory + 1) + " - " + currentCategory.label, style: 'category' } ); + // Chaque élément de la catégorie + for (var iDetail = 0; iDetail < currentCategory.details.length; iDetail++) { - var currentCategory = currentSection.categories[iCategory]; - docDefinition.content.push({ text: (iCategory + 1) + " - " + currentCategory.label, style: 'category' } ); - // Chaque élément de la catégorie - for (var iDetail = 0; iDetail < currentCategory.details.length; iDetail++) - { - var currentDetail = currentCategory.details[iDetail]; - docDefinition.content.push({ text: (iDetail + 1) + " - " + currentDetail.label, style: 'details' }); - } + var currentDetail = currentCategory.details[iDetail]; + columns[iColumn].push({ text: (iDetail + 1) + " - " + currentDetail.label, style: 'details' }); } - docDefinition.content.push({ text: "... " + jsonPlayset.teaser, style: 'sectionFooter', pageBreak: 'after' }); } + content.push({ columns: columns }); + content.push({ text: "... " + playsetTeaser, style: 'sectionFooter' }); +} - pdfMake.createPdf(docDefinition).download(); +/** + * Get the style for the pdfmake generation + * @return {json} Json for pdfmake styling + */ +function get_pdf_style() +{ + var styles = { + sectionHeader: { + fontSize: 22, + bold: true, + marginBottom: 8 + }, + sectionFooter: { + fontSize: 20, + bold: true, + alignment: 'right', + marginTop: 5 + }, + category: { + fontSize: 14, + bold: true, + marginLeft: 10, + marginTop: 3, + marginBottom: 2, + background: '#AAAAAA' + }, + details: { + fontSize: 12, + marginLeft: 22, + marginTop: 1 + } + }; + return styles; } diff --git a/generator/tmp/2 columns print.json b/generator/tmp/2 columns print.json new file mode 100644 index 0000000..d75cd85 --- /dev/null +++ b/generator/tmp/2 columns print.json @@ -0,0 +1,748 @@ +var dd = { + pageOrientation: 'landscape', + "content": [ + { + "text": "Relations ...", + "style": "sectionHeader" + }, + { + "columns": [ + [ + { + "text": "1 - Famille", + "style": "category" + }, + { + "text": "1 - Parent & Enfant", + "style": "details" + }, + { + "text": "2 - Frères & Soeurs", + "style": "details" + }, + { + "text": "3 - Perdus de longue date", + "style": "details" + }, + { + "text": "4 - Parenté douteuse", + "style": "details" + }, + { + "text": "5 - Belle-famille", + "style": "details" + }, + { + "text": "6 - Séparés à la naissance", + "style": "details" + }, + { + "text": "2 - Amitié", + "style": "category" + }, + { + "text": "1 - Meilleurs amis", + "style": "details" + }, + { + "text": "2 - Rivalité amicale", + "style": "details" + }, + { + "text": "3 - Je te dois la vie", + "style": "details" + }, + { + "text": "4 - Anciens camarades de classe", + "style": "details" + }, + { + "text": "5 - Adulte & Enfant guide", + "style": "details" + }, + { + "text": "6 - Compagnons de beuverie", + "style": "details" + }, + { + "text": "3 - Romance", + "style": "category" + }, + { + "text": "1 - Un amant dédaigné", + "style": "details" + }, + { + "text": "2 - Y avait un truc entre nous ... autrefois", + "style": "details" + }, + { + "text": "3 - Sexe entre amis", + "style": "details" + }, + { + "text": "4 - Persistante et indifférente", + "style": "details" + }, + { + "text": "5 - De vieux amis dans le déni", + "style": "details" + }, + { + "text": "6 - Amour d'intellectuels", + "style": "details" + } + ], + [ + { + "text": "4 - Professionnel", + "style": "category" + }, + { + "text": "1 - Archéologues concurrents", + "style": "details" + }, + { + "text": "2 - Jeune journaliste & son sujet", + "style": "details" + }, + { + "text": "3 - Conservateur de musée & Chasseur de trésor", + "style": "details" + }, + { + "text": "4 - Propriétaire de bar & Client silencieux", + "style": "details" + }, + { + "text": "5 - Bibliothécaire & Professeur de recherche", + "style": "details" + }, + { + "text": "6 - Chercheurs d'aventure professionnels", + "style": "details" + }, + { + "text": "5 - La Guerre", + "style": "category" + }, + { + "text": "1 - Responsables militaires incompétents", + "style": "details" + }, + { + "text": "2 - Espion & Informateur", + "style": "details" + }, + { + "text": "3 - Officiers de haut-rang d'un Département Secret", + "style": "details" + }, + { + "text": "4 - Derrière les lignes ennemies ... dans leurs uniformes", + "style": "details" + }, + { + "text": "5 - Cuisinier & Capitaine", + "style": "details" + }, + { + "text": "6 - Le Général & Le Lâche", + "style": "details" + }, + { + "text": "6 - Etrange", + "style": "category" + }, + { + "text": "1 - Ennemis d'une autre vie", + "style": "details" + }, + { + "text": "2 - Propriétaire de restaurant et Chef de la mafia", + "style": "details" + }, + { + "text": "3 - Connaissances qui ne semblent pas pouvoir s'éviter", + "style": "details" + }, + { + "text": "4 - Voisin fouineur & Personne secrète", + "style": "details" + }, + { + "text": "5 - \"Bien sûr que nous pouvons leur faire confiance !\"", + "style": "details" + }, + { + "text": "6 - Réalisateur & Coursier", + "style": "details" + } + ] + ] + }, + { + "text": "... pour la Fortune & la Gloire", + "style": "sectionFooter" + }, + { + "pageBreak": "before", + "pageOrientation": "portrait", + "text": "Besoins ...", + "style": "sectionHeader" + }, + { + "text": "1 - De faire ce qui est juste ...", + "style": "category" + }, + { + "text": "1 - et de préserver l'Histoire.", + "style": "details" + }, + { + "text": "2 - parce que sa place est dans un musée !", + "style": "details" + }, + { + "text": "3 - et d'empêcher l'artefact de libérer son pouvoir.", + "style": "details" + }, + { + "text": "4 - pour Mein Fürher.", + "style": "details" + }, + { + "text": "5 - et de restaurer l'honneur de ma famille.", + "style": "details" + }, + { + "text": "6 - pour coucher au passage.", + "style": "details" + }, + { + "text": "2 - De devenir riche ...", + "style": "category" + }, + { + "text": "1 - et d'obtenir célébrité et gloire, peu importe le prix.", + "style": "details" + }, + { + "text": "2 - parce qu'il y en a marre d'être pauvre.", + "style": "details" + }, + { + "text": "3 - en vendant ce truc peut-être sacré que j'ai \"trouvé\".", + "style": "details" + }, + { + "text": "4 - en volant tout ce que je peux à l'équipe.", + "style": "details" + }, + { + "text": "5 - en créant des faux de basse qualité, vendus très chers.", + "style": "details" + }, + { + "text": "6 - avec la promesse de le rendre, puisque je ne l'ai plus", + "style": "details" + }, + { + "text": "3 - D'obtenir le pouvoir ultime ...", + "style": "category" + }, + { + "text": "1 - pour prouver quelque chose à Père", + "style": "details" + }, + { + "text": "2 - en utilisant le Pouvoir Ultime de l'Artefact sur le Monde", + "style": "details" + }, + { + "text": "3 - en invoquant l'Unique", + "style": "details" + }, + { + "text": "4 - par accident", + "style": "details" + }, + { + "text": "5 - et faire qu'ils m'aiment à nouveau", + "style": "details" + }, + { + "text": "6 - en battant mon rival de toujours", + "style": "details" + }, + { + "text": "4 - De se venger ...", + "style": "category" + }, + { + "text": "1 - de la personne qui m'a éconduit", + "style": "details" + }, + { + "text": "2 - de celui qui a volé notre précieux artefact national", + "style": "details" + }, + { + "text": "3 - en reprenant ce qui est mien", + "style": "details" + }, + { + "text": "4 - de cet abruti qui n'arrête pas de me devancer", + "style": "details" + }, + { + "text": "5 - après 25 longues années", + "style": "details" + }, + { + "text": "6 - pour ce qu'il s'est passé en Croatie !", + "style": "details" + }, + { + "text": "5 - De s'échapper ...", + "style": "category" + }, + { + "text": "1 - de la réserve du musée", + "style": "details" + }, + { + "text": "2 - de ce pays paumé", + "style": "details" + }, + { + "text": "3 - de cette relation", + "style": "details" + }, + { + "text": "4 - de cette alliance bancale", + "style": "details" + }, + { + "text": "5 - de la maison parentale, à nouveau", + "style": "details" + }, + { + "text": "6 - avec l'artefact, la fille, et une armée de vilains à nos trousses", + "style": "details" + }, + { + "text": "6 - De ...", + "style": "category" + }, + { + "text": "1 - conférer de grands pouvoirs à moi-même et mes chefs", + "style": "details" + }, + { + "text": "2 - réunir ma famille autour d'un héritage perdu", + "style": "details" + }, + { + "text": "3 - découvrir la vérité sur le squelle nain dans mon bureau", + "style": "details" + }, + { + "text": "4 - découvrir la vérité sur ma lignée", + "style": "details" + }, + { + "text": "5 - protéger l'artefact", + "style": "details" + }, + { + "text": "6 - trouver en premier l'artefact", + "style": "details" + }, + { + "text": "... pour la Fortune & la Gloire", + "style": "sectionFooter", + "pageBreak": "after" + }, + { + "text": "Lieux ...", + "style": "sectionHeader" + }, + { + "text": "1 - Amérique du Nord", + "style": "category" + }, + { + "text": "1 - Zone 51, Entrepôt de stockage F", + "style": "details" + }, + { + "text": "2 - Arrière-boutique d'un restaurant italien", + "style": "details" + }, + { + "text": "3 - Pièce secrète de la Librairie du Congrès", + "style": "details" + }, + { + "text": "4 - Université Marshall, Salle de classe 203", + "style": "details" + }, + { + "text": "5 - Canada français", + "style": "details" + }, + { + "text": "6 - Une plage à Cancun", + "style": "details" + }, + { + "text": "2 - Océanie", + "style": "category" + }, + { + "text": "1 - Cathédrale St Mary, Sydney", + "style": "details" + }, + { + "text": "2 - Vaisseau cargo, au large de la Grande Barrière de Corail", + "style": "details" + }, + { + "text": "3 - Quelque part dans l'Outback", + "style": "details" + }, + { + "text": "4 - La hutte d'un chef de tribu aborigène", + "style": "details" + }, + { + "text": "5 - Caverne du parc national de Kakadu", + "style": "details" + }, + { + "text": "6 - Nouvelle-Zélande", + "style": "details" + }, + { + "text": "3 - Asie", + "style": "category" + }, + { + "text": "1 - Le Temple du Sauveur Tantrique, Khajuraho, Inde", + "style": "details" + }, + { + "text": "2 - Les cavernes d'Ajanta et d'Ellora, Inde", + "style": "details" + }, + { + "text": "3 - Club Obiwan, Pékin", + "style": "details" + }, + { + "text": "4 - Maison de la Nouille, Province du Sichuan", + "style": "details" + }, + { + "text": "5 - Un village au pied de l'Everest", + "style": "details" + }, + { + "text": "6 - \"Bien sûr que la Russie fait partie de l'Asie !\"", + "style": "details" + }, + { + "text": "4 - Europe", + "style": "category" + }, + { + "text": "1 - Autodafé dans les quartiers généraux du 3e Reich", + "style": "details" + }, + { + "text": "2 - Cavité secrète sous le trône de la Reine Elizabeth", + "style": "details" + }, + { + "text": "3 - Place du Vatican", + "style": "details" + }, + { + "text": "4 - Un bordel d'Amsterdam, où Voltaire contracta la Syphillis", + "style": "details" + }, + { + "text": "5 - Les Catacombes de Paris", + "style": "details" + }, + { + "text": "6 - Le Véritable Londres souterrain", + "style": "details" + }, + { + "text": "5 - Afrique", + "style": "category" + }, + { + "text": "1 - A bord du cargon Bantu Wind", + "style": "details" + }, + { + "text": "2 - La Tombe des Anciens Rois", + "style": "details" + }, + { + "text": "3 - La Route du Caire", + "style": "details" + }, + { + "text": "4 - Bassin de rivière au Congo", + "style": "details" + }, + { + "text": "5 - Un bazar au coeur du Caire", + "style": "details" + }, + { + "text": "6 - Au beau milieu du Sahara", + "style": "details" + }, + { + "text": "6 - Amérique du Sud", + "style": "category" + }, + { + "text": "1 - Une forêt sombre, humide et pluvieuse", + "style": "details" + }, + { + "text": "2 - Les lignes de Nazca, au Pérou", + "style": "details" + }, + { + "text": "3 - Une église gigantesque, à Rio", + "style": "details" + }, + { + "text": "4 - Un village tribal, au pied d'un volcan", + "style": "details" + }, + { + "text": "5 - Les rues de Rio, pendant le Carnaval", + "style": "details" + }, + { + "text": "6 - La jungle encadrant l'Amazone", + "style": "details" + }, + { + "text": "... pour la Fortune & la Gloire", + "style": "sectionFooter", + "pageBreak": "after" + }, + { + "text": "Objets ...", + "style": "sectionHeader" + }, + { + "text": "1 - Malheureux", + "style": "category" + }, + { + "text": "1 - Fruit empoisonné", + "style": "details" + }, + { + "text": "2 - Une caisse remplie de mauvaises copies", + "style": "details" + }, + { + "text": "3 - Une bible cachant une flasque", + "style": "details" + }, + { + "text": "4 - Un biscuit chinois renfermant une mauvaise nouvelle", + "style": "details" + }, + { + "text": "5 - Un fauve gardé comme animal de compagnie", + "style": "details" + }, + { + "text": "6 - Un bidon d'essence, mais pas d'essence", + "style": "details" + }, + { + "text": "2 - Artefacts de valeur", + "style": "category" + }, + { + "text": "1 - Figurine du Dieu Chat Mésopotamien", + "style": "details" + }, + { + "text": "2 - Fourchette en argent plaqué", + "style": "details" + }, + { + "text": "3 - Scarabées en or", + "style": "details" + }, + { + "text": "4 - Le Compas de Marco Polo", + "style": "details" + }, + { + "text": "5 - Statue de la Déesse de la Fertilité en or massif", + "style": "details" + }, + { + "text": "6 - Dent de lait de George Washington", + "style": "details" + }, + { + "text": "3 - Armes", + "style": "category" + }, + { + "text": "1 - Luger P08, avec une seule balle", + "style": "details" + }, + { + "text": "2 - Khanda, Epée à double tranchant", + "style": "details" + }, + { + "text": "3 - Fléchettes empoisonnées", + "style": "details" + }, + { + "text": "4 - Revolver chargé, et des munitions en rab", + "style": "details" + }, + { + "text": "5 - Un couteau suisse avec toutes les options, sauf un couteau", + "style": "details" + }, + { + "text": "6 - Un lance-roquette", + "style": "details" + }, + { + "text": "4 - Mystérieux et sacrés", + "style": "category" + }, + { + "text": "1 - Saint Miroir de la Vérité", + "style": "details" + }, + { + "text": "2 - Prépuce de Jésus", + "style": "details" + }, + { + "text": "3 - La Voie des Poings Innombrables", + "style": "details" + }, + { + "text": "4 - La Sacoche Sacrée pleine de copeaux de bois des pygmées", + "style": "details" + }, + { + "text": "5 - Le Volume de la Vie qui vient après", + "style": "details" + }, + { + "text": "6 - Le Bâton des Milles Âmes", + "style": "details" + }, + { + "text": "5 - Moyens de transport", + "style": "category" + }, + { + "text": "1 - Panzerkampfwagen IV - le putain de gros tank", + "style": "details" + }, + { + "text": "2 - Un Hydravion baptisé \"Annie of the seas\"", + "style": "details" + }, + { + "text": "3 - Trois chameaux", + "style": "details" + }, + { + "text": "4 - Péniche Riviera", + "style": "details" + }, + { + "text": "5 - Une Jeep de l'armée, revenue 2 fois de l'Enfer déjà", + "style": "details" + }, + { + "text": "6 - Un pousse-pousse tiré par le plus vieil homme du monde", + "style": "details" + }, + { + "text": "6 - Information", + "style": "category" + }, + { + "text": "1 - Le Journal de Père", + "style": "details" + }, + { + "text": "2 - Une Gravure Sinistre", + "style": "details" + }, + { + "text": "3 - Un scalp sur lequel est tatoué une carte", + "style": "details" + }, + { + "text": "4 - Un dossier de l'Ennemi, localisant de puissants artefacts", + "style": "details" + }, + { + "text": "5 - Un numéro du magazine \"Boys Life\"", + "style": "details" + }, + { + "text": "6 - Les codes d'accès de chaque pièce du Louvre", + "style": "details" + }, + { + "text": "... pour la Fortune & la Gloire", + "style": "sectionFooter", + "pageBreak": "after" + } + ], + "styles": { + "sectionHeader": { + "fontSize": 22, + "bold": true, + "marginBottom": 8 + }, + "sectionFooter": { + "fontSize": 20, + "bold": true, + "alignment": "right", + "marginTop": 5 + }, + "category": { + "fontSize": 14, + "bold": true, + "marginLeft": 10, + "marginTop": 3, + "marginBottom": 2, + "background": "#AAAAAA" + }, + "details": { + "fontSize": 12, + "marginLeft": 22, + "marginTop": 1 + } + } +}