我正在尝试在XML-FO文档中使用固定宽度字体创建两个字符的缩进。我正在使用FOP进行翻译。
不幸的是,当我指定类似public static void main(String[] args) {
CloseableReentrantLock lock = new CloseableReentrantLock();
try (ResourceLock ignored = lock.lockAsResource()) {
try (ResourceLock ignored2 = lock.lockAsResource()) {
System.out.println(lock.getHoldCount()); // 2
}
}
System.out.println(lock.getHoldCount()); // 0
}
的长度时,FOP会产生以下错误消息:
"2ch"
XML-FO文档声明允许任何CSS已知长度单位,CSS指定[ERROR] PropertyMaker - Unknown length unit 'ch'
是ch
字符的宽度。所以AFAIU应该可以工作,但仍然没有。
我也未能找到FOP理解的长度单位的具体列表(0
也不起作用)。但是ix
被理解了。但它代表(即使使用固定宽度字体等宽字体)宽度约为1.5个字符。
有没有办法在monospace中指定缩进两个字符?
FOP是否支持全面的长度单位列表?
有没有其他方法可以实现我通过具体数量的字符缩进的目标?我可以使用像em
这样的黑客,但这可能不完全正确。
答案 0 :(得分:1)
XSL recommendation中定义的度量单位为:
cm
(厘米)mm
(毫米)in
(英寸)pt
(分)pc
(picas)px
(像素)em
(当前字体大小) FOP支持所有,添加了mpt
(millipoints),但正如您所注意到的,它们都没有引用等宽字体的字符宽度。< / p>
其他格式化程序可能支持其他度量单位,例如我看到AntennaHouse XSLFormatter支持ch
。
如果您只需要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