Lire un fichier PDF via JFrame [Résolu]

Signaler
-
Messages postés
1
Date d'inscription
jeudi 19 juin 2014
Statut
Membre
Dernière intervention
19 juin 2014
-
Bonjour,
Mon travail de Master est d'indexer les documents PDF par une application JAVA et dans un premiers temps j'ai besoin de connaitre comment lire 'afficher' un document pdf

J'ai besoin d'un code source pour lire un fichier PDF via JFRAME de java et les outils nécessaires pour ça (API, ...)
Merci d'AVANCE

5 réponses

Messages postés
1
Date d'inscription
jeudi 19 juin 2014
Statut
Membre
Dernière intervention
19 juin 2014
3
Pour afficher un Pdf dans une JFrame, il faut utiliser les bibliothèques itext et pdf-renderer.
Voici le code que j'utilise :
import java.awt.Image;
import java.awt.Rectangle;
import java.io.*;
import java.nio.channels.*;
import java.nio.ByteBuffer;

import javax.swing.*;

import com.itextpdf.text.DocumentException;
import com.sun.pdfview.PDFFile;
import com.sun.pdfview.PDFPage;

public class PDFapercu {
 PDFFile pdffile;
 PDFPage page;
 JPanel panneau;
 String nomFichier ="";
 //Construct
 public PDFapercu(String nomFichier){
  this.nomFichier = nomFichier;
  SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                try {
                 previewPDFDocumentInImage();
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
        });
 }
 
 public void createPage() throws IOException{
  panneau = new JPanel();
   
  // Chargement du pdf
  //File file = new File("c:/temp/monFichier.pdf");
  File file = new File(nomFichier);
  RandomAccessFile raf = new RandomAccessFile(file, "r");
  FileChannel channel = raf.getChannel();
  ByteBuffer buf = channel.map(FileChannel.MapMode.READ_ONLY, 0, channel.size());
  
  pdffile = new PDFFile(buf);
  
  // on affiche la premiere page
  goToPage(1);
 }
 
 public void goToPage(int nbpage) throws IndexOutOfBoundsException
 {
  if(nbpage<1||nbpage>pdffile.getNumPages())
   throw new IndexOutOfBoundsException("index invalide demande : "+nbpage);
  page = pdffile.getPage(nbpage);
  
 }
 
 public void previewPDFDocumentInImage() throws IOException {
  
  createPage();
  
        //get the width and height for the doc at the default zoom
        Rectangle rect =
            new Rectangle(0, 0, (int)page.getBBox().getWidth(), (int)page.getBBox().getHeight());

        //generate the image
        Image img = page.getImage(rect.width, rect.height, //width & height
                rect, // clip rect
                null, // null for the ImageObserver
                true, // fill background with white
                true) // block until drawing is done
        ;
        JScrollPane scroller = new JScrollPane(new JLabel(new ImageIcon(img)));
        //show the image in a frame
        JFrame frame = new JFrame("yes yes yes  PDF document");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //frame.add(new JLabel(new ImageIcon(img)));
        frame.add(scroller);
        frame.pack();
        frame.setVisible(true);
    }
}



Edit : Ajout des balises de code !
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
342
Salut,

Il me semble qu'il n'existe pas d'API gratuite te permettant de faire cela

Ce n'est pas entièrement satisfaisant mais la seule solution serait :
Desktop.open(new File("fichier.pdf"));
Salut,
J'ai testé votre solution, il ça marche bien avec l'instruction Desktop.getDesktop().open(new File("C:\\AIDE13.pdf")); MAIS ce n'est mon objectif car le résultat a été affiché dans l'éditeur pdf et CE N'EST PAS DANS JFRAME.
J'ai trouvé une autre solution pour ouvrir un fichier HTML via URL dans JEditorPane, j'essaye d'utiliser l'idée pour ouvrir un fichier PDF

Merci bien pour votre Aide
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
342
Il me semble que tu ne peux pas aboutir de cette manière, c'est ton navigateur qui gère l'affichage des fichiers PDF, et même si JEditorPane te permet d'afficher du html, ce n'est pas un navigateur.

Tu es coincé je pense...
Messages postés
2
Date d'inscription
dimanche 1 juin 2014
Statut
Membre
Dernière intervention
18 juin 2014

bjr, j'ai rencontré le meme, est ce que vous pouvez m'aider à trouver la solution