28120 sujets

CSS et mise en forme, CSS3

Modérateur
Bonjour,

Dans un système d'administration que je développe, l'usager pourra générer un rapport en MS Word (2000 ou 2002). La page dynamique appelée par l'usager est écrite en (x)html et css. Le serveur renvoi cette page en tant que document Word attaché. Tout se passe bien, le document Word est généré, téléchargé et formatté convenablement.

Ce que j'aimerais faire, c'est insérer une entête à chaque page, exactement comme quand on va dans le menu de Word : Voir / Entête et pied de page. Peu importe le nombre de pages, l'entête apparaît toujours en haut. Peut-être est-ce possible avec CSS ? Le problème c'est que je ne peux pas savoir combien il y aura de page. La taille de la police peut être changée par l'usager donc il faut absolument que la technique utilisée soit la même que l'insertion d'un header et footer dans MS Word.

Quelqu'un a une idée comment ajouter un header et un footer à un document Word, en passant par (x)html et/ou CSS ?
Modérateur
Peux-tu être moins explicite parce que là j'ai du mal à absorber autant d'informations du même coup ! Smiley alcoolique

Ton message essaye-t-il de me signaler que la solution se trouve du côté serveur ? N'y a-t-il pas moyen, sans passer par une application serveur, d'insérer un header et footer à un document MS Word en écrivant ce dit document en html et css ?
beh je sais aps mais tu es pas super explicite non +
tu génères comment ton fichier Word ?
pour moi de l'asp ou du php génère un objet word, le remplis, puis le balance au user. Donc c'est au moment du remplissage qu'il faut ajouter ce que tu veux avec les API word. Donc CSS/HTML n'a rien à voir là dedans, enfin je pense...
Modérateur
Comme je disais, pour générer dynamiquement mon document Word, j'écris simplement une page en (x)html et css que je renvoi à l'usager en tant que document Word. Smiley cligne

Le CFHEADER est un tag Coldfusion permettant d'indiquer le type de document envoyé à l'utilisateur.


<cfheader name="Content-Type" value="application/msword">
<cfheader name="Content-Disposition" value="attachment; filename=rapport.doc">

<html xmlns:w="urn:schemas-microsoft-com:office:word">
   <head>
      <xml>
      <w:WordDocument>
      <w:View>Print</w:View>
      <w:SpellingState>Clean</w:SpellingState>
      <w:GrammarState>Clean</w:GrammarState>
      <w:Compatibility>
      <w:WrapTextWithPunct/>
      </w:Compatibility>
      <w:DoNotOptimizeForBrowser/>
      </w:WordDocument>
      </xml>
   ... etc...
   ... reste du document html ...


Bref, tu écris ta page en html et css, et c'est le serveur qui envoi au navigateur le document en tant que document Word. Il "change" le mime-type en quelque sorte. L'écriture du contenu du document, et le formattage de celui-ci, passe par html et css. Je voudrais donc trouver une solution, en utilisant ces langages, pour "dicter" à MS Word d'insérer un header et footer sur chaque page.

C'est surement possible via un CSS Print, mais mes recherches sur google n'ont pas été très satisfaisantes.

Donc oui, le CSS/HTML à quelque chose à voir là-dedans puisque le reste du document est basé là-dessus. Mais peut-être que pour le header et footer, je devrai utiliser une API quelconque, d'où ma question. Smiley smile
Modifié le 28 Dec 2004 - 18:28
Heu... CSS print est un "subset" de CSS2.1 destiné spécifiquement aux systèmes d'impression à capacité limité.

Ce qui serait éventuellement pertinent, c'est CSS2.1 où tu retrouveras un mécanisme d'en-tête et de pied de page. Mais CSS2.1 n'est actuellement implémenté qu'à titre expérimental par quelques navigateurs (Opera, peut-être Firefox, Mozilla ou Safari, pas IE).

Enfin, il s'agit dans tous les cas:
- d'une technique liée uniquement à l'impression, qui me semble hors sujet ici.
d'une technique totalement dépendante des configurations utilisateurs

J'avoue ne pas très bien comprendre ta démarche. il s'agit, si j'ai bien compris, d'insérer des en-têtes dans un document Word ? Mais ce document n'est pas destiné à être affiché dans un navigateur ? Auquel cas, CSS est totalement hors sujet.
Modérateur
Laurent Denis a écrit :

J'avoue ne pas très bien comprendre ta démarche. il s'agit, si j'ai bien compris, d'insérer des en-têtes dans un document Word ? Mais ce document n'est pas destiné à être affiché dans un navigateur ? Auquel cas, CSS est totalement hors sujet.


Hors sujet, je n'en suis pas convaincu. Bonne technique utilisée, peut-être pas. C'est à voir. Comme vous le savez, on peut convertir un document Word en fichier html, et l'inverse aussi. Grosso modo, je crée un fichier html que je convertis par la suite en document Word, sans avoir recours à un API quelconque. Je place mes titres, mes paragraphes, mes tableaux et même des sauts de page. Word affiche le document en interprétant le html et les CSS derrière. Donc, je continue à croire que tout ceci à quelque chose à voir avec le html et les css. Si je peux faire des sauts de page à Word via CSS, pourquoi ne pourrais pas insérer un header et footer ?

Je ne dis pas que c'est forcément possible, mais j'ai espoir que oui. Tout ca, bien sûr, sans passer par un API.
Modérateur
Finalement, je vais peut-être laisser tomber MS Word. Après tout, c'est pour l'impression de factures et je peux très bien utiliser le navigateur lui-même pour générer le rapport et l'imprimer. Je trouvais quand même intéressant d'avoir des documents MS Word comme rapports, plutôt que des .htm. Mais bon, puisque j'écris le rapport en html et css, aussi bien de l'enregistrer en tant que tel et a bien y réfléchir, je trouve que des documents Word n'apportent rien de plus, bien au contraire.

Je me suis donc penché sur Running Headers and Footers mais à moins d'avoir fait erreur, lorsque je fais un aperçu avant l'impression, je ne vois pas du tout la pagination sur FireFox. Il me faudrait au moins la pagination, mais je vais devoir avoir aussi un header et footer plus tard.


<style>
<!--
@page {
counter-increment: pages;
   @bottom-center {
   font-family: Times, Palatino, serif; 
   font-size: 12pt;
   font-weight: normal;
   content: "Page " counter(pages);
   }
}
... reste des CSS ...
-->


Est-ce donc que FireFox n'est pas (encore) capable d'interpréter ce code CSS ? Existe-t-il des plugins quelconques ? Le système d'administration est destiné à une organisation précise et nous avons le contrôle sur le navigateur utilisé. C'est nous qui allons faire la configuration nécessaire donc les solutions qui ne fonctionnent que dans des configurations précises feront parfaitement l'affaire.

Petite précision : c'est pour un rapport affichant les détails d'une série de factures.

Des idées ?
Bon alors
je ne pouvais pas deviner que c'était avec Coldfusion et qu'il permettait de renvoyer un doc (ce qui est étrange d'ailleur)

As-tu essayer de faire un doc word avec entête et pied de page et de le convertir en HTML avec word (comme tu en parles...) et de voir ce que donne le résultat niveau code ? et puis de le réimporter sous word pour voir s'il garde la mise en page. Smiley cligne
Modérateur
Pourquoi serait-ce étrange ? Smiley smile En php, tout comme en Coldfusion, on voit souvent ce genre de chose. Un exemple :


<img src="monimage.php?ID=102" ... />


Dans la page monimage.php est fait une requête SQL sur une base de données pour obtenir l'image correspondant à l'ID 102, et le serveur renvoi monimage.php en tant qu'une image, et non un document php. Dans les langages serveurs que je connais, tu peux toujours changer le mime-type du document appelé.

J'ai essayé aussi de créer les entêtes et pied de page dans Word, et d'enregistrer le document en html. J'ai beau regarder la source, tout ce que je vois, c'est un css pour positionner un header, mais je ne vois aucun balisage pour le header lui-même. Je ne trouve pas le texte que j'avais écris. Il semblerait que ce genre de code s'écrive dans le fichier lui-même, et non dans le code source html de celui-ci. Smiley rolleyes

Mais comme je disais, j'ai le goût de laisser tomber Word qui en fait, n'apporte rien de plus. Si j'arrive à faire ça dans Firefox, je vais être tout heureux ! Smiley biggrin

À bientôt !
Modifié le 29 Dec 2004 - 15:23
Merkel a écrit :
tu peux toujours changer le mime-type du document appelé.

Oui mais il existe un mime-type standard pour word ? Smiley eek
Merkel a écrit :
J'utilise application/msword. Tu peux jeter un coup d'oeil aux différents mime-type.

ok Smiley eek

et si le gars à pas word ? Smiley biggol
Modérateur
Essaye pas ! Tu m'auras pas ! Smiley biggrin

En fait, si tu propose des documents à télécharger, que ce soit des .doc, des .xls, des .mpg, des .pdf ou des .pk3 (quake III Arena, quand tu nous tiens), eh bien forcément, la personne est consciente qu'elle doit avoir le logiciel ou le jeu en question, ne serait qu'en l'écrivant au-dessus de la liste des fichiers. Ceci dit, le code que j'utilise n'ouvre pas Word dans le navigateur. Ca force le téléchargement du fichier.

Pour mon cas, c'est pour un système d'administration. Donc si je met des .doc comme rapport, leur ordinateur aura Ms Word d'installé. C'est nous qui allons configurer leur environnement de travail. Smiley cligne Il reste tout de même, comme je disais plus haut, que je préférerais faire l'affichage et l'impression des rapports directement dans le navigateur. L'enregistrement en format .doc sera plus une fonctionnalité adjacente qu'autres choses.
Modifié le 29 Dec 2004 - 15:39
nous on fait ça avec du pdf mais pas du tout comme toi
on le prépare déjà au niveau serveur et après on le balance à l'user (comme si c'était un fichier enregistré sur le serveur)
Modérateur
Ca dépend. Je vais prendre des exemples concrets.

Tu veux mettre un fichier pdf téléchargeable sur ton site, mais uniquement disponible pour ceux qui sont logués. Tu met donc ton fichier pdf en dehors du root, donc innaccessible par le web en tappant l'adresse exacte du fichier. Ensuite, tu fais une page Download.php, que l'utilisateur appele. Cette page contient un code qui vérifie si l'utilisateur est logué en vérifiant une variable de session par exemple, et si c'est positif, tu change le mime-type de Download.php pour celui du PDF en précisant l'adresse du fichier sur le serveur. Le serveur renvoi donc le document PDF à l'utilisateur.

Pour ce qui est de créer un document pdf à la volée, oui nous aussi, en coldfusion, on crée le fichier au niveau du serveur et on le balance après à l'utilisateur. Pour ce qui est de Word, c'est un peu différent puisqu'il peut ouvrir les documents html et les interpréter correctement. Dans le fond, il est créé lui aussi au niveau du serveur et balancé après à l'utilisateur.
Modifié le 29 Dec 2004 - 15:52
En fait, tu m'a donné la réponse je suis totalement HS Smiley lol . Je n'avais pas bien saisi la question initiale.
Le cms en question permet aux rédacteurs de mettre en ligne (entre autres) directement des documents word, openoffice etc. depuis leur format natif, un serveur transforme le tout en (x)html valide de ce que j'en comprend, si tant est que le rédacteur est bien "balisé" son document de traitement texte, en utilisant des titres, des paragraphes etc. et pas mis du gras pour faire croire à un titre. On en reviens toujours au mêmes questions en fait. Smiley biggrin