Une extension YesWiki pour créer des documents imprimables (format PDF) à partir d'une sélection de fiches Bazar et/ou de pages de contenu.
Cette page est une documentation technique. Une documentation sur son usage est détaillée sur cette page sur le site de YesWiki ou directement dans votre YesWiki s'il est à jour.
La mise en page est effectuée par Paged.js (documentation), et la capture PDF par un navigateur dit "headless" (par défaut chromium).
Les publications générées sont de type livres/livrets, fanzines ou newsletter.
Assemblage de pages (action {{publicationgenerator}} ) |
Publication PDF qui reprend les styles du wiki |
---|---|
Une page "publication", avec actions de téléchargement et prévisualisation (auteur·ices et admin) | Bouton d'export à ajouter (action {{bazar2publication}} ) |
Exemple de pliage de fanzine |
Avoir installé Chromium sur
le serveur. Éventuellement, connaître le chemin d'accès vers l'exécutable s'il est différent de /usr/bin/chromium
.
Pour installer Chrome sous Ubuntu/Debian :
sudo apt install -y --no-install-recommends chromium
La génération d'une publication se fait en plusieurs étapes.
- Sélection des éléments constitutifs de la publication.
- Organisation des éléments constitutifs au sein de la publication.
- Génération et enregistrement de la publication.
- Production du PDF.
L'action {{publicationgenerator}}
prend en charge les étapes 1, 2 et 3.
Le handler /pdf
prend en charge l'étape 4.
Utiliser l'action {{publicationgenerator}}
. Aucun paramètre n'est obligatoire.
Chaque publication est générée sous forme d'une page wiki. Le nom de cette page sera constitué de la valeur du paramètre pagenameprefix
suivie du titre de l'ebook (par défaut Ebook
).
On pourra utilement consulter la section Action {{publicationgenerator}}
ci-après.
Avant de pouvoir générer des newsletters, il faut créer un formulaire bazar suivant avec la structure suivante :
texte***bf_titre***Titre***60***255*** *** *** ***1***0***
texte***bf_description***Description***60***255*** *** *** ***0***0***
texte***bf_author***Auteur***60***255*** *** *** ***0***0***
textelong***bf_content***Contenu de la newsletter***20***20*** *** ***html***1***0***
Un fois ce formulaire créé, il faut trouver son id et utiliser l'action {{publicationgenerator}}
avec, au minimum les paramètres suivants :
outputformat="newsletter"
formid="<id du formulaire>"
Soit, au minimum : {{publicationgenerator outputformat="newsletter" formid="<id du formulaire>"}}
Chaque newsletter générée sera enregistrée sous la forme d'une fiche bazar du formulaire <id du formulaire> sur le wiki.
On pourra utilement consulter la section Action {{publicationgenerator}}
ci-après.
L'extension publication ajoute deux actions à votre wiki.
Action | Utilité |
---|---|
{{publicationgenerator}} |
Interface de sélection du contenu de la publication et de création du document imprimable (cf. Action {{publicationgenerator}} ) |
{{publicationlist}} |
Liste des ebooks générés et imprimables (cf. Action {{publicationlist}} ) |
{{bazar2publication}} |
Exporte les résultats d'une sélection de fiches Bazar en PDF (cf. Action {{bazar2publication}} ) |
{{blankpage}} |
Insère une page vide à l'impression. |
{{pagebreak}} |
Crée un saut de page à l'impression. |
{{publication-template}} |
Combiné avec {{bazar2publication templatepage="…"}} , signale l'emplacement réservé à l'injection de contenus. |
Ces actions s'ajoutent, comme toute action YesWiki, dans un contenu de page.
Cette action affiche une interface permettant de
- sélectionner, parmi les fiches bazar et pages YesWiki, les éléments constituant la publication ;
- organiser ces différents éléments au sein de la publication ;
- créer le document imprimable résultant.
Les différents paramètres de cette action sont les suivants.
N.B — Dans les explications qui suivent, le terme "sélection" désigne la sélection des éléments constitutifs d'une publication.
S'il est utilisé, ce paramètre doit l'être conjointement au paramètre titles
.
Liste des groupes d'éléments proposés à la sélection.
Dans la liste,
- les groupes doivent être séparés par des virgules ;
- les pages YesWiki seront identifiées par le mot "pages" ;
pour une page YesWiki, on peut préciser, entre parenthèses et après "pages",
- une liste de mots clefs associés à ces pages,
- les critères doivent être séparés par des "|" ;
- un formulaire bazar est identifié par son numéro identifiant (exemple : "1"),
pour un formulaire, on peut préciser, entre parenthèses et après son numéro,
- une liste de critères de sélection dans ce formulaire,
- les critères doivent être séparés par des "|".
Exemple – les éléments suivants
- Les pages wiki "pages wiki", reprenant les pages du wiki ;
{{publicationgenerator titles="pages wiki" groupselector="pages"}}
- Les pages wiki taggées "important", reprenant les pages du wiki catégorisées (au moyen d'un mot-clef) comme importantes ;
{{publicationgenerator titles="important" groupselector="pages(important)"}}
- Les fiches associées à un formulaire "recettes de cuisine", reprenant les fiches du formulaire 1 ;
{{publicationgenerator titles="recettes de cuisine" groupselector="1"}}
- Certaines fiches "livres", reprenant les fiches du formulaire 2 dont l'auteur est "Rabelais" ou dont la taille est "long" ;
{{publicationgenerator titles="livres" groupselector="2(bf_auteur=Rabelais|bf_taille=long)"}}
{{publicationgenerator titles="pages wiki, important, recettes de cuisine, livres" groupselector="pages, pages(important), 1, 2(bf_auteur=Rabelais|bf_taille=long)"}}
Exemple – Pour organiser les éléments proposés dans quatre groupes différents,
- un groupe, nommé "pages wiki", reprenant les pages du wiki ;
- un groupe, nommé "important", reprenant les pages du wiki catégorisées (au moyen d'un mot-clef) comme importantes ;
- un groupe, nommé "recettes de cuisine", reprenant les fiches du formulaire 1 ;
- un groupe, nommé "livres", reprenant les fiches du formulaire 2 dont l'auteur est "Rabelais" ou dont la taille est "long" ;
{{publicationgenerator titles="pages wiki, important, recettes de cuisine, livres" groupselector="pages, pages(important), 1, 2(bf_auteur=Rabelais|bf_taille=long)"}}
Titre des publications à générer.
Si ce paramètre est renseigné, le titre de la publication sera celui qu'il donne. Et l'utilisateur ne se verra pas proposer de choix lors de la sélection.
Si ce paramètre n'est pas renseigné ou est vide, l'utilisateur pourra, lors de la sélection, saisir un titre.
Exemple :
{{publicationgenerator title="Guerre et paix"}}
Détermine le type de publication générée (ebook ou newsletter).
S'il n'est pas précisé, ce paramètre vaut "ebook".
Exemple – pour générer une newsletter il faut donc écrire :
{{publicationgenerator outputformat="newsletter"}}
Paramètre spécifique et obligatoire dans le cas où on souhaite générer une newsletter.
Lorsqu'une newsletter est générée, elle est enregistrée sous forme d'une fiche bazar (voir à cet effet la section "Pour générer des newsletters"). Ce paramètre permet de spécifier le numéro identifiant du formulaire bazar en question.
Exemple – pour générer une newsletter avec le formulaire bazar "2", il faut donc écrire :
{{publicationgenerator outputformat="newsletter" formid="2"}}
Nom de la page à utiliser comme page d'introduction de la publication.
Exemple :
{{publicationgenerator pagestart="MaPageWiki"}}
Nom de la page à utiliser comme page de fin de la publication.
Exemple :
{{publicationgenerator pageend="MaPageWiki"}}
Paramètre utilisé uniquement dans le cas d'un ebook.
Lorsqu'un ebook est généré, il est enregistré sous forme d'une page YesWiki (voir à cet effet la section "Pour générer des ebooks"). Ce paramètre permet de spécifier le préfixe automatiquement ajouté en début du nom de la page ainsi créée.
S'il n'est pas précisé, ce paramètre vaut "Ebook".
Exemple – pour générer un ebook avec le préfixe "MesEDoc", il faut donc écrire :
{{publicationgenerator outputformat="ebook" ebookpagenameprefix="MesEDoc"}}
Certaines pages de YesWiki ont un statut un peu particulier. Il s'agit des pages créées par défaut lor de l'installation du wiki. Parmi ces pages on trouve, les pages de menu, les entêtes, pieds de pages, mais également PagePincipale.
Si ce paramètre n'est pas présent, ou s'il est vide, ou s'il est égal à 0, lors de la sélection, on ne propose pas ces pages.
Toute autre valeur de ce paramètre, fera apparaître ces pages.
Exemple – pour faire apparaître les pages créées lors del 'installation du wiki, il peut écrire :
{{publicationgenerator addinstalledpage="1"}}
Paramètre utilisé uniquement dans le cas d'un ebook.
Ce paramètre contient l'adresse de l'image de couverture utilisée en 1re page de couverture des ebooks générés.
Si ce paramètre n'est pas renseigné ou est vide, l'utilisateur pourra, lors de la sélection en vue d'un ebook, choisir une image de couverture.
Exemple :
{{publicationgenerator outputformat="ebook" coverimage="monImage.jpg"}}
Titre par défaut des publications à générer.
Exemple :
{{publicationgenerator title="Guerre et paix"}}
Description par défaut des publications à générer.
Exemple :
{{publicationgenerator desc="Les nouveautés du mois dernier"}}
Auteur·ices par défaut des publications à générer.
Exemple :
{{publicationgenerator author="George Sand"}}
Liste des noms des pages YesWiki à utiliser comme chapitre des publications à générer.
Dans la liste, les noms doivent être séparés par des virgules.
Si ce paramètre est renseigné, les pages ainsi désignées seront proposées par défaut dans la publication lors de la sélection.
L'utilisateur pourra, lors de la sélection, choisir les pages qu'il souhaite mettre à la suite de chaque chapitre.
Exemple :
{{publicationgenerator chapterpages="DebutChapitreUn, DebutChapitreDeux, DebutChapitreTrois"}}
Spécifie si les titre, description, auteur·ices, image et chapitres sont modifiables par l'utilisateur.
Les paramètres d'impression restent modifiables dans tous les cas.
Exemple :
{{publicationgenerator readonly}}
Cette action liste les ebook générés.
Le paramètre pagenameprefix
précise le préfixe par lequel commencent les noms de pages correspondant à des ebooks.
S'il n'est pas précisé, ce paramètre vaut "Ebook".
Exemple – Pour lister les ebooks dont le préfixe est "MesEDoc", il faut donc écrire :
{{publicationlist outputformat="ebook" pagenameprefix="MesEDoc"}}
Cette action exporte les résultats d'une sélection de fiches Bazar en PDF en cliquant sur un bouton. Le téléchargement débute au bout de quelques secondes. Il n'y a pas d'étape de personnalisation.
L'action est à placer à côté d'une action {{bazar}}
ou {{bazarliste}}
.
Tous les paramètres sont facultatifs.
Personnalise le texte affiché sur le bouton.
{{bazar2publication title="Imprimer ces résultats"}}
Par défaut : fa-book
.
Personnalise l'icône affichée (par défaut, fa-book
).
À choisir parmi le catalogue Font Awesome.
{{bazar2publication icon="fa-cloud-download"}}
Par défaut, chaque fiche Bazar démarre sur une nouvelle page.
Cet attribut importe la configuration d'une page Ebook : thème et style de présentation, ainsi que les éléments de configuration saisis dans le formulaire de création.
{{bazar2publication templatepage="EbookModelePourBazar"}}
Un Ebook modèle se crée comme tout autre publication, à partir d'une action {{publicationgenerator}}
.
Par défaut, le contenu de la page modèle est remplacé par les fiches Bazar.
L'utilisation de l'action {{publication-template}}
dans la page modèle vous donne la liberté de choisir l'emplacement où les fiches Bazar seront insérées.
Cette action se place dans une page Ebook dont vous voulez vous servir comme modèle de publication.
Ce modèle de publication s'utilise notamment pour personnaliser un export depuis une liste Bazar à l'aide du bouton généré par l'action {{bazar2publication}}
.
{{include page="EbookPageIntro" class="publication-cover"}}
{{include page="EbookRemerciements"}}
<mark>{{publication-template}}</mark>
{{include page="EbookPageFin" class="publication-end"}}
L'extension publication ajoute deux handlers aux pages de votre wiki.
handler | Utilité |
---|---|
/pdf |
Télécharge un document en PDF |
/preview |
Prévisualise un document |
Ces fonctions sont accessibles depuis le sous-menu "partager" du bas de page.
à priori, deux class permettent de cacher des parties du votre wiki :
""<div class="no-print"> ""bla bla à supprimer à l'impression""</div>""
""<div class="hide-print"> ""bla bla à supprimer à l'impression""</div>""
Des styles d'impression par défaut sont ajoutés pour vous donner le moins de travail possible lors de la création d'une publication.
Il y a plusieurs mécanismes pour personnaliser vos styles d'impression en créant des feuilles de styles (fichiers .css
) :
Répertoire | Noms possibles | À quoi ça s'applique ? |
---|---|---|
custom/tools/publication/*.css |
Peu importe | Toute publication, peu importe le thème |
custom/tools/publication/print-layouts/*.css |
fanzine.css , book.css |
Seulement les fanzines, ou les livres/livrets, peu importe le thème |
themes/NOM_DU_THEME/tools/publication/*.css |
Peu importe | Toute publication, pour un thème donné |
themes/NOM_DU_THEME/tools/publication/print-layouts/*.css |
fanzine.css , book.css |
Seulement les fanzines, ou les livres/livrets, pour un thème donné |
Remarque : les réglages principaux sont exposés dans l'action {{ editconfig }}
.
Le fichier de configuration [wakka.config.php
][wakka-config] accepte
plusieurs paramètres pour ajuster le rendu PDF à votre infrastructure informatique.
Clé de configuration | Valeur par défaut | Utilité |
---|---|---|
htmltopdf_path |
/usr/bin/chromium |
Indique l'emplacement du programme chargé |
htmltopdf_options |
['windowSize' => [1440, 780], 'noSandbox' => true] |
Options par défaut passées au navigateur embarqué |
htmltopdf_service_url |
Adresse du serveur YesWiki qui fera le rendu à distance | |
htmltopdf_service_authorized_domains |
Si votre serveur partage les fonction de générateur de pdf, il faut lui indique les nom de domaines autorisés | |
htmltopdf_base_url |
Si votre serveur n'a pas accès au wiki via la valeur de base_url |
array(
...
'htmltopdf_path' => '/usr/bin/chrome',
'htmltopdf_options' => ['windowSize' => [1440, 780], 'noSandbox' => true],
...
);
Vous avez un YesWiki qui est autorisé à utiliser le service pdf de https://example.org/yeswiki
array(
...
'htmltopdf_service_url' => 'https://example.org/yeswiki/?PagePrincipale/pdf',
...
);
Vous devez indiquer les noms de domaine que vous autorisez :
array(
...
'htmltopdf_service_authorized_domains' => ['example.org', 'youpi.com', 'toto.fr'],
...
);
La génération de PDF va échouer sur un environnement technique où YesWiki et Chromium sont dans un conteneur Docker — ou un reverse-proxy — qui n'a pas accès au réseau externe, c'est-à-dire au wiki via l'URL configurée dans base_url
du wakka.config.php
.
htmltopdf_base_url
sera utilisée comme substitut pour accéder aus contenus du wiki (pages, images, vidéos, etc.).
// docker run -p 8000:80 …
array(
// URL exposée par le conteneur Docker (extérieur)
'base_url' => 'https://example.com:8000/?,
...
// URL à l'intérieur du conteneur Docker (port interne)
'htmltopdf_base_url' => 'http://localhost:80/?',
);
A YesWiki extension to create printable documents (PDF format) from a selection of Bazar entries and/or content pages.
This page is a technical documentation. Documentation n the usage of the extension is avaialable on this page (fr) on the YesWiki website or directly into your YesWiki (fr) if it is up-to-date.
Pagination is done by Paged.js (documentation), and PDF print by a "headless" browser by default chromium).
Generated publications are of type books/booklets, fanzines or newsletter.