Projet

Général

Profil

Actions

Feature #2080

fermé

Export d'une publication dans un format éditable

Ajouté par Nicolas Eysseric il y a presque 13 ans. Mis à jour il y a presque 13 ans.

Statut:
Closed
Priorité:
Normal
Assigné à:
Début:
07/06/2011
Echéance:
% réalisé:

100%

Temps estimé:
Temps passé:
Livraison en TEST:
Livraison en PROD:

Description

L'objectif de cette évolution est de permettre de générer la publication dans un format pouvant être modifié à postériori.
Actuellement, seule la génération PDF est possible et ne permet pas la modification du document ainsi produit.

Cette nouvelle fonctionnalité permettra de produire des documents Open Office et MS Word.
La génération PDF sera aussi déléguée à celle-ci.
La production des différents formats sera assurée par OpenOffice en mode serveur.


Fichiers

capture_-_format_export.png (14,3 ko) capture_-_format_export.png Miguel Moquillon, 08/06/2011 15:51
publication-export.odt (39 ko) publication-export.odt Nicolas Eysseric, 21/06/2011 16:06

Mis à jour par Miguel Moquillon il y a presque 13 ans

Les fonctions de téléchargement d'une publication et de génération de PDF ont été fusionnées en une seule opération d'exportation. Lorsque la fonction est appelée pour une publication donnée, une boite de dialogue modale s'affiche demandant le format vers lequel l'exportation doit être faite ; les formats supportés actuellement sont l'archive ZIP (qui correspond à l'opération antérieure de téléchargement d'une publication), le PDF, l'ODT, et le format MS-Word. (En pièce jointe une capture de la boite de dialogue.)

La fonction de génération en PDF a donc été remaniée et s'appuie désormais sur les fonctionnalités en la matière d'OpenOffice.

La nouvelle fonction d'export s'appuie sur l'API et les services d'un OpenOffice tournant en mode serveur. Les formats d'exports peuvent donc être enrichies selon les possibilités de ce dernier. Pour ce faire, une nouvelle API, converter, a été rajoutée dans Silverpeas pour réaliser des conversions de formats de document avec une implémentation par défaut basée sur OpenOffice. Pour que celle-ci puisse communiquer avec le service OpenOffice, il est nécessaire de lui indiquer le hôte et le numéro de port sur lesquelles OpenOffice est à l'écoute dans le fichier properties/com/silverpeas/converter/openoffice.properties.

Dans le cadre de nos tests d'intégration, nous avons mis en place, via un script de démarrage, le service OpenOffice sur notre machine d'intégration continue (elle tourne sous GNU/Linux Ubuntu 10.04 LTS). Je fais part ici du contenu de ce script /etc/init.d/openoffice-server :

#!/bin/sh

  1. BEGIN INIT INFO
  1. Provides: openoffice openoffice-server
  2. Required-Start: $local_fs $remote_fs $network $time
  3. Required-Stop: $local_fs $remote_fs $network $time
  4. Should-Start: $syslog
  5. Should-Stop: $syslog
  6. Default-Start: 2 3 4 5
  7. Default-Stop: 0 1 6
  8. Short-Description: OpenOffice server
    1. END INIT INFO

set -e

OOFFICE_DAEMON="/usr/bin/ooffice"
OOFFICE_OPTS="-headless -nodefault -accept='socket,host=localhost,port=8100;urp' -splash-pipe=5"

test -x $OOFFICE_DAEMON || exit 0

umask 022

. /lib/lsb/init-functions

case "$1" in
start)
log_daemon_msg "Starting OpenOffice Service" ""
if start-stop-daemon --start --quiet --oknodo --exec $OOFFICE_DAEMON -- $OOFFICE_OPTS; then
log_end_msg 0
else
log_end_msg 1
fi
/bin/pidof soffice.bin > /var/run/ooffice.pid
;;
stop)
log_daemon_msg "Stopping OpenOffice Service" ""
if start-stop-daemon --stop --quiet --oknodo --pidfile /var/run/ooffice.pid; then
log_end_msg 0
else
log_end_msg 1
fi
;;
status)
status_of_proc -p /var/run/ooffice.pid $OOFFICE_DAEMON "OpenOffice service" && exit 0 || exit $?
;;
*)
log_action_msg "Usage: /etc/init.d/openoffice-server {start|stop|status}"
exit 1
esac

exit 0

Selon le système d'exploitation au-dessus duquel OpenOffice tourne, ce script nécessite d'être adapté.

Mis à jour par Nicolas Eysseric il y a presque 13 ans

  • Statut changé de Resolved à Feedback

Désormais, la génération PDF nécessite Open Office en mode serveur.

Dans ce contexte, il est indispensable de paramétrer le comportement par défaut de l'application.
Un nouveau paramètre doit être ajouté à kmeliaSettings.properties.
Il doit permettre de spécifier les formats d'export possible parmi les suivants : zip, pdf, doc, odt.
L'interface qui permet la sélection du format d'export par l'utilisateur devra prendre en compte les formats retenus.
Les formats non retenus seront inactifs (grisés) dans la fenêtre de sélection.
Par défaut, seul le format zip sera supporté.
Si le format PDF n'est pas supporté alors le ZIP ne contiendra que les fichiers joints à la publication.

Mis à jour par Miguel Moquillon il y a presque 13 ans

  • Statut changé de Feedback à Resolved

kmeliaSettings.properties a un nouveau paramètre, kmelia.export.formats.active, qui liste (séparé par des espace) les différents formats qui seront actifs dans les composants Kmelia. Par défaut, seul le format zip est actif ; les publications ne seront donc pas générés en PDF. Tout format non activé sera tout de même affiché dans la boite de proposition mais sera inactive.
Les formats d'exportation supportés sont zip, pdf, odt, et doc. Tout format autre que ceux-là lèvera une erreur lors du chargement de la page d'une publication dans kmelia.

Selon les navigateurs, le format inactif n’apparaît pas nécessaire en grisé. Une petite touche d'Aurore est donc nécessaire pour ça.

Mis à jour par Nicolas Eysseric il y a presque 13 ans

En cours d'intégration...

Mis à jour par Nicolas Eysseric il y a presque 13 ans

Retours suite aux tests d'intégration :
  • Repartir du template ci-joint modifié par Aurore et moi-même
  • Ouvrir le document PDF généré dans une nouvelle fenêtre
  • Parser l'entête et le pied de page afin de pouvoir y inclure des libellés
  • Ajouter le libellé "par"
  • Ajouter le champ "dernier contributeur ayant modifié la publication"
  • S'il n'y a pas de contenu, ne pas afficher la section "Contenu"
  • La section "Contenu" ne s'affiche pas correctement (saut de section?), "décale" les autres sections et l'entête et le pied de page n'apparaissent plus que sur la première page.
  • Homogénéiser le style "Standard" avec le style "IMPORTED TEXT BODY"
  • Dès qu'une image est présente dans le contenu, la génération échoue.
  • Mettre les sections "Voir aussi" et "Plan de classement" en dernier
  • "Voir aussi" : Supprimer l'id de la publication avant son nom

Mis à jour par Nicolas Eysseric il y a presque 13 ans

Sous Windows, il suffit de lancer la commande suivante :

soffice.exe -headless -accept="socket,host=xxx.xxx.xxx.xxx,port=8100;urp;" -nofirststartwizard

Mis à jour par Miguel Moquillon il y a presque 13 ans

  • Statut changé de Feedback à Resolved

Remarques pris en comptes et bug corrigé.
Le bug n'apparaissait que sous MS-Windows, le seul système qui utilise des \ comme séparateurs de chemin.
Le problème provenait que le chemin de l'image est construite. Or, sous Windows, le caractère \ est utilisé pour séparer les différents nœuds du chemin.
Or c'est l'API d'OpenOffice attend une URI pour charger l'image et le caractère \ est invalide dans une URI.

Mis à jour par Nicolas Eysseric il y a presque 13 ans

  • Statut changé de Resolved à Closed

OK. Validé.

Mis à jour par Monique Desnoyer il y a presque 13 ans

Bonjour,

Nous avions émis le souhait au démarrage, de pouvoir exporter vers excel la ou les publication affichée et/ou issues d'une recherche. Cette possibilité est-elle également prévue dans ce format (csv ou xls ?)

Monique

Mis à jour par Miguel Moquillon il y a presque 13 ans

Voici le script de démarrage d'OpenOffice (LibreOffice ici) pour Ubuntu 11.04.
Une attention toute particulière doit être portée à ce que les paramètres d'OpenOffice ou de LibreOffice ne soient pas passés sous forme de variable auquel cas les clients ne pourront pas se connecter.
Pour éviter des problèmes de droits, il est fortement recommander d'exécuter le serveur OpenOffice (ou LibreOffice) sous le même utilisateur que celui de Silverpeas (ici, dans l'exemple, l'utilisateur silverpeas).

#!/bin/bash
  1. /etc/init.d/libreoffice #
    1. BEGIN INIT INFO
  2. Provides: libreoffice
  3. Required-Start: $remote_fs $syslog $network
  4. Required-Stop: $remote_fs $syslog $network
  5. Default-Start: 2 3 4 5
  6. Default-Stop: 0 1 6
  7. Short-Description: Start LibreOffice as a daemon at boot time
  8. Description: LibreOffice as a daemon.
    1. END INIT INFO

PATH=/bin:/usr/bin:/sbin:/usr/sbin

NAME=LibreOffice
DAEMON=/usr/lib/libreoffice/program/soffice.bin
PIDFILE=/var/run/libreoffice.pid
RUN_AS_USER=silverpeas

. /lib/lsb/init-functions

case $1 in
start)
log_daemon_msg "Starting $NAME as a daemon"
start-stop-daemon --start --quiet c $RUN_AS_USER --background --pidfile $PIDFILE --exec $DAEMON - -headless -nodefault -accept='socket,host=localhost,port=8100;urp'
log_end_msg $?
pidof soffice.bin > $PIDFILE
;;
stop)
log_daemon_msg "Stopping $NAME as a daemon"
start-stop-daemon --stop --quiet -c $RUN_AS_USER --signal 15 --pidfile $PIDFILE
log_end_msg $?
;;
status)
status_of_proc -p $PIDFILE $DAEMON $NAME && exit 0 || exit $?
;;
*)
log_action_msg "Usage: /etc/init.d/libreoffice {start|stop|status}"
exit 1
esac

exit 0

Actions

Formats disponibles : Atom PDF