gpt4 book ai didi

css - 如何使用 FOP 在 XML-FO 中指定 2ch 的缩进

转载 作者:行者123 更新时间:2023-11-28 09:56:25 25 4
gpt4 key购买 nike

我正在尝试在 XML-FO 文档中使用固定宽度的字体创建两个字符的缩进。我正在使用 FOP 翻译它。

不幸的是,当我指定像 "2ch" 这样的长度时,FOP 会生成此错误消息:

[ERROR] PropertyMaker - Unknown length unit 'ch'

XML-FO 文档声明允许任何 CSS 已知的长度单位,并且 CSS 指定 ch0 字符的宽度。所以 AFAIU 这应该有效,但仍然无效。

我也未能找到 FOP 理解的具体长度单位列表(ix 也不起作用)。不过,em 是可以理解的。但它表示(即使在使用固定宽度字体等宽字体时)宽度大约为 1.5 个字符。

有没有办法指定等宽两个字符的缩进?

是否有 FOP 支持的完整长度单位列表?

是否有另一种方法可以实现缩进具体字符数的目标?我可以使用像 1.3em 这样的 hack,但这可能不准确。

最佳答案

XSL recommendation 中定义的计量单位是:

  • cm (厘米)
  • mm (毫米)
  • in (英寸)
  • pt (分)
  • pc (皮卡)
  • px (像素)
  • em (当前字体大小)

FOP 支持所有这些,另外还有 mpt (毫点),但正如您所注意到的,它们都不是指等宽字体的字符宽度。

其他格式化程序可能支持额外的度量单位,例如我看到 AntennaHouse XSLFormatter支持ch .

FOP 的可能解决方法

如果你只需要一个 text-indent (即仅针对第一行),您可以使用不间断空格:

<fo:block>&#x00A0;&#x00A0;Lorem ipsum dolor ...</fo:block>

如果您事先知道该 block 将只生成一行,您还可以使用保留的常规空格,以便于 FO 文件的可读性:

<fo:block white-space-treatment="preserve" 
white-space-collapse="false"> Lorem ipsum dolor ...</fo:block>

在最一般的情况下(如果你想定义一个 start-indent , end-indent , ...),你可以使用字体信息计算准确的值:

  1. 创建字体指标

    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

  2. 打开 metrics.xml并寻找类似于 <char idx="29" wdt="600"/> 的元素(wdt 值可以不同,但​​所有 char 元素都应该相同)

  3. 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com