2010-11-23 34 views
10

Quelqu'un pourrait-il me suggérer un moyen de faire de longs mots (comme les numéros de série) à emballer? J'ai essayé quelques logiciels commerciaux et il n'y a pas de problème. Est-ce un bug de fop ou probablement il y a une solution disponible?XSL-FO fop. Le long texte s'écoule dans les cellules/blocs adjacents, obscurcissant les choses là

Je ne peux pas insérer d'espace de longueur zéro après chaque caractère de chaque mot du document. Cette solution semble fou pour moi.

Répondre

5

La césure pourrait-elle résoudre votre problème? Vous devriez être en mesure d'activer la césure avec un attribut hyphenate="true". Le placement de cet attribut dépendra de l'endroit où vous voulez activer la césure.

Voici un lien vers la conformité des césures de FOP: Apache FOP Compliance Page

Voici un lien vers la spécification XSL: XSL SpeC#hyphenate

Sinon, vous pouvez avoir besoin d'expérimenter avec certains garde des propriétés (comme keep-together.within-line).

+1

Cela ne fonctionne pas. – Alex

11

Vous pouvez spécifier l'attribut wrap-option dans votre fo:block comme ceci:

<fo:block wrap-option="wrap"> ... stuff </fo:block> 

est ici la spécification XSL-FO pour cet attribut:

XSL Définition:

Valeur: non-enroulable | envelopper | possèdes

initial: Emballage

S'applique à: fo: block, fo: inline, fo: numéro de page, fo: page-number-citation

Héritée: oui

pourcentages: N/A

médias: visuel

Les valeurs ont les significations suivantes:

sans enveloppe

Aucune ligne d'emballage sera effectuée.

Dans le cas où les lignes sont plus longues que la largeur disponible du contenu rectangle , le trop-plein sera être traités conformément à la propriété « débordement » indiqué sur la référence de la zone .

wrap

-ligne de rupture se produira si la ligne déborde le bloc disponible largeur. Aucun marqueur spécial ou autre traitement ne se produira.

Spécifie comment le retour à la ligne (découpe de ligne) du contenu de l'objet de mise en forme doit être traité.

Les mises en œuvre doivent prendre en charge la valeur « no-wrap », tel que défini dans la présente Recommandation , lorsque la valeur de « traitements de saut de ligne » est « préserver ».

Vous pouvez également définir l'attribut wrap-option dans un fo:table-cell

<fo:table-cell wrap-option="wrap"> ... </fo:table-cell> 

et les fo:block s au sein hériteront la propriété.

+0

ne fonctionne pas pour moi –

+4

'wrap-option =" wrap "' indique au formateur de ** effectuer un saut de ligne **, mais ce n'est pas une garantie que la rupture de ligne ** trouvera ** un endroit approprié pour un saut de ligne; En outre, 'wrap' est la valeur par défaut de la propriété, il n'est donc généralement pas nécessaire de la définir explicitement. – lfurini

7

La réponse de Zkoh (wrapping) ne vous sera utile que si le texte contient plusieurs mots séparés par des espaces blancs. Dans le cas de mots longs (comme mis en question), la césure est la voie à suivre (comme Daniel l'a suggéré).

Il peut y avoir pas mal de problèmes avec césure dans FOP:

  1. FOP est en utilisant des algorithmes de césure de TeX et à cause de certains problèmes de licences, ces algorithmes (au moins pour certaines langues) ne font pas partie de la distribution binaire FOP standard (comme indiqué here) et doit être téléchargée séparément à partir de OFFO web site. Il existe deux types de fichiers de modèles de césure sur le site Web. Format XML (qui doit être compilé en 1er pour être utilisé avec FOP) et fichier JAR (déjà compilé). Assurez-vous de télécharger la version compilée! L'installation est simple et well documented - il suffit de déposer le binaire OFFO dans le dossier lib FOP et c'est ...
  2. N'oubliez pas de spécifier la langue de votre document et si nécessaire, activez la césure au niveau du bloc (son hérité donc ajoutez-le à l'élément racine et vous devriez être fine) - voir FOP FAQ
+0

Ceci devrait être la réponse acceptée. Le site web OFFO spécifié ici est en panne, voici un autre lien vers [OFFO] (http://offo.sourceforge.net/). Aussi, comme mentionné, la langue xml: lang = "en" devrait être ajoutée à la racine de votre fichier (c'était difficile à comprendre ...). – Sakamiai

1

Utilisez keep-together.within-colonne = "always" au lieu de keep-ensemble = "always" de garder les longues lignes avec dans la cellule de tableau.