我正在尝试在 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
但这可能不准确。
中定义的计量单位XSL推荐 https://www.w3.org/TR/xsl/#d0e5752 are:
-
cm
(厘米)
-
mm
(毫米)
-
in
(英寸)
-
pt
(分)
-
pc
(picas)
-
px
(像素)
-
em
(当前字体大小)
FOP 支持所有这些,加上mpt
(毫点),但正如您所注意到的,它们都不是指等宽字体的字符宽度。
其他格式化程序可能支持其他测量单位,例如我看到Antenna House XSL 格式化程序 https://www.antennahouse.com/product/ahf63/ahf-ext.html#ext-unit-conf支持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
-
open metrics.xml
并寻找类似于的元素<char idx="29" wdt="600"/>
(the wdt
值可以不同,但对于所有人来说应该是相同的char
元素)
-
wdt
是以毫点为单位的字符宽度:将其乘以font-size
和字符数,然后你就得到了你需要的长度
例如:600 x 12 x 2 = 14400mpt = 14.4pt = 两个字符的长度font-size
of 12pt
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)