有没有办法在renderX(XSLT)中的两个流部分之间添加一条直线
我正在使用RenderX的rx:flow部分功能将页面一分为二。然而,我想有一条直线,它将贯穿两个流部分之间的页面有没有办法在renderX(XSLT)中的两个流部分之间添加一条直线,xslt,xslt-1.0,xsl-fo,Xslt,Xslt 1.0,Xsl Fo,我正在使用RenderX的rx:flow部分功能将页面一分为二。然而,我想有一条直线,它将贯穿两个流部分之间的页面 这可能吗?我的知识有限,并且我假设不可能添加fo:leader,因为如果我有一个fo:leader,它将在流动部分的每一侧重复。嗯,RenderX XEP没有提供绘制边沟/柱规则的特殊扩展。然而,这是可以做到的。一种可能不需要的方法是将所有其他内容格式化为白色背景色,并插入一个完整的页面长度规则或一组规则 我将给出这个解决方案。它会吓跑大多数人,因为它只是在做你能做的事情。但它也只
这可能吗?我的知识有限,并且我假设不可能添加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页,或者对文本应用渐变,或者注入页面计数标记或条形码 你能不能更具体一点,比如显示一些标记和一张线的走向的图片?我想实现与此链接的第三个块容器相同的事情:谢谢你的回答,它满足了我的所有要求。然而,我很确定我不能对我们目前使用的环境做任何修改。我还是接受了你的回答,因为它可能会帮助其他想和我做同样事情的人。