12
votes

Xsl-fo fop. Texte long circule dans des cellules adjacentes / blocs, obscurcissant des choses là-bas

Quelqu'un pourrait-il me suggérer un moyen de faire des mots longs (comme des numéros de série) pour être enveloppés? J'ai essayé du logiciel commercial et il n'y a pas de tel problème. Est-ce un bug de fop ou probablement une solution disponible?

Je ne peux pas insérer l'espace zéro de la longueur après chaque caractère de chaque mot dans le document. Cette solution semble insensée pour moi.


0 commentaires

6 Réponses :


6
votes

L'hyphénation résolvait votre problème? Vous devriez être capable d'activer l'hyphenation avec un d'un hyphenate = "true" attribut. Le placement de cet attribut dépendra de l'endroit où vous souhaitez activer l'hyphénation.

Voici un lien vers la conformité de l'hyphénation de FOP: Apache FOP Page de conformité

Voici un lien vers la spécification XSL: spécific xsl #hyphénate

Sinon, vous devrez peut-être expérimenter avec certaines propriétés (comme restes-ensemble.Within-line ).


0 commentaires

13
votes

Vous pouvez spécifier l'attribut wrap-option dans votre fo: block code> comme: xxx pré>

voici la spécification XSL-FO pour cet attribut: P >

xsl Définition: strong> p>

valeur em>: non-enveloppement | enveloppement | hériter p>

initiale em>: enveloppe p>

s'applique à em>: FO: Block, FO: Inline, FO: Numéro de page, FO: Page-Number-citation p>

hérité em>: oui p>

pourcentages em>: n / a p>

média em>: visuel p>

valeurs ont les significations suivantes: strong> p>

no-wrap em> p>

Aucune emballage de ligne ne sera effectuée. P>

Dans le cas où les lignes sont plus longues que la largeur disponible du rectangle de contenu, le trop-plein va être traité conformément à la Propriété "Overflow" spécifiée sur le zone de référence. p>

envelopper em> p>

La rupture de ligne se produira si la La ligne débordne le bloc disponible largeur. Pas de marqueurs spéciaux ou d'autres le traitement se produira. P>

Spécifie la manière dont l'emballage de ligne (rupture de ligne) du contenu de la L'objet de formatage doit être manipulé. p>

Les implémentations doivent soutenir la valeur "sans emballage", telle que définie dans cette Recommandation, quand la valeur de "Traitement ligneux" est "conserver". P> blockQuote>

Vous pouvez également définir l'attribut code> OPTION CODE> dans un FO: Cellule de table CODE> P>

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


1 commentaires

enveloppe-option = "wrap" indique au formateur de Effectuer la casseur de ligne , mais ce n'est pas une garantie que la rupture de ligne trouve A lieu approprié pour une pause de ligne; De plus, wrap est la valeur de la propriété par défaut, il est donc généralement inutile de la définir explicitement.



10
votes

La réponse de ZKOH (warning) vous aidera uniquement si le texte contient plusieurs mots divisés par des espaces blancs. En cas de mots longs (comme tendus en question), une hyphénation est une voie à suivre (comme le suggérait Daniel).

Il peut y avoir assez de problèmes avec une hyphénation dans FOP:

  1. FOP utilise des algorithmes d'hyphenation de TeX et en raison de certains problèmes de licence, ces algorithmes (au moins pour certaines langues) ne font pas partie de la distribution binaire de FOP standard (comme indiqué ici ) et doit être téléchargé séparément de Site Web offo . Il existe deux types de fichiers de modèle d'hyphenation sur le site Web. Format XML (qui doit être compilé le 1er à utiliser avec FOP) et le fichier JAR (déjà compilé). Assurez-vous de télécharger la version compilée! L'installation est simple et bien documenté - il suffit de déposer le binaire officiel dans le dossier LIB de FOP et c'est-à-dire. ..
  2. N'oubliez pas de spécifier la langue de votre document et, si nécessaire, activez l'hyphenation au niveau du bloc (son héritée, alors ajoutez-la à l'élément racine et vous devez être bien) - voir FOQ FAQ

1 commentaires

Cela devrait être la réponse acceptée. Le site Web officiel spécifié ici est en panne, voici un autre lien vers offo . De plus, comme mentionné, la langue XML: LANG = "EN" doit être ajoutée à la racine de votre fichier (c'était difficile à comprendre ...).



2
votes

Utilisez restes-ensemble.WithIn-colonne = "toujours" au lieu de rester ensemble = "toujours" de garder de longues lignes avec une cellule de table.


0 commentaires

1
votes

La question concerne les numéros de série, pas sur les mots de dictionnaire. Spécification de HYPHENATE = "TRUE" est utile uniquement lorsque le dictionnaire d'hyphenation ou l'algorithme d'hyphenation peut avoir un coup d'œil avec succès les mots dans le texte. Les numéros de série généreraient rarement des séquences pouvant être utilement hyphénates comme si elles sont des mots.

Vous pouvez, bien sûr, utilisez XSLT pour ajouter des espaces de largeur zéro dans du texte dans les cellules du tableau plutôt que de le faire manuellement. Stackoverflow aime les questions en double (voir https://stackoverflow.blog/2010/11/16/dr-StrangeDupe-or-How--Learned-a-stop-worrying-and-love-duplication/ ), mais tout de même , veuillez consulter les réponses dans XSL-FO: Force Wrap On Table Entrées .


0 commentaires

1
votes

pour le débordement de texte Problème Utilisez Kee-ensemble = "auto" attribut.  Entrez la description de l'image ici

Numéro de débordement de texte

 Entrez la description de l'image ici

version fixe après avoir utilisé maintenir = "auto" attribut.


0 commentaires