我使用的是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"
.
你想 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
当浮动到其他地方时,你会留下一个空块(看起来像断行)。