2011-12-21 2 views
0

У меня есть XML-документ, который преобразуется как xhtml. Теперь мне нужно добавить кнопку печати, которая преобразует выходные данные с помощью xsl-fo (на основе антенны xxxx2.2.xsl http://www.antennahouse.com/XSLsample/XSLsample.htm).2nd xslt transform (xhtml to xsl: fo) на стороне клиента

Это то, что я придумал, но это, кажется, не работает, как ожидалось

   <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> 

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

+0

Вы хотите использовать XSL-FO и преобразовать его в PDF с помощью парсера AntennaHouse FO? Может быть проще просто предоставить ссылку для загрузки для PDF-копии той же страницы. Таким образом, вы можете сделать все это на стороне сервера, и вы не будете зависеть от определенных браузеров плагинов или даже ОС, на которых работает браузер. ActiveXObject («Microsoft.XMLDOM»), вероятно, не будет работать повсюду. – grtjn

ответ

0

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

Вам нужно будет использовать решение, специфичное для браузера. Это возможно с расширением Firefox, с плагином Active-X или Silverlight в IE или с приложением для корпоративного клиента Chrome.

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

+0

Будет ли работать следующее решение? Моя проблема заключалась в том, что я не мог выполнить загрузку xml. – vipasane