当前位置: 首页 > 知识库问答 >
问题:

XSL-FO/Apache FOP:启用连字时如何保持单词在一起

徐皓君
2023-03-14

任务非常简单:防止“donothyphenatethisextremelyword”在 hyphenate=“true” 的块内被连字符。我尝试过:

<root xmlns="http://www.w3.org/1999/XSL/Format" xml:lang="en">
    <layout-master-set>
        <simple-page-master master-name="the-master-name" page-height="29.7cm"
                            page-width="21.0cm" margin-top="1.21cm"
                            margin-bottom=".8cm" margin-left="2.4cm"
                            margin-right="1.5cm">
            <region-body region-name="the-region-body"/>
        </simple-page-master>
    </layout-master-set>
    <page-sequence master-reference="the-master-name">
        <flow flow-name="the-region-body">
            <block hyphenate="true">
                Whereas recognition of the inherent dignity and of the equal and
                inalienable rights of all members of the human family is the
                foundation of freedom, justice and peace in the world, Whereas
                disregard and contempt for human rights have resulted in
                barbarous acts which have outraged the conscience of mankind,
                and the advent of a
                <inline keep-together="always" hyphenate="false" color="red">
                    donothyphenatethisextremelylongword
                </inline>
                world in which human beings shall enjoy freedom of speech and
                belief and freedom from fear and want has been proclaimed as the
                highest aspiration of the common people
            </block>
        </flow>
    </page-sequence>
</root>

结果:

真的没有办法吗?任何帮助将不胜感激。

共有2个答案

逑阳泽
2023-03-14

假设事先知道通道的宽度,还有另一个简单的解决方法:

<fo:inline-container width="27mm">
    <fo:block>mustnotbehyphenated</fo:block>
</fo:inline-container>

这也适用于两端对齐的段落。然而,传递固定的< code >宽度是至关重要的。

宗意蕴
2023-03-14

FWIW,您的示例在 AH 格式化程序中工作正常。将单词包装在带有连字符=“false”fo:block 的 fo:inline-container 中也是如此,但 FOP 2.6 然后将单词放在单独的行上(因为我认为没有指定宽度)。

我发现与FOP2.6一起工作的唯一方法是将fo:inline中的每个字符转换为fo:character;i、 e.,<代码>

或者,您可以删除 fo:inline 并在每个 fo:字符上重复连字符:

您可以删除< code > keep-together = " always " 。没见有什么效果。

制作自己的 fo:角色不应该是必要的。XSL 1.1 建议书的第 1.1.2 节 “格式设置”包括(紧跟在图形之后):

作为对象化步骤的一部分,结果树中出现的字符将替换为fo:character节点。

我不知道任何格式化程序在实践中都会这样做,因为它会爆炸对象的数量,(通常)没有什么好的效果,但格式化程序的行为应该像适用于fo:character的继承属性适用于一行文本中的每个字符一样。

 类似资料:
  • 我想在我的标签上使用属性 这是我的xml的一个例子:

  • 我是否正确,当使用XSL-FO(Apache FOP)生成pdf时,无法使用Windows 7 c:\windows\fonts*中的字体? 我刚刚安装了OTF格式的“helvetica neue”字体。 根据https://xmlgraphics.apache.org/fop/trunk/fonts.html “对系统字体的支持依赖于JavaAWT子系统的字体度量信息。通过操作系统注册,AWT子

  • 我有一个软件,可以从文本文件创建描述,并将其转换为PDF文档。文本文件中的每一行都被转换为fo中的,这听起来是错误的,但我现在无法更改。我的文件包含1到3页A4纸。 我现在需要做的是在现有文本下方添加一个宽度约为8厘米的图形。它应该是左对齐的。在它旁边,我想放置一个带有(长)描述的文本块。 我查看了FO的几个文档并提出了这个: 这似乎是我想要的(当然经过一些微调),但不幸的是,FOP还不支持<co

  • 我将为我的后期项目创建一个移动的圆圈,圆圈将继续移动,它的内部颜色将像颜色发射一样变化,变化的颜色将在5个级别中从小圆圈到大圆圈,所以如何保持每个颜色的变化保持一段时间,我希望这些代码与线程一起出现,所以我创建了两个线程,一个控制圆圈移动,另一个控制圆圈的内部颜色发射,这里是我的代码:

  • 问题内容: 给定一个相对简单的CSS: 怎样让这个字符串停留约束到 的 150 ,和包装上的一个新的线 连字符 ? 问题答案: 用以下命令替换连字符: 它称为“软”连字符。

  • 我使用的是FOP 2.1版。我有一个xsl-fo模板,我想在其中显示图像: 有些图像有一个像这样的网络地址: 但其他图像来自我的网络服务器,地址如下: 这响应于endpoint: 有没有办法让 fo:external-graphic 接受这两个不同的 url?或者我需要做一些额外的事情才能让它工作,因为目前当图像来自网络服务器时,生成的 pdf 文件中没有图像,只有一个空白。 编辑:下面是将XML