在Apache FOP中覆盖图像上的文本

时间:2016-07-01 22:14:40

标签: java xsl-fo apache-fop

我正在尝试在外部图形上覆盖一个文本块,我能够做到这一点,但只要在图像上呈现文本块,我就会看到此错误:

  

org.apache.fop.layoutmgr.table.TableCellLayoutManager:在未知BPD上调用getContentAreaBPD

我尝试为table-cell,block-container和blocks设置高度,但没有任何帮助。

   <fo:table-cell display-align="center" height="229px">
          <fo:block>
              <fo:block-container z-index="1" top="0px" left="0px">
                  <fo:block height="229px" absolute-position="absolute">
                      <fo:external-graphic scaling="non-uniform" src=url("http://previews.123rf.com/images/nujalee/nujalee1108/nujalee110800004/10410227-Beautiful-green-leaf-isolated-on-white-Stock-Photo-leaf-texture.jpg") content-height="229px" content-width="110px"/>
                  </fo:block>
              </fo:block-container>
              <fo:block-container z-index="2" background-color="#538000" height="20px" width="77px" bottom="-229px" right="0px" absolute-position="absolute">
                  <fo:block color="#333333" font-size="10px" height="20px" font-family="Arial" display-align="center" text-align="center">
                      LEAF
                  </fo:block>
              </fo:block-container>
          </fo:block>
   </fo:table-cell>

任何人都可以帮助我如何解决此错误并指导我可能做错什么。我正在使用ApacheFOP 2.1

1 个答案:

答案 0 :(得分:0)

XSL-Recommendation表示:

  

区域的位置(以及可能的大小)使用“left”,“right”,“top”和“bottom”属性指定。 这些属性指定相对于区域最近的祖先参考区域的偏移量。

     

绝对定位区域从正常流量中取出。这意味着它们对后来的兄弟姐妹的布局没有影响

所以:

  • 无需将绝对定位的fo:block-containerfo:block元素放在其他对象中,它们可以是fo:flow
  • 的直接子元素
  • 我不明白你想要在第二个bottom="-229px"上使用属性fo:block-container实现什么,但它的实际效果是将区域放在身体区域的下方,完全在页面之外;如果您希望对象重叠,请改用top,其值小于其他容器的高度
  • 目前,z-index is not supported by FOP所以它也可以删除;重叠的对象根据文档中的顺序堆叠,因此第一个对象位于下面的对象之下,最后一个对象出现在所有其他对象之上

这是简化的结果,由FOP处理而没有错误:

    <fo:flow flow-name="xsl-region-body">

      <fo:block height="229px" absolute-position="absolute">
          <fo:external-graphic scaling="non-uniform" src="url('http://previews.123rf.com/images/nujalee/nujalee1108/nujalee110800004/10410227-Beautiful-green-leaf-isolated-on-white-Stock-Photo-leaf-texture.jpg')" content-height="229px" content-width="110px"/>
      </fo:block>
      <fo:block-container background-color="#538000" height="20px" width="77px" absolute-position="absolute" top="30px">
          <fo:block color="#333333" font-size="10px" height="20px" font-family="Arial" display-align="center" text-align="center">
              LEAF
          </fo:block>
      </fo:block-container>

    </fo:flow>

(作为最后一点,错误本身可能是由于一个错误)

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