【问题标题】:2nd xslt transformation (xhtml to xsl:fo) on client side客户端的第二次 xslt 转换(xhtml 到 xsl:fo)
【发布时间】:2012-01-25 06:06:07
【问题描述】:

我有一个转换为 xhtml 的 xml 文档。 现在我需要添加打印按钮,它将使用 xsl-fo 转换输出(基于天线室 xhtml2fo.xsl http://www.antennahouse.com/XSLsample/XSLsample.htm)。

这是我想出的,但它似乎没有按预期工作

              <script language="JavaScript">
            function convert()
            {
                // Load XSL
                var xsl = new ActiveXObject("Microsoft.XMLDOM")
                xsl.async = false

                xsl.load("xhtml2fo.xsl")

                // Load XML 
                var xml = new ActiveXObject("Microsoft.XMLDOM")
                xml.async = false
                // This won't work
                xml.load(document.getElementsByTagName('html')[0].outerHTML)
                // this prints out html element as expected
                //my_window.document.write(document.getElementsByTagName('html')[0].outerHTML)

                my_window = window.open("", "mywindow1");
                my_window.document.write(xml.transformNode(xsl))
            }
            </script>

如何在客户端进行此操作?我如何才能进行按需转换工作

【问题讨论】:

  • 您的意思是要使用 XSL-FO,并使用 AntennaHouse FO 解析器将其转换为 PDF?为同一页面的 PDF 副本提供下载链接可能更容易。这样您就可以在服务器端完成所有操作,并且您将不依赖于特定于浏览器的插件,甚至不依赖于运行浏览器的操作系统。 ActiveXObject("Microsoft.XMLDOM") 可能无法在任何地方工作。

标签: javascript xhtml xslt xsl-fo


【解决方案1】:

这里的问题是您需要将 XSL-FO 从浏览器中取出并放入 Antenna house XSL-FO 处理器可执行文件中。这违反了 JavaScript 安全原则,不能仅使用 JavaScript 来完成。

您必须使用特定于浏览器的解决方案:可以使用 Firefox 扩展程序、IE 中的 Active-X 或 Silverlight 插件或 Chrome Native Client 应用程序。

更好的解决方案是在服务器端进行转换,下载转换后的 XSL-FO 文件并在 Antenna House 可执行文件中打开它(甚至可以通过将 .fo 扩展名指定为始终在 Antenna House 中打开来自动打开) .

【讨论】:

  • 以下解决方案有效吗? w3schools.com/xsl/xsl_client.asp> 我的问题是我无法执行 xml 加载部分。
猜你喜欢
  • 2011-12-16
  • 1970-01-01
  • 2011-12-25
  • 2013-09-26
  • 1970-01-01
  • 1970-01-01
  • 2012-04-08
  • 1970-01-01
  • 2019-10-20
相关资源
最近更新 更多