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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Предварительный просмотр FOP-0.95 
:(
    Опции темы
ReFLeXive
Дата 13.5.2010, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здравствуйте!
ПРобема состоит в следующем: я прикрутил к проекту FOP 0.95, он работает, нормально генерирует PDF и RTF. Однако сейчас возникла необходимость  сделать предварительный просмотр сгенерированного на основе XML+XSL документа в окне программы.
Возможно, кто то уже сталкивался с подобным...
Как я понял из google, для предварительного просмотра можно использовать PreviewPanel (для встраивания в основное окно программы) и PreviewDialog(как отдельный фрейм). Мне нужен именно PreviewPanel. В качестве рендерера использую AWTRenderer.
Вот я что пока написал:
Код

public static void main(String[] args) 
{
        JFrame frame = new JFrame( "Превью панель" );
        frame.setLayout( new GridBagLayout() );
    frame.setSize( 800, 600 );
    AWTRenderer renderer = new AWTRenderer();
        FopFactory fopFactory = FopFactory.newInstance();
        FOUserAgent foUserAgent = fopFactory.newFOUserAgent();
        foUserAgent.setRendererOverride( renderer );
        renderer.setPreviewDialogDisplayed( false );
        renderer.setUserAgent( foUserAgent );
        PreviewPanel pp = new PreviewPanel( foUserAgent, null, renderer );
        renderer.clearViewportList();
        pp.setBackground( Color.black );
        frame.setBackground( Color.blue );
        frame.add( pp, new GridBagConstraints( 0, 0, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets( 0, 0, 0, 0 ), 0, 0 ) );
        frame.setVisible( true );
        //
        pp.setVisible( true );
    }


Теперь собственно то, что я пока не очень понимаю: как мне в этой панельке разместить сгенерированный документ? Т.е. нужно куда то подать на вход XML+XSL и на выходе получить изображение этого документа в PreviewPanel... Элементы управления (кнопки следующей страницы, предыдущей и тп) мне нужно создавать/размещать самому, либо это уже есть готовое?
PM MAIL   Вверх
jk1
Дата 13.5.2010, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Вот пример использования вьюера, надеюсь будет полезен.


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
ReFLeXive
Дата 13.5.2010, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(jk1 @  13.5.2010,  11:11 Найти цитируемый пост)
Вот пример использования вьюера, надеюсь будет полезен. 

Спасибо за ответ, jk1!
Кое на какие мысли наводит. Однако мне не очень понятно, как задается окошко предварительного просмотра - у меня появился PreviewDialog, а нужен PreviewPanel... Вернее я догадывюсь, что так происходит при задании
Код

Fop fop = fopFactory.newFop(MimeConstants.MIME_FOP_AWT_PREVIEW);

но не совсем уверен.. Сейчас попробую сренедерить многостраничный документ....
PM MAIL   Вверх
ReFLeXive
Дата 21.5.2010, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Знает кто нить, как сделать, чтобы вывод был в PreviewPanel, а не в PreviewDialog ?
На всякий случай, приведу полный код, который написал:
Файл Viewer.java
Код

public class Viewer
    extends JFrame
{
    private FopFactory fopFactory;
    private FOUserAgent foUserAgent;
    private AWTRenderer renderer;
    private PreviewPanel previewPanel;
    //private PreviewDialog previewDialog;
    
    public Viewer()
    {
        renderer = new AWTRenderer();
        fopFactory = FopFactory.newInstance();
        foUserAgent = fopFactory.newFOUserAgent();
        foUserAgent.setRendererOverride( renderer );
        renderer.setPreviewDialogDisplayed( false );
        renderer.setUserAgent( foUserAgent );
        previewPanel = new PreviewPanel( foUserAgent, null, renderer );
        renderer.clearViewportList();
        renderer.setPreviewDialogDisplayed( false );
        //
        try
        {
            jbInit();
        }
        catch (Exception e) 
        {
            e.printStackTrace();
        }
    }
    
    private void jbInit() throws FOPException 
    {
        this.setLayout( new GridBagLayout() );
        this.setSize( 500, 500 );
        
        //double scale = previewPanel.getScaleToFitWindow();
        //previewPanel.setScaleFactor( scale );
        previewPanel.setDisplayMode( PreviewPanel.CONTINUOUS );
        this.add( previewPanel );
    }
    
    public void setData( Document foDoc )
    {
        
    }
    
    public void convert( File xml, File xsl, File fo )
        throws TransformerException, IOException
    {
        OutputStream out = new FileOutputStream( fo );
        try
        {
          //Setup XSLT
            TransformerFactory factory = TransformerFactory.newInstance();
            Transformer transformer = factory.newTransformer(new StreamSource(xsl));
        
            //Setup input for XSLT transformation
            Source src = new StreamSource(xml);
        
            //Resulting SAX events (the generated FO) must be piped through to FOP
            Result res = new StreamResult(out);
        
            //Start XSLT transformation and FOP processing
            transformer.transform(src, res);
        }
        finally
        {
            out.close();
        }
    }
    
    public void showView( File foDoc ) throws FOPException, TransformerException
    {
        Fop fop = fopFactory.newFop( MimeConstants.MIME_FOP_AWT_PREVIEW );
        try
        {
            TransformerFactory factory = TransformerFactory.newInstance();
            Transformer transformer = factory.newTransformer();
            Source src = new StreamSource( foDoc );
            Result res = new SAXResult(fop.getDefaultHandler());
            transformer.transform(src, res);
        }
        catch (Exception e) 
        {
            if (e instanceof FOPException) {
                throw (FOPException)e;
            }
            throw new FOPException(e);
        }
    }
}


Файл start.java
Код

public class start {
    public static void main(String[] args) throws FOPException, TransformerException, IOException 
    {
        Viewer v = new Viewer();
        v.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        v.setVisible( true );
        File fo = new File( "1.fo" ); 
        File xml = new File( "1.xml" );
        File xsl = new File( "1.xsl" );
        v.convert( xml, xsl, fo );
        
        v.showView( fo );
    }
}


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

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

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


 




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


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

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