Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > работа с командной строкой в сервлете


Автор: koroplysov 10.2.2011, 20:15
Привет!
Вообщето нужно делать таблички в PDF. Делается легко в html(там предпросмотр на странице), далее хочу их конвертировать в pdf. В iText русский текст не понимает(чепуха остается), да и сразу в iText неохота повторно(после html) генерить таблицы. Найдета замечательная свободная библиотека jodconverter. На jave, с исходниками, конвертит html в pdf замечательно. Использовать внутри сервлета как библиотеку нельзя (для библиотеки нужно использовать Java 1.5, а веб-приложение использует не выше 1.4). Я хочу использовать jodconverter из командной строки. Так вот не получается то ли не пойму куда положить то ли как правильно вызвать. Строка: "java -jar jodconverter-cli-2.2.1.jar temp.html temp.pdf".
пример с блокнотом работает(запускается) из NetBeans+Tomcat, а на сервере с WebSphere не работает(блокнот не запускается а сервлет отрабатывает без ошибок)
Код

Runtime r = Runtime. getRuntime();
Process p = null;
String cmd[] = {"notepad.exe"};
p = r.exec(cmd);

Вопросы:
1. как использовать командную строку из сервлета(на WebSphere блокнот не запускается даже, по крайней мере не видно), куда будут сохраняться файлы и вообще можно такое?
2. знает ли кто как при конвертации в iText из html в pdf русский текст сохранить?

Спасибо за любую информацию!

Автор: Samotnik 11.2.2011, 01:24
Цитата(koroplysov @  10.2.2011,  20:15 Найти цитируемый пост)
а на сервере с WebSphere не работает(блокнот не запускается а сервлет отрабатывает без ошибок)

странно, у меня на tomcat Ваш блокнот запустился.
TestServlet .java
Код

package com.my.test;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/TestServlet")
public class TestServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
       

    public TestServlet() {
        super();
      
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {            
            Runtime. getRuntime().exec("notepad.exe");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}


web.xml
Код

<?xml version="1.0" encoding="UTF-8" ?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
id="WebApp_ID" version="2.5">
  <display-name>PushServer</display-name> 

<servlet>
  <servlet-name>test</servlet-name> 
  <servlet-class>com.my.test.TestServlet</servlet-class> 
  </servlet>
 <servlet-mapping>
  <servlet-name>test</servlet-name> 
  <url-pattern>/test</url-pattern> 
  </servlet-mapping>

  </web-app>


запрос: http://localhost:8080/Test/test

Автор: koroplysov 11.2.2011, 08:29
Спасибо за ответ! В том то и дело, на Tomcat+NetBeans запускается, а на боевом сервере(WebSphere) не запускается, по крайней мере он(блокнот) не видим, хотя сервлет отрабатывает без ошибок. Что не так, не пойму. Уже проще некуда.

Автор: koroplysov 24.2.2011, 08:58
И так, результат моих изысканий(напоминаю условия, разработка NetBeans+Tomcat+Java 1.4, работать должно на WebSphere):
работает преобразование html->pdf и очень качественно при условии если все теги закрываются(формат файла UTF-8 и в meta charset=UTF-8") и сервер опен офис  запущен "soffice -headless -accept="socket,port=2002;urp;"
Код

Process process=null;
process=Runtime.getRuntime().exec("java -jar C:\\jodconverter-core-3.0-beta-3\\lib\\jodconverter-core-3.0-beta-3.jar tmp.html tmp.pdf");

но: 
1. работает это дело асинхронно(а нужно отловить момент создания файла и при этом уложиться в Java 1.4)
2. сохраняет в нужную папку только в Tomcat, а на WebSphere не хочет в корень веб приложения(видимо там уже есть комплекс прав и которые нарушать не хочется)
3. очень надо быть внимательным при запуске, так как результат может отдать только после остановки сервера(иногда нормально работает иногда нет, так и не нащел связь, да и времени мало было)
4. очень критично к ошибкам при конвертации(потом может не запуститься на конвертацию и надо выгружать опенофис, перезапускать)

Мораль: буду напрямую через опенофис или просто строить в нем отчеты и экспортировать в pdf.

Автор: koroplysov 15.3.2011, 11:05
всетаки вебсфера не хочет работать нормально с командной строкой. в tomcat все нормально

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)