在Apache FOP2中内联图像之间的文本

时间:2015-11-24 16:03:33

标签: java apache-fop

我试图在图片之间插入文本test,但是只要我添加文字,我就会在文本的顶部和底部找到间距。

enter image description here

正如我discovered earlier一样,为了摆脱那些破坏图像布局的顶部和底部间距,我需要将font-size设置为0:

enter image description here

但是如果要显示文本,字体大小为零是无用的。

            <fo:block font-size="0" >
                <fo:external-graphic src=" http://www.mycee.com/image/20135-Test-Mockup-V1.0-01_13.jpg"/>
            </fo:block>
            <fo:block background-color="pink" font-size="0pt" >
                <fo:external-graphic src="http://www.mycee.com/image/20135-Test-Mockup-V1.0-01_14.jpg"/>
                test
                <fo:external-graphic src="http://www.mycee.com/image/20135-Test-Mockup-V1.0-01_16.jpg"/>
            </fo:block>
            <fo:block background-color="magenta" font-size="0" >
                <fo:external-graphic src=" http://www.mycee.com/image/20135-Test-Mockup-V1.0-01_17.jpg"/>
            </fo:block>

将文字放在fo-inline内,我至少可以摆脱顶部填充,但是底部仍有填充,这会破坏我的布局。

    <fo:inline font-size="10pt">
    test
    </fo:inline>

enter image description here

在图像之间插入文本的正确方法是什么,而文字不会导致填充显示在顶部或底部?

更新

终于搞定了

<fo:block background-color="pink" line-height="2.4mm" line-stacking-strategy="none" font-size="11pt">
                <fo:table>
                    <fo:table-column/>
                    <fo:table-column/>
                    <fo:table-column/>
                    <fo:table-body>
                        <fo:table-row>
                            <fo:table-cell text-align="left">
                                <fo:block>
                                    <fo:external-graphic
                                            src="http://www.mycee.com/images/20135-Test-Mockup-V1.0-01_14.jpg"/>
                                </fo:block>
                            </fo:table-cell>
                            <fo:table-cell text-align="right">
                                <fo:block>
                                    12345678.90
                                </fo:block>
                            </fo:table-cell>
                            <fo:table-cell text-align="right">
                                <fo:block>
                                    <fo:external-graphic
                                            src="http://www.mycee.com/images/20135-Test-Mockup-V1.0-01_16.jpg"/>
                                </fo:block>
                            </fo:table-cell>
                        </fo:table-row>
                    </fo:table-body>
                </fo:table>
            </fo:block>

enter image description here

如果你放大得足够,你最终会看到一条线,但出于打印的目的,这是完美的。

1 个答案:

答案 0 :(得分:1)

你看到的“填充”可能是由于计算行高的方式。

线高由两种不同的FO属性控制:

  • line-height设置起始值,即从块的文本内容派生的起始值;其默认值为normal,FOP将其计算为1.2 * font-size
  • 如果fo:block包含除简单文字之外的内联元素(fo:inline s,images,...),则
  • line-stacking-strategy控制如何修改起始值;它默认为max-height,意思是(粗略地说)增加行高以适应图像和具有更大字体大小的内联

现在,让我们看看你的具体情况:

  • font-size默认为12pt,这意味着行高的初始值为1.2 * 12pt = 14.4pt;如果图像的高度小于该高度,它们将在顶部和底部显示一些空间
  • 设置font-size="0pt"有点工作,因为初始行高将为0pt,随后会增加到图像的高度

建议更改:

  • 尝试在包含文字和图片的line-height="x" line-stacking-strategy="font-height"元素中使用x(其中fo:block是图片的高度);这些属性的组合效果是将行高设置为确切的给定值

(披露:我是FOP开发人员,但现在不是很活跃)