2-е преобразование xslt (xhtml в xsl: fo) на стороне клиента - PullRequest
0 голосов
/ 21 декабря 2011

У меня есть XML-документ, который преобразуется в XHTML. Теперь мне нужно добавить кнопку печати, которая преобразует вывод с помощью 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>

Как это можно сделать на стороне клиента? Как я могу получить преобразование по требованию, работающее

1 Ответ

0 голосов
/ 21 декабря 2011

Проблема здесь в том, что вам нужно вытащить XSL-FO из браузера и в исполняемый файл процессора XSL-FO Antenna house. Это нарушает принципы безопасности JavaScript и не может быть сделано только с помощью JavaScript.

Вам придется использовать решение для браузера: это может быть возможно с расширением Firefox, с плагином Active-X или Silverlight в IE или с приложением Chrome Native Client.

Лучшим решением было бы выполнить преобразование на стороне сервера, загрузить преобразованный файл XSL-FO и открыть его в исполняемом файле Antennna House (возможно, даже автоматически, назначив расширение .fo, чтобы оно всегда открывалось в Antenna House). .

...