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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Просмотр PDF в Swing-объекте 
:(
    Опции темы
regen
Дата 3.5.2007, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Добрый день.
Средствами какой библиотеки можно открыть pdf-файл на просмотр и поместить полученное в Swing-объект (чтобы пользователь мог просмотреть pdf-документ через gui-приложение)?

http://forum.vingrad.ru/topic-101636.html смотрел, понял мало что... Если можно дайте примерчик...

Заранее благодарю
PM MAIL   Вверх
LSD
Дата 3.5.2007, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Я могу посоветовать, только J-Integra, там и пример интеграции Adobe Acrobat Reader есть.
Вот только работать это будет только под Windows.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
w1nd
Дата 4.5.2007, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

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



LSD, jintegra - это очень дорого smile Есть масса других (в т. ч. бесплатных) мостов для работы с COM и ActiveX.

Есть java-библиотеки для отображения pdf. Во-первых, древний awt-шный от самой adobe (не умеет смотреть зашифрованные pdf'ки), multivalentjpedal. Я работал с этим года три назад, возможно еще что-то появилось. Кстати, если будете смотреть на jpedal, не обращайте внимания на бесплатную версию - она, помнится, была чудовищно далека от коммерческой версии по функционалу.

Это сообщение отредактировал(а) w1nd - 4.5.2007, 17:30


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
AntonSaburov
Дата 4.5.2007, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

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



Лично мое мнение - проще поставить Acrobat на нужную машину и пусть он там запускается.
PM MAIL WWW ICQ   Вверх
regen
Дата 4.5.2007, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



w1nd, спасибо большое за ответ. А как называется та древня awt-шка от Adobe?  И где её можно посмотреть?

Anton Saburov, просмотр pdf мне необходим вот для чего: сейчас пишу приложение, которое позволяло бы просматривать руководителям приказы (в формате pdf) и подписывать, электронной подписью и отправлять на сервер. Поэтому ставить акробат и просматривать через него - немного не то. 
PM MAIL   Вверх
w1nd
Дата 4.5.2007, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

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



Смотрелку от Adobe можно попытаться  взять здесь: zdnet (и на их сайте, конечно, но там чорт ногу сломит).
Кстати, еще одна нашлась - jpdfviewer.

Это сообщение отредактировал(а) w1nd - 4.5.2007, 23:32


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
LSD
Дата 5.5.2007, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Цитата(w1nd @  4.5.2007,  18:25 Найти цитируемый пост)
Есть масса других (в т. ч. бесплатных) мостов для работы с COM и ActiveX.

А вот с этого момента поподробней, кто из бесплатных компонентов умеет отображать внутри Swing контейнеров ActiveX контролы?
(SWT не предлагать smile )


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
w1nd
Дата 6.5.2007, 00:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

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



Я не имею в виду какие-то конкретные проекты, просто одно время занимался этим, перелопатил их множество (хотя, пожалуй, jintegra лучше всех smile). Посмотрите JTL.

А этот SWT и иже с ним в гробу я видел ;)

Кстати, интересную ссылочку нашёл: http://java.sun.com/j2se/1.4.2/docs/guide/...uide/index.html

Это сообщение отредактировал(а) w1nd - 6.5.2007, 01:01


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
regen
Дата 9.5.2007, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Посмотрел я всё предложенное. В основном платное всё или уже готовый продукт... 
1) Awt-шный от Adobe - баг на баге... Посмотрел 30 минут и убрал подальше.
2) Понравился пример из JPedal. Однако не понял как там свой toolbar поставить... 
3) JPDFViewer - очень понравился. Однако платная она... (((

Вот так... ((( 
Как быть? Может у кого-то есть готовые решения, идеи...? 
PM MAIL   Вверх
w1nd
Дата 10.5.2007, 05:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

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



Цитата(regen @  9.5.2007,  17:52 Найти цитируемый пост)
Как быть? Может у кого-то есть готовые решения, идеи...? 

Всегда есть. За соответствующее вознаграждение (см. тот же jPDFViewer; JPedal, кстати, тоже платный). У вас только три пути:
  • купить понравившееся решение;
  • воспользоваться Multivalent или бесплатной частью JPedal;
  • написать компонент самостоятельно. PDF Reference занимает более тысячи страниц, там всё очень хорошо описано.




--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
Goganchic
Дата 1.6.2007, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Хм, странно как-то: Java очень богатый либами язык и чтобы не было нормального бесплатного просмотрщика pdf - не верю smile
PM Jabber   Вверх
LSD
Дата 1.6.2007, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Цитата(Goganchic @  1.6.2007,  23:51 Найти цитируемый пост)
Хм, странно как-то: Java очень богатый либами язык и чтобы не было нормального бесплатного просмотрщика pdf - не верю

А так же, нет нормального бесплатного просмотрщика документов Microsoft Office, нет бесплатного WEB браузера (с поддержкой последних версий HTML, XHTML и JavaScript), да и еще много чего бесплатного нет smile 


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
w1nd
Дата 2.6.2007, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

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



Цитата(Goganchic @  1.6.2007,  22:51 Найти цитируемый пост)
Хм, странно как-то: Java очень богатый либами язык и чтобы не было нормального бесплатного просмотрщика pdf - не верю smile 

Вообще, существование чего-нибудь нормального бесплатного - факт, не поддающийся осмыслению ;) Не так много людей, способных в полную силу работать за спасибо.



--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
Goganchic
Дата 2.6.2007, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(w1nd @  2.6.2007,  19:49 Найти цитируемый пост)
Вообще, существование чего-нибудь нормального бесплатного - факт, не поддающийся осмыслению ;) Не так много людей, способных в полную силу работать за спасибо.

почему за спасибо, есть такие проекты, в которых сам продукт - бесплатный, а поддержка к нему нет
PM Jabber   Вверх
w1nd
Дата 2.6.2007, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

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



Цитата(Goganchic @  2.6.2007,  21:18 Найти цитируемый пост)
почему за спасибо, есть такие проекты, в которых сам продукт - бесплатный, а поддержка к нему нет

В случае с библиотечками вроде смотрелки pdf это не работает. Кроме того, такие продукты как раз оказываются ненормальными - иначе зачем еще нужна поддержка ;)


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
LSD
Дата 2.6.2007, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Цитата(Goganchic @  2.6.2007,  22:18 Найти цитируемый пост)
почему за спасибо, есть такие проекты, в которых сам продукт - бесплатный, а поддержка к нему нет

Есть куча бесплатных проектов: во первых сама JDK чего стоит, сервера приложений (JBoss и Ко), куча бесплатных либ (Jakarta и т.п.). А есть и платные библиотеки. Такова жизнь smile

На этом оффтопик предлагаю закончить, тема все таки не об этом.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Goganchic
Дата 4.6.2007, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Хм, я вот думаю, а сложно ли такую библиотеку написать... smile 
PM Jabber   Вверх
Metal_Heart
Дата 4.6.2007, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а почему бы и нет?
**


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

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



Goganchic, а ты попробуй - сразу узнаешь  smile 


--------------------
 не стыдно учиться, а стыдно не учиться 
PM ICQ   Вверх
Goganchic
Дата 4.6.2007, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Metal_Heart, я в раздумии, вот поэтому и спрашиваю smile
PM Jabber   Вверх
ilia1234
Дата 4.6.2007, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот примерчик с использованием JPedal. Это их собственный пример, только слегка доработаннай, чтобы можно было документы напрямую из мссива байтов открывать. Например при считывании из базы данных.

Код

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;

import javax.swing.Box;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.JToolBar;

import org.jpedal.PdfDecoder;

/**
 * 
 * <p>A 'barebones' example of implementing a PDF display panel -
 * The SimpleViewer example shows all the bells and whistles built into JPedalScope:<b>(All)</b>
 * <P>
 */
public class PDFViewer extends JPanel
{
    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    private PdfDecoder pdfDecoder;
    
    private byte[] currentFile = null;    
    private int currentPage=1;
    
    private final JLabel pageCounter1=new JLabel("Seite ");
    private JTextField pageCounter2=new JTextField(4);
    private JLabel pageCounter3=new JLabel("von");
    
    JToolBar topBar = new JToolBar();
            
    public PDFViewer(byte[] pdf)
    {    
        setCursor(new Cursor(Cursor.WAIT_CURSOR));
        currentFile = pdf;
        pdfDecoder = new PdfDecoder();        
        initializeViewer();
        
        selectFile();
        setCursor(Cursor.getDefaultCursor());
    }
    
    private void selectFile() 
    {    
        try
        {
            //close the current pdf before opening another
            pdfDecoder.closePdfFile();                
            pdfDecoder.openPdfArray(currentFile);
            
//            these 2 lines opens page 1 at 100% scaling
            pdfDecoder.decodePage(currentPage);
            pdfDecoder.setPageParameters((float)1.5,1); //values scaling (1=100%). page number
            pdfDecoder.invalidate();
            
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        
        //set page number display
        pageCounter2.setText(currentPage+"");
        pageCounter3.setText("von "+pdfDecoder.getPageCount());
        repaint();
    }
    
    private void initializeViewer() 
    {        
        this.setLayout(new BorderLayout());
        
        Component[] itemsToAdd = initChangerPanel();//setup page display and changer
        
        topBar.setFloatable(false);
        topBar.add(Box.createGlue());
        
        for(int i=0;i<itemsToAdd.length;i++)
        {
            topBar.add(itemsToAdd[i]);
            topBar.addSeparator();
        }
        topBar.add(Box.createGlue());
        
        this.add(topBar,BorderLayout.PAGE_START);
        
        JScrollPane display = initPDFDisplay();//setup scrollpane with pdf display inside
        this.add(display,BorderLayout.CENTER);        
    }

    /**
     * returns the scrollpane with pdfDecoder set as the viewport
     */
    private JScrollPane initPDFDisplay() 
    {        
        JScrollPane currentScroll = new JScrollPane();
        currentScroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        currentScroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
        
        currentScroll.setViewportView(pdfDecoder);
        
        return currentScroll;
    }

    /**
     * setup the page display and changer panel and return it 
     */
    private Component[] initChangerPanel()
    {        
        Component[] list = new Component[5];
        
        /**back icon*/
        JButton back = new JButton("<<");
        back.setPreferredSize(new Dimension(20, 20));
        back.setMaximumSize(new Dimension(20, 20));
        back.setBorderPainted(false);
        back.setToolTipText("Rewind one page"); 
        list[0] = back;
        back.addActionListener(new ActionListener() 
        {
            public void actionPerformed(ActionEvent e) 
            {
                if(currentFile!=null && currentPage>1)
                {
                    currentPage -= 1;
                    try 
                    {
                        pdfDecoder.decodePage(currentPage);
                        pdfDecoder.invalidate();
                        repaint();
                    } 
                    catch (Exception e1) 
                    {
                        System.err.println("back 1 page");
                        e1.printStackTrace();
                    }
             
//             set page number display
                pageCounter2.setText(currentPage+"");
                }
            }
        });
        
        pageCounter2.setEditable(true);
        pageCounter2.addActionListener(new ActionListener()
        {            
            public void actionPerformed(ActionEvent a)
            {                
                String value=(String) pageCounter2.getText().trim();
                int newPage;
                
                //allow for bum values
                try
                {
                    newPage=Integer.parseInt(value);
                    
                    if((newPage>pdfDecoder.getPageCount())|(newPage<1))
                    {
                     return;
                    }
                    
                    currentPage=newPage;
                    try
                    {
                     pdfDecoder.decodePage(currentPage);
                     pdfDecoder.invalidate();
                        repaint();
                    }
                    catch(Exception e)
                    {
                     System.err.println("page number entered");
                     e.printStackTrace();
                    }
                    
                }
                catch(Exception e)
                {
                    JOptionPane.showMessageDialog(null,">"+value+ "< is Not a valid Value.\nPlease enter a number between 1 and "+pdfDecoder.getPageCount()); 
                    return;
                }
                
            }
            
        });
        
        /**put page count in middle of forward and back*/
        list[1] = pageCounter1;
        pageCounter1.setPreferredSize(new Dimension(50, 20));
        pageCounter1.setMaximumSize(new Dimension(50, 20));        
        list[2] = pageCounter2;   
        pageCounter2.setPreferredSize(new Dimension(50, 20));
        pageCounter2.setMaximumSize(new Dimension(50, 20));
        list[3] = pageCounter3;
        pageCounter3.setPreferredSize(new Dimension(50, 20));
        pageCounter3.setMaximumSize(new Dimension(50, 20));

        /**forward icon*/
        JButton forward = new JButton(">>");
        forward.setPreferredSize(new Dimension(20, 20));
        forward.setMaximumSize(new Dimension(20, 20));
        forward.setBorderPainted(false);        
        forward.setToolTipText("forward 1 page"); 
        list[4] = forward;
        forward.addActionListener(new ActionListener() 
        {
            public void actionPerformed(ActionEvent e) 
            {
                if(currentFile!=null && currentPage<pdfDecoder.getPageCount())
                {
                    currentPage += 1;
                    try {
                        pdfDecoder.decodePage(currentPage);
                        pdfDecoder.invalidate();
                        repaint();
                    } catch (Exception e1) {
                        System.err.println("forward 1 page");
                        e1.printStackTrace();
                    }
                    
    //                set page number display
                    pageCounter2.setText(currentPage+"");
                }
            }
        });
        
        return list;
    }
}

PM MAIL   Вверх
regen
Дата 5.6.2007, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



ilia1234, спасибо огромное! Просто огромное! Выручил!

Пример из мануала взял или сам написал? Просто я перерыл мануалы, а примера такого не видел... 
PM MAIL   Вверх
ilia1234
Дата 5.6.2007, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Там моего процентов 10. Где взял уже не помню. Скорее всего на их сайте или на sourceforge.net.
Это исходный пример:
Код

/**
 * Created on 04-Mar-2005
 *
 * Simple demo to show JPedal being used as a simple GUI viewer.
 * 
 * represents the minimum needed to display a PDF page.
 * 
 */
package org.jpedal.examples.jpaneldemo;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.JToolBar;
import javax.swing.WindowConstants;

import org.jpedal.PdfDecoder;
import org.jpedal.examples.simpleviewer.utils.FileFilterer;

/**
 * 
 * <p>A 'barebones' example of implementing a PDF display panel -
 * The SimpleViewer example shows all the bells and whistles built into JPedalScope:<b>(All)</b>
 * <P>
 */
public class JPanelDemo extends JFrame {
    
    private String viewerTitle="Jpanel Demo";
    
    /**the actual JPanel/decoder object*/
    private PdfDecoder pdfDecoder;
    
    /**name of current PDF file*/
    private String currentFile=null;
    
    /**current page number (first page is 1)*/
    private int currentPage=1;
    
    private final JLabel pageCounter1=new JLabel("Page ");
    private JTextField pageCounter2=new JTextField(4);//000 used to set prefered size
    private JLabel pageCounter3=new JLabel("of");//000 used to set prefered size
    
    /**
     * construct a pdf viewer, passing in the full file name
     */
    public JPanelDemo(String name){
        
        pdfDecoder = new PdfDecoder();
        
        currentFile = name;//store file name for use in page changer
        
        try{
            //this opens the PDF and reads its internal details
            pdfDecoder.openPdfFile(currentFile);
            
            //these 2 lines opens page 1 at 100% scaling
            pdfDecoder.decodePage(currentPage);
            pdfDecoder.setPageParameters(1,1); //values scaling (1=100%). page number
        }catch(Exception e){
            e.printStackTrace();
        }
        
        //setup our GUI display
        initializeViewer();
        
        //set page number display
        pageCounter2.setText(currentPage+"");
        pageCounter3.setText("of "+pdfDecoder.getPageCount());
    }
    
    /**
     * construct an empty pdf viewer and pop up the open window
     */
    public JPanelDemo(){
        
        setTitle(viewerTitle);
        
        pdfDecoder = new PdfDecoder();
        
        initializeViewer();
        
//        selectFile();
    }

    /**
     * opens a chooser and allows user to select a pdf file and opens it
     */
    private void selectFile() {
        
        JFileChooser open = new JFileChooser(".");
        open.setFileSelectionMode(JFileChooser.FILES_ONLY);
        
        String[] pdf = new String[] { "pdf" };
        open.addChoosableFileFilter(new FileFilterer(pdf,"Pdf (*.pdf)"));
        
        int resultOfFileSelect = JFileChooser.ERROR_OPTION;
        while(resultOfFileSelect==JFileChooser.ERROR_OPTION){
            
            resultOfFileSelect = open.showOpenDialog(this);
            
            if(resultOfFileSelect==JFileChooser.ERROR_OPTION)
                System.err.println("JFileChooser error");
            
            if(resultOfFileSelect==JFileChooser.APPROVE_OPTION){
                currentFile = open.getSelectedFile().getAbsolutePath();
                
                currentPage = 1;
                try{
                    //close the current pdf before opening another
                    pdfDecoder.closePdfFile();
                    
//                    this opens the PDF and reads its internal details
                    pdfDecoder.openPdfFile(currentFile);
                    
                    //check for password encription and acertain
                    if(!checkEncryption()){
                        //if file content is not accessable make user select a different file
                        resultOfFileSelect = JFileChooser.CANCEL_OPTION;
                    }
                    
//                    these 2 lines opens page 1 at 100% scaling
                    pdfDecoder.decodePage(currentPage);
                    pdfDecoder.setPageParameters(1,1); //values scaling (1=100%). page number
                    pdfDecoder.invalidate();
                    
                }catch(Exception e){
                    e.printStackTrace();
                }
                
                //set page number display
                pageCounter2.setText(currentPage+"");
                pageCounter3.setText("of "+pdfDecoder.getPageCount());
                
                setTitle(viewerTitle+" - "+currentFile);
                
                repaint();
            }
        }
    }

    /**
     * check if encryption present and acertain password, return true if content accessable
     */
    private boolean checkEncryption() {
        
//        check if file is encrypted
        if(pdfDecoder.isEncrypted()){
            
            //if file has a null password it will have been decoded and isFileViewable will return true
            while(!pdfDecoder.isFileViewable()) {
    
                /**<start-13>
                //<end-13>
                JOptionPane.showMessageDialog(this,"Please use Java 1.4 to display encrypted files");
                return false;//no other content can be displayed from this file
                //<start-13>
                 /**/
    
                /** popup window if password needed */
                String password = JOptionPane.showInputDialog(this,"Please enter password");
    
                /** try and reopen with new password */
                if (password != null) {
                    pdfDecoder.setEncryptionPassword(password);
                    pdfDecoder.verifyAccess();
    
                }
                //<end-13>
            }
            return true;
        }
        //if not encrypted return true
        return true;
    }

    /**
     * setup the viewer and its components
     */
    private void initializeViewer() {
        //<start-13>
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        //<end-13>
        
        Container cPane = getContentPane();
        cPane.setLayout(new BorderLayout());
        
        JButton open = initOpenBut();//setup open button
        Component[] itemsToAdd = initChangerPanel();//setup page display and changer
        
        JPanel topBar = new JPanel();
        topBar.setLayout(new FlowLayout(FlowLayout.LEADING,0,0));
        topBar.add(open);
//        topBar.add(pageChanger);
        for(int i=0;i<itemsToAdd.length;i++){
            topBar.add(itemsToAdd[i]);
        }
        
        cPane.add(topBar,BorderLayout.NORTH);
        
        JScrollPane display = initPDFDisplay();//setup scrollpane with pdf display inside
        cPane.add(display,BorderLayout.CENTER);
        
        pack();
        
        Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
        setSize(screen.width/2,screen.height/2);
        
        //<start-13>
        setLocationRelativeTo(null);//centre on screen
        //<end-13>
        setVisible(true);
    }
    
    /**
     * returns the open button with listener
     */
    private JButton initOpenBut() {
        
        JButton open = new JButton();
        open.setIcon(new ImageIcon(getClass().getResource("/org/jpedal/examples/simpleviewer/open.gif"))); //$NON-NLS-1$
        open.setText("Open");
        open.setToolTipText("Open a file"); 
        open.setBorderPainted(false);
        open.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                    selectFile();
            }
        });
        
        return open;
    }

    /**
     * returns the scrollpane with pdfDecoder set as the viewport
     */
    private JScrollPane initPDFDisplay() {
        
        JScrollPane currentScroll = new JScrollPane();
        currentScroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        currentScroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
        
        currentScroll.setViewportView(pdfDecoder);
        
        return currentScroll;
    }

    /**
     * setup the page display and changer panel and return it 
     */
    private Component[] initChangerPanel(){
        
        Component[] list = new Component[11];
        
        /**back to page 1*/
        JButton start = new JButton();
        start.setBorderPainted(false);
        URL startImage =getClass().getResource("/org/jpedal/examples/simpleviewer/start.gif"); 
        start.setIcon(new ImageIcon(startImage));
        start.setToolTipText("Rewind to page 1");
//        currentBar1.add(start);
        list[0] = start;
        start.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if(currentFile!=null && currentPage!=1){
                 currentPage = 1;
                 try {
                        pdfDecoder.decodePage(currentPage);
                        pdfDecoder.invalidate();
                        repaint();
                    } catch (Exception e1) {
                        System.err.println("back to page 1");
                        e1.printStackTrace();
                    }
                 
                 //set page number display
                    pageCounter2.setText(currentPage+"");
                }
            }
        });
        
        /**back 10 icon*/
        JButton fback = new JButton();
        fback.setBorderPainted(false);
        URL fbackImage =getClass().getResource("/org/jpedal/examples/simpleviewer/fback.gif");
        fback.setIcon(new ImageIcon(fbackImage));
        fback.setToolTipText("Rewind 10 pages");
//        currentBar1.add(fback);
        list[1] = fback;
        fback.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if(currentFile!=null && currentPage>10){
                    currentPage -= 10;
                 try {
                        pdfDecoder.decodePage(currentPage);
                        pdfDecoder.invalidate();
                        repaint();
                    } catch (Exception e1) {
                        System.err.println("back 10 pages");
                        e1.printStackTrace();
                    }
                 
//                 set page number display
                    pageCounter2.setText(currentPage+"");
                }
            }
        });
        
        /**back icon*/
        JButton back = new JButton();
        back.setBorderPainted(false);
        URL backImage =getClass().getResource("/org/jpedal/examples/simpleviewer/back.gif"); 
        back.setIcon(new ImageIcon(backImage));
        back.setToolTipText("Rewind one page"); 
//        currentBar1.add(back);
        list[2] = back;
        back.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
            if(currentFile!=null && currentPage>1){
                currentPage -= 1;
             try {
                    pdfDecoder.decodePage(currentPage);
                    pdfDecoder.invalidate();
                    repaint();
                } catch (Exception e1) {
                    System.err.println("back 1 page");
                    e1.printStackTrace();
                }
             
//             set page number display
                pageCounter2.setText(currentPage+"");
            }
            }
        });
        
        pageCounter2.setEditable(true);
        pageCounter2.addActionListener(new ActionListener(){
            
            public void actionPerformed(ActionEvent a) {
                
                String value=(String) pageCounter2.getText().trim();
                int newPage;
                
                //allow for bum values
                try{
                    newPage=Integer.parseInt(value);
                    
                    if((newPage>pdfDecoder.getPageCount())|(newPage<1)){
                     return;
                    }
                    
                    currentPage=newPage;
                    try{
                     pdfDecoder.decodePage(currentPage);
                     pdfDecoder.invalidate();
                        repaint();
                    }catch(Exception e){
                     System.err.println("page number entered");
                     e.printStackTrace();
                    }
                    
                }catch(Exception e){
                    JOptionPane.showMessageDialog(null,">"+value+ "< is Not a valid Value.\nPlease enter a number between 1 and "+pdfDecoder.getPageCount()); 
                    return;
                }
                
            }
            
        });
        
        /**put page count in middle of forward and back*/
//        currentBar1.add(pageCounter1);
//        currentBar1.add(new JPanel());//add gap
//        currentBar1.add(pageCounter2);
//        currentBar1.add(new JPanel());//add gap
//        currentBar1.add(pageCounter3);
        list[3] = pageCounter1;
        list[4] = new JPanel();
        list[5] = pageCounter2;
        list[6] = new JPanel();
        list[7] = pageCounter3;

        /**forward icon*/
        JButton forward = new JButton();
        forward.setBorderPainted(false);
        URL fowardImage =getClass().getResource("/org/jpedal/examples/simpleviewer/forward.gif");
        forward.setIcon(new ImageIcon(fowardImage));
        forward.setToolTipText("forward 1 page"); 
//        currentBar1.add(forward);
        list[8] = forward;
        forward.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
            if(currentFile!=null && currentPage<pdfDecoder.getPageCount()){
                currentPage += 1;
                try {
                    pdfDecoder.decodePage(currentPage);
                    pdfDecoder.invalidate();
                    repaint();
                } catch (Exception e1) {
                    System.err.println("forward 1 page");
                    e1.printStackTrace();
                }
                
//                set page number display
                pageCounter2.setText(currentPage+"");
            }
            }
        });
        
        /**fast forward icon*/
        JButton fforward = new JButton();
        fforward.setBorderPainted(false);
        URL ffowardImage =getClass().getResource("/org/jpedal/examples/simpleviewer/fforward.gif");
        fforward.setIcon(new ImageIcon(ffowardImage));
        fforward.setToolTipText("Fast forward 10 pages"); 
//        currentBar1.add(fforward);
        list[9] = fforward;
        fforward.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
            if(currentFile!=null && currentPage<pdfDecoder.getPageCount()-9){
                currentPage += 10;
                try {
                    pdfDecoder.decodePage(currentPage);
                    pdfDecoder.invalidate();
                    repaint();
                } catch (Exception e1) {
                    System.err.println("forward 10 pages");
                    e1.printStackTrace();
                }
                
//                set page number display
                pageCounter2.setText(currentPage+"");
            }
            }
        });

        /**goto last page*/
        JButton end = new JButton();
        end.setBorderPainted(false);
        URL endImage =getClass().getResource("/org/jpedal/examples/simpleviewer/end.gif");
        end.setIcon(new ImageIcon(endImage));
        end.setToolTipText("Fast forward to last page");
//        currentBar1.add(end);
        list[10] = end;
        end.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
            if(currentFile!=null && currentPage<pdfDecoder.getPageCount()){
                currentPage = pdfDecoder.getPageCount();
                try {
                    pdfDecoder.decodePage(currentPage);
                    pdfDecoder.invalidate();
                    repaint();
                } catch (Exception e1) {
                    System.err.println("forward to last page");
                    e1.printStackTrace();
                }
                
//                set page number display
                pageCounter2.setText(currentPage+"");
            }
            }
        });
        
        return list;
    }

    /**create a standalone program. User may pass in name of file as option*/
    public static void main(String[] args) {
        
        JPanelDemo current;
        
        /** Run the software */
        if (args.length > 0) {
            current = new JPanelDemo(args[0]);
        } else {
            current = new JPanelDemo();
        }
    }
}


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

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

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


 




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


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

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