Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法在renderX(XSLT)中的两个流部分之间添加一条直线_Xslt_Xslt 1.0_Xsl Fo - Fatal编程技术网

有没有办法在renderX(XSLT)中的两个流部分之间添加一条直线

有没有办法在renderX(XSLT)中的两个流部分之间添加一条直线,xslt,xslt-1.0,xsl-fo,Xslt,Xslt 1.0,Xsl Fo,我正在使用RenderX的rx:flow部分功能将页面一分为二。然而,我想有一条直线,它将贯穿两个流部分之间的页面 这可能吗?我的知识有限,并且我假设不可能添加fo:leader,因为如果我有一个fo:leader,它将在流动部分的每一侧重复。嗯,RenderX XEP没有提供绘制边沟/柱规则的特殊扩展。然而,这是可以做到的。一种可能不需要的方法是将所有其他内容格式化为白色背景色,并插入一个完整的页面长度规则或一组规则 我将给出这个解决方案。它会吓跑大多数人,因为它只是在做你能做的事情。但它也只

我正在使用RenderX的rx:flow部分功能将页面一分为二。然而,我想有一条直线,它将贯穿两个流部分之间的页面


这可能吗?我的知识有限,并且我假设不可能添加fo:leader,因为如果我有一个fo:leader,它将在流动部分的每一侧重复。

嗯,RenderX XEP没有提供绘制边沟/柱规则的特殊扩展。然而,这是可以做到的。一种可能不需要的方法是将所有其他内容格式化为白色背景色,并插入一个完整的页面长度规则或一组规则

我将给出这个解决方案。它会吓跑大多数人,因为它只是在做你能做的事情。但它也只是展示了你能做的一小部分

我在过去通过利用RenderX的中间输出格式XEPOUT和一些技巧做到了这一点。使用RenderX时,可以请求输出XEPOUT,而不是像PDF这样的最终输出格式。XEPOUT是一种结构化和文档化的XML格式。您可以使用XSL对其进行修改,然后将修改后的XEPOUT发送回引擎以获取最终PDF

基本上,这一过程将是:

XML+XSL->XEPOUT+XSL->new XEPOUT->RenderX->PDF

只需在使用XSL修改XEPOUT的过程中添加这一步骤。我将在下面发布这篇文章,如果您需要更多关于如何在您的环境中工作的信息,这将在很大程度上取决于您如何使用或集成RenderX

一个人可以实现很多技巧。在本例中,我所做的是在rx:flow部分后面应用红色背景色。如果将其格式化为XEPOUT,您将在内容中找到所有其他文本和内容:

 <xep:rgb-color red="1.0" green="0.0" blue="0.0"/>
 <xep:rectangle x-from="72000" y-from="93600" x-till="282000" y-till="676800"/>
这是flow部分每列后面的红色矩形

如果我要格式化该文档,我会得到以下结果:

但是如果我改为格式化为XEPOUT,然后使用XSL处理它,我可以在创建PDF之前更改文档

使用一个简单的XSL,我实际上可以删除那些红色的矩形,使用尺寸标注并在列之间画一条线。本例假设只有两列文档,但您可以根据需要进行修改,包括选择红色以外的其他颜色。我没有在这里完成全部工作,您可以将其增强为更中心的线条,甚至实现多条线条。如果你选择这样做,这只是一个让你开始的例子

    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:math="http://exslt.org/math"
        xmlns:xep="http://www.renderx.com/XEP/xep" exclude-result-prefixes="math" version="1.0">
        <xsl:template match="xep:page">
            <!-- Get page width -->
            <xsl:variable name="page-width">
                <xsl:value-of select="number(@width)"/>
            </xsl:variable>
            <!-- get lower and upper y-pos of longest line {color} xep:rectangle -->
            <xsl:variable name="y-till-pos">
                <xsl:value-of select="math:min(xep:rgb-color[@red='1.0']/following-sibling::xep:rectangle[1]/@y-till)"/>
            </xsl:variable>
            <xsl:variable name="y-from-pos">
                <xsl:value-of select="xep:rgb-color[@red='1.0']/following-sibling::xep:rectangle[1]/@y-from - 12000"/>
            </xsl:variable>
            <xep:page>
                <xsl:apply-templates select="@*"/>
                <!-- Draw Line -->
                <xep:line x-from="{$page-width div 2 - 500}" y-from="{$y-from-pos}" x-till="{$page-width div 2 + 500}" y-till="{$y-till-pos}" thickness="1000" style="solid"/>
                <xsl:apply-templates select="*"/>
            </xep:page>
        </xsl:template>
        <!-- remove red and rectangle -->
        <xsl:template match="xep:rectangle[preceding-sibling::*[1][name()='xep:rgb-color'][@red='1.0']]"/>
        <xsl:template match="xep:rgb-color[@red='1.0']"/>
        <!-- identity copy rules -->
        <xsl:template match="node() | @*">
            <xsl:copy>
                <xsl:apply-templates select="@*"/>
                <xsl:apply-templates select="node()"/>
            </xsl:copy>
        </xsl:template>
    </xsl:stylesheet>
PDF格式的两页视图中的结果显示结果:

这是一个rx:flow部分,带有如您所愿的列分隔器


正如我所说,这是很多,但有这么多,你可以做使用相同的技术。比如书籍折叠结果,或者制作n页,或者对文本应用渐变,或者注入页面计数标记或条形码

你能不能更具体一点,比如显示一些标记和一张线的走向的图片?我想实现与此链接的第三个块容器相同的事情:谢谢你的回答,它满足了我的所有要求。然而,我很确定我不能对我们目前使用的环境做任何修改。我还是接受了你的回答,因为它可能会帮助其他想和我做同样事情的人。