Ce code sert à extraire les meta-données d'un fichier PDF(nom de l'auteur, date de création et meta-donnée personnalisées).
/!\ Cette source utilise la librairie IText en licence GNU.
Fonctionnement :
lancer la class avec deux argument : 0:chemin complet du fichier pdf; 1 : chemin complet du fichier texte de sortie.
Source / Exemple :
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import com.lowagie.text.pdf.PdfReader;
public class mapping_meta_donne {
/**
public static void main(String[] args) {
// TODO Auto-generated method stub
/**
- Parametres : args0 = fichier pdf à traiter args1 = fichier de sortie
-
- /
File pdf = null;// Fichier pdf
File sortie = null;// fichier text
PdfReader pdfr = null; // outil itext pour lire les pdf
int mod = 1;
pdf = new File(args[0]);
sortie = new File(args[1]);
// System.out.println(pdf.toString());
if (args.length != 2) {
System.out.println("Nombre d'argument incorrect!");
System.out.println("La class demande deux argument :");
System.out.println("0 : Le chemin complet du pdf à analyser");
System.out
.println("1 : Le chemin complet du fichier texte à remplire ou 0 si on ne veut pas remplire de fichier.");
} else {
if (java.util.regex.Pattern.matches(".*" + args[1] + ".*", "0")) {
System.out.println("de ; " + args[1]);
mod = 0;
File fil = new File("c:\rien");// ce fichier n'existe pas il
// sert à utiliser la même
// fonction d'ecriture avec
// creation de fichier ou pas
ecrire(fil, "pas de création de fichier", mod);
}
if (sortie.isFile()) {
sortie.delete();
}
if (!sortie.isFile()) {
try {
sortie.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
ecrire(sortie, e.toString(), mod);
}
}
if (pdf.isFile()) {
try {
pdfr = new PdfReader(pdf.getAbsolutePath());
} catch (IOException e) {
// TODO Auto-generated catch block
ecrire(sortie,
"impossible de lire le fichier pdf; erreur : "
+ e.toString(), mod);
}
HashMap infos = pdfr.getInfo();
ecrire(sortie, "nb meta=" + infos.size(), mod);
ecrire(sortie, "nb page=" + pdfr.getNumberOfPages(), mod);
// System.out.println(infos.size()+" taille");
// ecrire(sortie,infos.toString());
String result = infos.toString();
String[] result2 = result.split(",");
int i;
for (i = 0; i < result2.length; i++) {
ecrire(sortie, result2[i], mod);
}
} else {
ecrire(sortie, "le fichier pdf n'existe pas", mod);
}
}
}
public static void ecrire(File f, String m, int mode) {
PrintWriter fic = null;
System.out.println(m);
FileWriter n = null;
if (mode == 1) {
try {
n = new FileWriter(f, true);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
fic = new PrintWriter(n, true);
fic.println(m);
fic.flush();
fic.close();
}
}
}
20 déc. 2005 à 10:08
voila le lien pour telecharger itext (source, compile et doc.)
http://www.lowagie.com/iText/download.html
19 déc. 2005 à 12:01
donne just ele lien direct vers la librairie déjà c'est une bonne chose. SInon pour ton informaiton voici le lien vers la convention de codage SUN (en gros celle que tout le monde utilise à 90% partout sur le net) : http://java.sun.com/docs/codeconv/
++
19 déc. 2005 à 10:53
Désolé pour les conventions Sun mais j'ait apprit sur le tas et + ou - seul j'y ferrait plus gaffe à l'avenir.
Pour la librairie j'ais essayé de la mettre dans un zip mais elle est trop grosse le site ne veut pas la télécharger; toutefois elle est gratuite et je pense qu'elle doit facilement ce trouver sur le site de lowagie sinon envoyez moi un mail je vous la ferrait passer... :)
Voila IText est vraiment une librairie complète pour la manip de pdf, j'ait tellement galéré pour trouver des trucs comme sa ou le Split de fichier que quand j'ait trouver j'ait voulut en faire profité tt l monde :)
Ps : je rajoute le controle d'erreur.
17 déc. 2005 à 10:04
effectivement si tu peux respecter les conventions Java SUN ce serait sympa, de même que si tu mettais une source complète (avec la lib si pas trop gros) afin que les personnes qui veuillent tester ta source puissent le faire dans les meilleures condictions ! ;-)
++
15 déc. 2005 à 11:59
Si j'avais un p'tit conseil à donner, ou plutot deux, ce serait de respecter certains conventions (comme le nom de la classe sous la forme NomDeClasse) ainsi qu'à mettre un petit message d'erreur personnalisé en cas de mauvaise utilisation du code (if (args.length <2) .... )
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.