Ensemble columnwidth d'une table dans XWPFTableCell (docx)
Je suis de la génération d'un fichier docx avec apache poi. Dans le wordfile, j'ai ajouter des tableaux, dont les colonnes ont une largeur je voudrais voir fixes.
Actuellement, j'utilise la technique décrite ici: http://apache-poi.1045710.n5.nabble.com/Is-there-a-way-to-set-the-width-of-a-column-in-XWPFTableCell-td5711491.html
Fondamentalement, ce qui suppose la mise en
cell.getCTTc().addNewTcPr().addNewTcW().setW(BigInteger.valueOf(cols[j]));
sur chaque cellule de cette colonne.
Le problème est que si le fichier ne s'ouvre parfaitement dans MS Word, open office interprète les valeurs que j'ai mis à la columnwidth différemment. Alors que MS Word apparemment il assume la 20-ème d'un point que les unités, open office semble utiliser les points de la place, et, par conséquent, toutes les colonnes sont 20 fois plus large lorsque j'ouvre le document généré dans OO.
Généralement quand je vois quelque chose de bizarre dans la sortie générée, j'ai décompresser le fichier docx, voir ce que la valeur doit être et modifier mon code. Mais open office ne semble pas être en mesure d'enregistrer sur docx, donc je ne peux pas changer la valeur d'OO l'enregistrer en arrière et de voir si un Mot encore, interprète le document correctement dans le but de trouver un cross-application de la solution.
Aucune idée de comment je régler la largeur de la colonne de la table de sorte que les deux OO et MS Wordt l'interprète de la même manière?
OriginalL'auteur Yves V. | 2013-11-18
Vous devez vous connecter pour publier un commentaire.
Réponse extraite à partir de la question:
Il a été récemment m'a fait remarquer que LibreOffice est en mesure d'enregistrer sur docx. En modifiant le fichier généré et l'enregistrement et la décompilation du résultat, j'ai été en mesure de résoudre le problème.
Clé est de mettre explicitement la largeur de la table elle-même d'abord. Le mot ne semble pas se préoccuper de sa présence, et OpenOffice/LibreOffice sont en mesure de rendre le tableau correctement.
Ainsi, après la création de la table, j'ai fait comme suit:
OriginalL'auteur
De ne pas toucher à des cellules individuelles.
Ajouter une GRILLE:
La grille définit les largeurs de colonnes entières. Vous n'avez pas besoin de faire des cycles d'une largeur de chaque cellule. Il fonctionne dans LibreOffice et GoogleDocs.
Pour regarder le seted largeur dans MS Word, vous pouvez définir les largeurs de cellules dans la première ligne:
OriginalL'auteur nEraquasAr
Lors de la création de la table, la mise en page est réglé sur "auto" par défaut donc la largeur de la cellule augmente toujours de suivre la longueur de la chaîne. Comme par OpenXML balisage, il a un look comme
w:tblPr
w:tblLayout w:type="auto"
la solution est de définir la mise en page de fixe et de régler la personne la longueur de la colonne
w:tblPr
w:tblLayout w:type="fixed"
Voici le pve de code pour la mise disposition de table:
Voici comment définir l'individu largeur:
les longueurs de colonnes sont en twentieths d'un point (dxa) ou 1/1440 pouces.
OriginalL'auteur sassyshin
C'est une importante et très délicate élément. Je l'ai résolu en utilisant la méthode générique de réglage de la largeur d'une cellule de tableau.
Alexander (ce n'est pas bon). ok je vais prendre votre suggestion, mais s'il vous plaît ne mettez pas votre nez. c'est le lieu du partage de la connaissance et non des arguments.
OriginalL'auteur Rahul khanvani