-53%
Le deal à ne pas rater :
GACHI Batterie Externe 26800mAh
24.94 € 52.99 €
Voir le deal

Une entité pour visualiser un PDF

Aller en bas

Une entité pour visualiser un PDF Empty Une entité pour visualiser un PDF

Message  Gus le Mer 20 Avr - 11:56

Voici une entité graphique de type "éditeur de fichier" qui permet d'afficher un PDF et de parcourir ses pages.
gus.file.editor.pdf.editor1

Une entité pour visualiser un PDF Gusexplorer_afficher_pdf
Illustration de l'application "Gus Explorer" utilisant l'entité gus.file.editor.pdf.editor1

L'entité fait appel à un objet Map fournit par le gestionnaire de l'application pour mémoriser la page courante pour chaque pdf déjà chargé.
Par ailleurs, elle dépend des deux APIs : itext-1.4.6.jar et jpedal.jar

Voici le code source de l'entité :

Code:
package gus05.entity.gus.file.editor.pdf.editor1;

import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.File;
import java.util.Map;

import gus05.framework.core.Entity;
import gus05.framework.core.Outside;
import gus05.framework.features.Give;
import gus05.framework.features.Graphic;
import gus05.framework.features.Register;
import gus05.framework.tools.DefaultSupport;

import javax.swing.BorderFactory;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSlider;
import javax.swing.SwingConstants;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import org.jpedal.Display;
import org.jpedal.PdfDecoder;

public class PdfEditor1 extends DefaultSupport implements Entity, Give, Graphic, Register, ChangeListener, MouseListener {


    public String getName()         {return "gus.file.editor.pdf.editor1";}
    public String getCreationDate()      {return "2006.10.27";}


    private JPanel panel;
    private JSlider slider;
    private JLabel numberLabel;
   
    private PdfDecoder decoder;
   
    private File file;
    private String filePath;
    private int pageCount;
    private int currentPage;
   
    private Map pagesMap;
   
    private boolean waiting_opening = false;
    private boolean waiting_decoding = false;
   
    private boolean during_opening = false;
    private boolean during_decoding = false;
   


    public PdfEditor1() throws Exception
    {
        pagesMap = (Map) Outside.resource(this,"pagesmap");
       
        decoder = new PdfDecoder();
        decoder.setDisplayView(Display.SINGLE_PAGE,Display.DISPLAY_CENTERED);
        decoder.addMouseListener(this);       
       
        slider = new JSlider(JSlider.VERTICAL);
        slider.setBorder(BorderFactory.createEmptyBorder(0,0,0,10));
        slider.setInverted(true);
        slider.setMinimum(0);
       
        slider.setMajorTickSpacing(50);
        slider.setPaintTicks(true);
        slider.setPaintLabels(true);
        slider.addChangeListener(this);
       
        numberLabel = new JLabel(" ",SwingConstants.CENTER);
        numberLabel.setFont(numberLabel.getFont().deriveFont(Font.PLAIN));
       
        JPanel p = new JPanel(new BorderLayout());
        p.add(slider,BorderLayout.CENTER);
        p.add(numberLabel,BorderLayout.SOUTH);
       
        JScrollPane scroll = new JScrollPane(decoder);
        scroll.getVerticalScrollBar().setUnitIncrement(30);
       
        panel = new JPanel(new BorderLayout());
        panel.add(p,BorderLayout.WEST);
        panel.add(scroll,BorderLayout.CENTER);
    }


    public void give(Object obj) throws Exception
    {
        file = (File) obj;
        filePath = file.getAbsolutePath();
       
        if(waiting_opening)return;
        Thread t = new Thread(){public void run(){openPdfFile();}};
        t.start();
    }


    public JComponent gui()
    {return panel;}


    public void register(String key, Object obj) throws Exception
    {
        throw new Exception("Unknown key: "+key);
    }
   
   
    public void stateChanged(ChangeEvent e)
    {
        int index = slider.getValue();
        if(index==0) index=1;
        goToPage(index);
    }
   
   
    private void goToPage(int newPage)
    {
        if(newPage==currentPage) return;
        if(newPage>pageCount) return;
        if(newPage<1) return;
       
        currentPage = newPage;
        updateNumberLabel();
        updateSlider();
       
        pagesMap.put(filePath,""+currentPage);
        if(waiting_decoding)return;
        Thread t = new Thread(){public void run(){decodePage();}};
        t.start();
    }
   
   
    private void updateNumberLabel()
    {numberLabel.setText(" "+currentPage+" / "+pageCount+" ");}

   
    private void updateSlider()
    {
        slider.removeChangeListener(this);
        slider.setMaximum(pageCount);
        slider.setValue(currentPage);
        slider.addChangeListener(this);
    }
   
   
    private void openPdfFile()
    {
        waiting_opening = true;
       
        while(during_opening || during_decoding)
        {Thread.yield();}
       
        waiting_opening = false;
        during_opening = true;
       
        try
        {
            decoder.flushObjectValues(true);
            decoder.resetViewableArea();
            decoder.openPdfFile(filePath);
           
            pageCount = decoder.getPageCount();
            currentPage = findPdfPage();
            updateNumberLabel();
            updateSlider();
           
            decoder.decodePage(currentPage);
            decoder.setPageParameters((float)1.5,1);
            decoder.repaint();
        }
        catch(Exception e)
        {Outside.err(this,"openPdfFile()",e);}
        during_opening = false;
    }
   

    private void decodePage()
    {
        waiting_decoding = true;
       
        while(during_opening || during_decoding)
        {Thread.yield();}
       
        waiting_decoding = false;
        during_decoding = true;
       
        try
        {
            http://System.out.println("decode page "+currentPage);
            decoder.decodePage(currentPage);
            decoder.repaint();
        }
        catch(Exception e)
        {Outside.err(this,"decodePage()",e);}
        during_decoding = false;
    }
   

    private int findPdfPage()
    {
        if(!pagesMap.containsKey(filePath))
            pagesMap.put(filePath,"1");
        int n = Integer.parseInt((String) pagesMap.get(filePath));
        return n;
    }
   
   
    public void mouseClicked(MouseEvent e) {
    }
    public void mousePressed(MouseEvent e)
    {
        if(e.getButton()==MouseEvent.BUTTON1) goToPage(currentPage+1);
        if(e.getButton()==MouseEvent.BUTTON3) goToPage(currentPage-1);
    }
    public void mouseReleased(MouseEvent e) { }
    public void mouseEntered(MouseEvent e) {}
    public void mouseExited(MouseEvent e) {}
   
}
Gus
Gus
Admin

Messages : 249
Date d'inscription : 01/09/2009

http://www.gus05.com

Revenir en haut Aller en bas

Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum