如何覆盖“region-body”为 XSL:FO 中的表设置的边距?

Posted

技术标签:

【中文标题】如何覆盖“region-body”为 XSL:FO 中的表设置的边距?【英文标题】:how can I override a margin set by "region-body" for a table in XSL:FO? 【发布时间】:2021-04-20 19:35:43 【问题描述】:

我正在编辑一个 XSL 文档,该文档在将 XML 转换为 PDF 时控制输出格式。使用“fo:region-body”标签的页面布局中有一个现有的左边距。布局在“fo:page-sequence”元素中设置为主引用,其中包含我的表格的流程和块。我希望我的表覆盖边距。我尝试在表格上使用负边距(我在“表格”和“表格主体”上都尝试过,但只有表格内容向左移动。表格边框保持在同一位置。

有人能指出正确的方向吗?

【问题讨论】:

您应该发布一个简短的 XSL FO 示例以供其他人帮助。也就是说,您可以将结构放在块/块容器中并在其上设置填充/边距,而不是表格。 【参考方案1】:

您可能需要围绕结构并在其上设置边距。这是一个例子:

    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"
    font-family="Helvetica" font-size="11pt">
    <fo:layout-master-set>
        <fo:simple-page-master margin-top=".5in" margin-left="1in" margin-bottom="1in"
            margin-right="1in" page- page- master-name="first">
            <fo:region-body margin-top="0pt" margin-bottom="0pt"/>
        </fo:simple-page-master>
    </fo:layout-master-set>
    <fo:page-sequence master-reference="first">
        <fo:flow flow-name="xsl-region-body">
            <fo:block>Table not in left margin space</fo:block>
            <fo:block>
                <fo:table >
                    <fo:table-column/>
                    <fo:table-body>
                        <fo:table-row>
                            <fo:table-cell border-top="1pt solid black" border-bottom="1pt solid red" border-left="1pt solid green" border-right="1pt solid orange" text-align="center">
                                <fo:block> Center Me </fo:block>
                            </fo:table-cell>
                        </fo:table-row>
                    </fo:table-body>
                </fo:table>
            </fo:block>
            <fo:block>Table in left margin space</fo:block>
            <fo:block margin-left="-0.75in">
                <fo:table >
                    <fo:table-column/>
                    <fo:table-body>
                        <fo:table-row>
                            <fo:table-cell border-top="1pt solid black" border-bottom="1pt solid red" border-left="1pt solid green" border-right="1pt solid orange" text-align="center">
                                <fo:block> Center Me </fo:block>
                            </fo:table-cell>
                        </fo:table-row>
                    </fo:table-body>
                </fo:table>
            </fo:block>
        </fo:flow>
    </fo:page-sequence>
</fo:root>

这会导致以下结果:

【讨论】:

以上是关于如何覆盖“region-body”为 XSL:FO 中的表设置的边距?的主要内容,如果未能解决你的问题,请参考以下文章

XSL/FO:在“fo:block”上遇到无效属性:在将 html 转换为 PDF (xhmtml2fo) 时显示(没有可用的上下文信息)

XSL:FO / Apache FOP 中的内联图像数据

如何通过 XSL FO 将小型大写字母应用于字符串

XSL-FO: fo:marker 可以用来存储任何东西吗?

xsl:fo 在一个块中使用不同的颜色/字体

生成 PDF 期间块容器出现 XSL-FO 错误