2

我正在使用 xsl-fo 将分配的文本加载到 PDF 中。但是当它加载时,它会完全从边框到边框填充页面。有没有办法防止文本能够越过之前、之后、开始和结束块,或者我应该在包含我的文本的块上放置边距?

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:output method="xml" indent="yes" />
<xsl:template match="/">
    <fo:root>
        <!-- overall layout -->
        <fo:layout-master-set>
            <fo:simple-page-master master-name="forSalePage">
                <fo:region-body/>
                <fo:region-before   extent="1in" background-color="#0000FF" />
                <fo:region-after    extent="1in" background-color="#0000FF" />
                <fo:region-start/>
                <fo:region-end/>
            </fo:simple-page-master>
        </fo:layout-master-set>

        <!-- page content -->
        <xsl:for-each select="ovgs/forSale/game">
            <fo:page-sequence master-reference="forSalePage">
                <fo:flow flow-name="xsl-region-body">
                    <fo:block text-align="center" margin-top="0.1in">Pros:</fo:block>
                    <xsl:for-each select="review/pros/pro">
                        <fo:block text-align="center">-<xsl:value-of select="." /></fo:block>
                    </xsl:for-each>
                    <fo:block text-align="center" margin-top="0.1in">Cons:</fo:block>
                    <xsl:for-each select="review/cons/con">
                        <fo:block text-align="center">-<xsl:value-of select="." /></fo:block>
                    </xsl:for-each>
                    <fo:block page-break-before="always" margin-top="1.1in" margin-right="1in" margin-left="1in">Content:</fo:block>
                    <xsl:for-each select="review/content/*">
                        <xsl:choose>
                            <xsl:when test=". = not(node())">
                                <fo:block margin-top="0.1in" margin-right="1in" margin-left="1in"><xsl:value-of select="./preceding::text()[1]" /></fo:block>
                            </xsl:when>
                            <xsl:when test=". = text()">
                                <fo:block text-align="center" margin-top="0.1in"><fo:external-graphic content-height="scale-to-fit" height="1in"><xsl:attribute name="src">url('<xsl:value-of select="./@url" />')</xsl:attribute></fo:external-graphic></fo:block>
                                <fo:block text-align="center" margin-right="1in" margin-left="1in"><xsl:value-of select="." /></fo:block>
                            </xsl:when>
                            <xsl:otherwise/>
                        </xsl:choose>
                    </xsl:for-each>
                    <fo:block margin-right="1in" margin-left="1in" margin-top="0.1in"><xsl:value-of select="review/content/p[last()]/following::text()[1]" /></fo:block>
                </fo:flow>
            </fo:page-sequence>
        </xsl:for-each>
    </fo:root>
</xsl:template>

那是显示 xml 文件的 Pros、Cons 和 Review 内容的代码。它正确显示所有信息和图片,并在 Cons 之后插入分页符。但是问题在于评论内容对于一页来说太多并且显示在之后和之前区域上。

What I get:           What I want:
 ______________       ______________
|              |     |              |
|  Pros        |     |  Pros        |
|    Blabla    |     |    Blabla    |
|              |     |              |
|  Cons        |     |  Cons        |
|    Blabla    |     |    Blabla    |
|              |     |              |
|              |     |              |
|______________|     |______________|
 ______________       ______________
|              |     |              |
|  Content     |     |  Content     |
|              |     |              |
|  ~~~~~~~~~~  |     |  ~~~~~~~~~~  |
|  ~~~~~~~~~~  |     |  ~~~~~~~~~~  |
|  ~~~~~~~~~~  |     |  ~~~~~~~~~~  |
|  ~~~~~~~~~~  |     |  ~~~~~~~~~~  |
|  ~~~~~~~~~~  |     |  ~~~~~~~~~~  |
|__~~~~~~~~~~__|     |______________|
 ______________       ______________
|  ~~~~~~~~~~  |     |              |
|  ~~~~~~~~~~  |     |  ~~~~~~~~~~  |
|  ~~~~~~~~~~  |     |  ~~~~~~~~~~  |
|  ~~~~~~~~~~  |     |  ~~~~~~~~~~  |
|              |     |  ~~~~~~~~~~  |
|              |     |  ~~~~~~~~~~  |
|              |     |              |
|              |     |              |
|______________|     |______________|

以下是地区及其名称:

 ______________
|    Before    |
|______________|
| S|        |  |
| t|        |E |
| a|  Body  |n |
| r|        |d |
| t|        |  |
|__|________|__|
|    After     |
|______________|

(PS 正文延伸到页面边框,而不仅仅是其他区域)

4

2 回答 2

4

您似乎在这里错过了两件事:

一、页面的宽度和高度,<fo:simple-page-master master-name="forSalePage"><fo:simple-page-master master-name="forSalePage" page-height="11in" page-width="8.5in">

二、换<fo:region-body/><fo:region-body margin="1in"/>

于 2013-05-22T08:27:11.543 回答
1
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:output method="xml" indent="yes" />
<xsl:template match="/">
    <fo:root>
        <!-- overall layout -->
        <fo:layout-master-set>
            <fo:simple-page-master master-name="forSalePage">
                <fo:region-body margin="1in" />
                <fo:region-before   extent="1in" background-color="#0000FF" />
                <fo:region-after    extent="1in" background-color="#0000FF" />
                <fo:region-start/>
                <fo:region-end/>
            </fo:simple-page-master>
        </fo:layout-master-set>

        <!-- page content -->
        <xsl:for-each select="ovgs/forSale/game">
            <fo:page-sequence master-reference="forSalePage">
                <fo:flow flow-name="xsl-region-body">
                    <fo:block text-align="center" margin-top="0.1in">Pros:</fo:block>
                    <xsl:for-each select="review/pros/pro">
                        <fo:block text-align="center">-<xsl:value-of select="." /></fo:block>
                    </xsl:for-each>
                    <fo:block text-align="center" margin-top="0.1in">Cons:</fo:block>
                    <xsl:for-each select="review/cons/con">
                        <fo:block text-align="center">-<xsl:value-of select="." /></fo:block>
                    </xsl:for-each>
                    <fo:block page-break-before="always" margin-top="0.1in">Content:</fo:block>
                    <xsl:for-each select="review/content/*">
                        <xsl:choose>
                            <xsl:when test=". = not(node())">
                                <fo:block margin-top="0.1in"><xsl:value-of select="./preceding::text()[1]" /></fo:block>
                            </xsl:when>
                            <xsl:when test=". = text()">
                                <fo:block text-align="center" margin-top="0.1in"><fo:external-graphic content-height="scale-to-fit" height="1in"><xsl:attribute name="src">url('<xsl:value-of select="./@url" />')</xsl:attribute></fo:external-graphic></fo:block>
                                <fo:block text-align="center"><xsl:value-of select="." /></fo:block>
                            </xsl:when>
                            <xsl:otherwise/>
                        </xsl:choose>
                    </xsl:for-each>
                    <fo:block margin-top="0.1in"><xsl:value-of select="review/content/p[last()]/following::text()[1]" /></fo:block>
                </fo:flow>
            </fo:page-sequence>
        </xsl:for-each>
    </fo:root>
</xsl:template>
于 2013-05-22T07:44:06.763 回答