Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > Просмотр PDF в Swing-объекте


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

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

Заранее благодарю

Автор: LSD 3.5.2007, 21:16
Я могу посоветовать, только http://j-integra.intrinsyc.com/products/com/examples.asp, там и пример интеграции Adobe Acrobat Reader есть.
Вот только работать это будет только под Windows.

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

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

Автор: AntonSaburov 4.5.2007, 17:50
Лично мое мнение - проще поставить Acrobat на нужную машину и пусть он там запускается.

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

Anton Saburov, просмотр pdf мне необходим вот для чего: сейчас пишу приложение, которое позволяло бы просматривать руководителям приказы (в формате pdf) и подписывать, электронной подписью и отправлять на сервер. Поэтому ставить акробат и просматривать через него - немного не то. 

Автор: w1nd 4.5.2007, 22:21
Смотрелку от Adobe можно попытаться  взять здесь: http://whitepapers.zdnet.co.uk/0,1000000651,260270099p,00.htm (и на их сайте, конечно, но там чорт ногу сломит).
Кстати, еще одна нашлась - http://www.qoppa.com/jpvindex.html.

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

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

Автор: w1nd 6.5.2007, 00:44
Я не имею в виду какие-то конкретные проекты, просто одно время занимался этим, перелопатил их множество (хотя, пожалуй, jintegra лучше всех smile). Посмотрите http://sourceforge.net/projects/jtl/.

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

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

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

Вот так... ((( 
Как быть? Может у кого-то есть готовые решения, идеи...? 

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

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


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

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

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

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

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

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

почему за спасибо, есть такие проекты, в которых сам продукт - бесплатный, а поддержка к нему нет

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

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

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

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

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

Автор: Goganchic 4.6.2007, 12:33
Хм, я вот думаю, а сложно ли такую библиотеку написать... smile 

Автор: Metal_Heart 4.6.2007, 16:56
Goganchic, а ты попробуй - сразу узнаешь  smile 

Автор: Goganchic 4.6.2007, 19:56
Metal_Heart, я в раздумии, вот поэтому и спрашиваю smile

Автор: ilia1234 4.6.2007, 21:11
Вот примерчик с использованием 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;
    }
}

Автор: regen 5.6.2007, 19:04
ilia1234, спасибо огромное! Просто огромное! Выручил!

Пример из мануала взял или сам написал? Просто я перерыл мануалы, а примера такого не видел... 

Автор: ilia1234 5.6.2007, 19:29
Там моего процентов 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();
        }
    }
}


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