- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 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
(分)pc
(皮卡)px
(像素)em
(当前字体大小)FOP 支持所有这些,另外还有 mpt
(毫点),但正如您所注意到的,它们都不是指等宽字体的字符宽度。
其他格式化程序可能支持额外的度量单位,例如我看到 AntennaHouse XSLFormatter支持ch
.
如果你只需要一个 text-indent
(即仅针对第一行),您可以使用不间断空格:
<fo:block>  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
, ...),你可以使用字体信息计算准确的值:
创建字体指标
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/
package practicejava; public class Query { public static void main(String[] args) { char
因为我很困惑其中会存储什么。它是 ascii 值还是“z”,因为有些网站说它存储 ascii,有些网站说它存储“z”。链接说答案是“z”:http://cprogrammingworld4u.blog
这个问题在这里已经有了答案: mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows etc... expec
我无法将字符指针数组 s 的字符存储到字符数组 ch 中: int main() { char *s; s = malloc(1024 * sizeof(char));
我有这个代码: int main() { char ch[15]; cout<
在看《C++ Primer Plus 5th edition》时,看到了这样一段代码: cin.get(ch); ++ch; cout void print_type(cha
这行代码做了什么? char_to_ix = { ch:i for i,ch in enumerate(sorted(chars)) } ch:i 是什么意思? 最佳答案 这是@han solo 中提
这行代码做了什么? char_to_ix = { ch:i for i,ch in enumerate(sorted(chars)) } ch:i 是什么意思? 最佳答案 这是@han solo 中提
我在关注《C Primer Plus》这本书,遇到这样一段代码: // echo_eof.c -- repeats input to end of file. #include int main(v
这个问题在这里已经有了答案: Difference between int* a and int *a [duplicate] (2 个答案) Why is the asterisk before
我正在运行单个 goroutine 来处理与某些用户相关的消息 channel 。处理消息后,用户状态由 goroutine 更新并存储在数据库中。当对数据库的请求正在进行时,可以将许多消息发送到 c
这是完整的代码: s = 'life is short, stunt it!!?' from string import punctuation tbl = str.maketrans({ord(ch
在 C++ 中,(int) ch 是否等同于 int(ch)。 如果不是,有什么区别? 最佳答案 它们是同一个东西,也和(int)(ch)一样.在 C++ 中,通常首选使用命名转换来阐明您的意图: 使
我在 php 中使用 cURL。注意到每次启动 curl 案例时,人们总是把: $ch=curl_init(); “$ch”是什么意思? curl -F template_invoke_name='s
我正在编写与对齐相关的代码,如果给定的指针正确对齐,却没有标准的功能测试,这让我感到非常惊讶。 似乎互联网上的大多数代码都使用(long)ptr或 reinterpret_cast(ptr)测试对齐,
这个问题已经有答案了: C skipping one command of a function? [duplicate] (2 个回答) 已关闭 5 年前。 scanf("%c", &ch ) sc
然后我遇到了系统调用“write”,我尝试将“putchar”与“write”进行比较。现在,我对上面的代码行感到困惑。 最佳答案 putchar 是一个库函数。它调用 write 系统调用将字符写入
在 codechef 上用于更快输入输出的许多解决方案中,我遇到过这个表达式,但我无法理解它,因为我没有很多经验。 inline int scan( ) { int n=0; int ch=getch
这个问题在这里已经有了答案: What does space in scanf mean? [duplicate] (6 个答案) 关闭 7 年前。 像这样在scanf中加一个空格的目的是什么 sc
我的 spring-boot 应用程序中有以下 logback.xml: ... ...
我是一名优秀的程序员,十分优秀!