XLSFO:浮动图像,整版图像。

问题描述 投票:0回答:1

我使用的是Apache fop 来生成一本PDF书,由一个描述摘要内容的XML文件(我生成的,所以我控制了它)和一个包含格式的XSL文件组成。 各种XSL文件应该是用来生成各种PDF的(手稿、平装本等)。

我想在书的文本中包含图片,其中一些图片应该是整页的图片,靠近文本中的某一点,还有一些是内联的(在段落之间居中)。

内容XML应该包含以下元素 <fullpageimg path="img/000_cover.png"><inlineimg path="img/001_face.png">. 全页图片前后XML中的文字应不间断地继续,图片只是出现在自己的页面上,靠近该处。

我使用的内嵌图片的模板是直接的,看起来是这样的。

  <xsl:template match="inlineimg">
    <fo:block text-align="center">
      <fo:external-graphic>
        <xsl:attribute name="src">
          <xsl:value-of select="@path"/>
        </xsl:attribute>
      </fo:external-graphic>
    </fo:block>
  </xsl:template>

这也是预期的效果。 图片如其所愿,作为自己的段落出现。

然而,整页的图片,我想不出如何使其工作。 我尝试了一些教程和示例集中的几种方法,例如: 1.

  <xsl:template match="fullpageimg">
    <fo:block text-align="center">
    <fo:float float="left">
    <fo:block text-align="center">
      <fo:external-graphic>
        <xsl:attribute name="content-width">
          <xsl:value-of select="@width"/>
        </xsl:attribute>
        <xsl:attribute name="src">
          <xsl:value-of select="@path"/>
        </xsl:attribute>
      </fo:external-graphic>
    </fo:block>
    </fo:float>
    </fo:block>
  </xsl:template>

这让所有的全页图像出现在PDF的第一页上(也是无意的),而不使文本漂浮在它周围(也是无意的),所以文本也要穿过图像(当然是无意的)。

我也试过把它的一部分封闭在这样的元素中。

  <fo:block-container absolute-position="absolute" width="214mm" height="301mm">
    <fo:block-container overflow="error-if-overflow" width="214mm" height="301mm">
      ...
    </fo:block-container>
  </fo:block-container>

但这也没有产生我想要的结果(结果各不相同,取决于我插入这些元素的位置,通常是这些元素)。fop 也抱怨输入错误)。)

我的XSL的主模板是这样的。

  <xsl:template match="/doc">
    <fo:root>
      <fo:layout-master-set>
        <fo:simple-page-master ...>
          ...
        </fo:simple-page-master>
        <fo:page-sequence-master master-name="document">
          ...
        </fo:page-sequence-master>
      </fo:layout-master-set>
      <fo:page-sequence master-reference="document">
        ...
        <fo:flow ...>
          <xsl:apply-templates/>
        </fo:flow>
      </fo:page-sequence>
    </fo:root>
  </xsl:template>

如果还需要更多信息,我当然可以提供。

正确的做法是什么? 也许有必要改变主模板吗? 我使用的是 fop 2.4,它应该能够处理以下问题 fo:float 如果只给出简单的东西,如 float="left".

xml xslt layout xsl-fo apache-fop
1个回答
0
投票

你想 float="before" 如果你想让浮动块从当前块中浮出,并让文本在其周围缩小。(参见 https:/www.w3.orgTRxsl11#fo_float)格式化器可以浮动一个带有 float="before" 到当前区域的顶部或者到下一页的同类区域。

我现在找不到具体的信息(FOP的 "知道问题 "页面的链接无法解析),我也不记得FOP的 "部分 "支持是否是针对于 fo:float 是它是否支持 float="before". (遵约页在 https:/xmlgraphics.apache.orgfopcompliance.html。float 属性不支持,但我不知道这怎么可能如果 fo:float 甚至有部分支持)。)

另外,当你把你的浮子放在一个单独的 fo:block当浮动到其他地方时,你会留下一个空块(看起来像断行)。

© www.soinside.com 2019 - 2024. All rights reserved.