如何使用XSL-FO和FOP 1.0创建两列布局?

时间:2012-07-26 12:04:21

标签: xsl-fo apache-fop

我有一个软件可以从文本文件中创建XSL-FO描述并将其转换为PDF文档。文本文件中的每一行都转换为FO中的fo:block,听起来不对,但我现在无法改变它。我的文档包含1到3页的A4。

我现在需要做的是在现有文本下方添加一个宽约8厘米的图形。它应该是左对齐的。在它旁边,我想放置一个带有(长)描述的文本块。

Layout example

我已经看过几个关于FO的文件并想出了这个:

<fo:block intrusion-displace="block" margin-top="20mm">
 <fo:float float="right">
   <fo:block margin-left="20mm">
    Bacon ipsum dolor sit amet laborum proident...
   </fo:block>
 </fo:float> 
  <fo:external-graphic src="image.png"/> 
</fo:block>

这似乎是我想要的(当然经过一些微调),但不幸的是FOP does not support fo:float

似乎还有一种方法可以创建多个列(没有表格),但我无法弄清楚它是如何工作的。一个人似乎需要一个新的页面,但是如果有可用的空间我需要使用当前页面(我猜我不必关心)。

所以我的问题:有没有其他方法可以在不使用fo:float的情况下构建它?

1 个答案:

答案 0 :(得分:4)

您可以尝试将图像用作背景图像,并留下与图像一样宽的左边距。

<fo:block intrusion-displace="block" margin-top="20mm">
   <fo:block padding-left="20mm" 
       background-image="image.png" 
       background-repeat="no-repeat">
    Bacon ipsum dolor sit amet laborum proident...
   </fo:block>
</fo:block>

如果图像需要进一步处理,只能使用<fo:external-graphic>,则可以使用填充技术和另外一个绝对定位的块容器:

<fo:block intrusion-displace="block" margin-top="20mm">
   <fo:block padding-left="20mm">
    Bacon ipsum dolor sit amet laborum proident...
   </fo:block>
   <fo:block-container absolute-position="absolute">
       <fo:block>
          <fo:external-graphic src="image.png"/>
       </fo:block>
   </fo:block-container>
</fo:block>

第三种选择是使用表格。