我正在尝试在 XML-FO 文档中使用固定宽度字体创建两个字符的缩进。我正在使用 FOP 翻译它。
不幸的是,当我指定像 "2ch"
这样的长度时,FOP 会产生以下错误消息:
[ERROR] PropertyMaker - Unknown length unit 'ch'
XML-FO 文档声明允许任何 CSS 已知的长度单位,并且 CSS 指定
ch
是 0
字符的宽度。所以 AFAIU 这应该有效,但仍然无效。我也没有找到 FOP 理解的长度单位的具体列表(
ix
也不起作用)。不过,em
是可以理解的。但它代表(即使使用固定宽度字体等宽字体)宽度约为 1.5 个字符。有没有办法指定在等宽字符中缩进两个字符?
是否有 FOP 支持的长度单位的完整列表?
有没有另一种方法可以实现我通过具体数量的字符缩进的目标?我可以使用像
1.3em
这样的 hack,但这可能不准确。 最佳答案
XSL recommendation 中定义的度量单位是:
cm
(厘米) mm
(毫米) in
(英寸) pt
(points) pc
(picas) px
(像素) em
(当前字体大小) FOP 支持所有 ,并添加了
mpt
(毫点),但正如您所注意到的,它们中没有一个是指等宽字体的字符宽度。其他格式化程序可能支持其他度量单位,例如我看到 AntennaHouse XSLFormatter 支持
ch
。FOP 的可能解决方法
如果您只需要一个
text-indent
(即仅用于第一行),您可以使用 不间断空格 :<fo:block>  Lorem ipsum dolor ...</fo:block>
如果您事先知道该块只会生成一行,您还可以使用 保留的常规空格 以便更容易阅读 FO 文件:<fo:block white-space-treatment="preserve"
white-space-collapse="false"> Lorem ipsum dolor ...</fo:block>
在最一般的情况下(如果你想定义一个 start-indent
, end-indent
,...),你可以使用字体信息计算确切的值:java -classpath build/fop.jar:fop/lib/avalon-framework-api-4.3.1.jar:fop/lib/commons-logging-1.0.4.jar:fop/lib/commons-io-1.3.1.jar:fop/lib/xmlgraphics-commons-svn-trunk.jar org.apache.fop.fonts.apps.TTFReader -enc ansi /path/to/font.ttf metrics.xml
metrics.xml
并查找类似于 <char idx="29" wdt="600"/>
的元素(wdt
值可以不同,但对于所有 char
元素应该相同)wdt
是以毫点为单位的字符宽度:将它乘以 font-size
和字符数,你得到你需要的长度例如: 600 x 12 x 2 = 14400mpt = 14.4pt =
font-size
为 12pt 的两个字符的长度关于css - 如何使用 FOP 在 XML-FO 中指定 2ch 的缩进,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46248925/