Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сгенерировать SVG картинку на сервере 
:(
    Опции темы
m0zg
Дата 19.8.2008, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 30.7.2007

Репутация: 2
Всего: 2



Как можно сгенерировать SVG картинку на сервере и отдать результат в браузер для её просмотра без всяких плагинов(IE 7 без плагина SVG не отображает)? 
PM MAIL   Вверх
Ortega
Дата 19.8.2008, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 5.11.2005
Где: Харьков, Украина

Репутация: нет
Всего: 6



Конкретно SVG, похоже, никак: http://wiki.svg.org/Internet_Explorer
Как вариант - конвертить ее во что-то другое. 
--------------------
Всему свое время (с) ЧайфНе парься, будь счастлив (с) Пеппи Длинный Чулок
PM MAIL WWW ICQ Skype GTalk   Вверх
m0zg
Дата 21.8.2008, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 30.7.2007

Репутация: 2
Всего: 2



Я немного продвинулся в этом вопросе. Но есть одна проблема. Только, думаю, помочь смогут те, кто имел дело с апачевской библиотекой batik.

В сервлете я по урлу получаю xml-документ, в котором прописан svg-код. Создаю из него sgv-документ и далее отдаю в другой метод, в котором и происходит конвертирование. В заголовке приходит JPEG, только картинка просто белая, а не такая, как SVG прописано. Всё делал примерно так, как в документации по batik'у и примерах, котороые в интернете нашёл. В чём может быть проблема?

Вот код их xml-файла, в котором svg-график.
Код

<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
         "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg"
     xmlns:xlink="http://www.w3.org/1999/xlink">
  <title>Example quad01 - quadratic Bezier commands in path data</title>
  <desc>Picture showing a "Q" a "T" command,
        along with annotations showing the control points
        and end points</desc>
  <g transform="scale(0.5) translate(30,30)">
    <rect x="1" y="1" width="1198" height="598"
          fill="none" stroke="blue" stroke-width="1"/>
    
    <path d="M200,300 Q400,50 600,300 T1000,300"
          fill="none" stroke="red" stroke-width="5"/>
    <!-- End points -->

    <g fill="black">
      <circle cx="200" cy="300" r="10"/>
      <circle cx="600" cy="300" r="10"/>
      <circle cx="1000" cy="300" r="10"/>
    </g>
    <!-- Control points and lines from end points to control points -->
    <g fill="#888888">
      <circle cx="400" cy="50" r="10"/>
      <circle cx="800" cy="550" r="10"/>

    </g>
    <path d="M200,300 L400,50 L600,300 
             L800,550 L1000,300"
          fill="none" stroke="#888888" stroke-width="2"/>
  </g>
</svg>


Вот код сервлета:

Код

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        try
        {
            String parser = XMLResourceDescriptor.getXMLParserClassName();
            SAXSVGDocumentFactory factory = new SAXSVGDocumentFactory(parser);
            String uri = "http://localhost/image.xml";
            Document doc = factory.createDocument(uri);
            SVGGraphics2D svgGraphicsEnvironment = new SVGGraphics2D(doc);
            ByteArrayOutputStream baos = new ByteArrayOutputStream(8192);
            Writer svgOutput = new OutputStreamWriter(baos, "UTF-8");
            svgGraphicsEnvironment.stream(svgOutput, true);
            
            emitJPG(request, response, baos.toString());
        }
        catch (Exception e)
        {
         e.getMessage();
            e.printStackTrace();
        }
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{
        doPost(request, response);
    }
    
    public void emitJPG(HttpServletRequest request, HttpServletResponse response, String svgString) throws IOException{
     response.setContentType("image/jpeg");

     JPEGTranscoder t = new JPEGTranscoder();
     t.addTranscodingHint(JPEGTranscoder.KEY_QUALITY, new Float(.8));
     TranscoderInput input = new TranscoderInput(new StringReader(svgString));
     try {
         TranscoderOutput output = new TranscoderOutput(response.getOutputStream());
         t.transcode(input, output);
         response.getOutputStream().close();
     }
     catch (Exception e){
         e.printStackTrace();
     }
    }

PM MAIL   Вверх
m0zg
Дата 21.8.2008, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 30.7.2007

Репутация: 2
Всего: 2



Разобрался. Если в метод emitJPG передавать Document, а не String, то всё нормально работает. Только размеры картинки почему-то 400х400 всегда. Видимо, где по-умолчанию устанавливаются.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0511 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.