【发布时间】:2018-12-19 14:42:52
【问题描述】:
我有一个使用 XSLT 文件生成 PDF 文件的程序,XSLT 文件中的一些节点有一个属性font-family。
我们希望在配置文件中使字体可配置,这意味着我们要在应用 xslt 样式之前修改所有属性的值:
public void GeneratePDF(string xsltPath, DataSet data)
{
XslCompiledTransform xslTrans = new XslCompiledTransform();
// here I want modify all elements having the font-family attribute
xslTrans.Load(path)
//....
}
XSLT 文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:import href="../masterLayout.xslt" />
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:param name="ServerAppPath" select="'c:\inetpub\wwwroot\webApi'"/>
<xsl:param name="Orientation" select="'Portrait'"/>
<xsl:param name="PaperSize" select="'A4'"/>
<xsl:template match="StatusA">
<fo:root>
<xsl:call-template name="FOFileHeader"/>
<!-- DOCUMENT -->
<fo:page-sequence master-reference="pages" font-family="Verdana" initial-page-number="1" font-size="8pt">
<xsl:call-template name="Region1"/>
<xsl:call-template name="Region2"/>
<xsl:call-template name="FirstRegionAfter"/>
<fo:flow flow-name="xsl-region-body" font-size="8pt">
【问题讨论】:
-
您是否尝试过使用the overloads of the Load method 之一,它允许您加载 XSLT 样式表?
-
不,我没有,你的意思是 Load(XmlReader stylesheet) 吗?通过xml阅读器加载XSLT然后更新属性?
-
嗯,XSLT 是 XML,XSLT 是一种转换 XML 的转换语言,因此您可以肯定地使用 XSLT 将其他一些 XSLT 转换为第三个 XSLT。另一方面,根据您的需要,使用例如声明全局参数就足够了。
<xsl:param name="font-family">Arial</xsl:param>然后您可以在代码中的其他地方引用它,例如<fo:block font-family="{$font-family}">...</fo:block>,然后使用 .NET API 将XsltArgumentList传递给Transform方法。 -
@MartinHonnen,谢谢您的回答,我是 XSLT 的新手,我不知道如何才能获得第三个 xslt,我无法声明参数,因为保存了一些 xslt在数据库中,它们取决于客户端(我无法访问客户端数据库)。
-
您能否编辑您的问题以显示 XSLT 示例。不一定是整个 XSLT,而是当前设置了
font-family的位(即您要更改的位)。谢谢!