Bonjour à tous,
J'essaie d'extraire le texte contenu dans différents types de fichiers. J'ai réussi pour les word, pdf, texte, html mais j'ai un petiti soucis pour les powerpoint.
En effet, grace à un exemple trouvé sur le net qui utilise l'api POI j'extrais du texte d'un powerpoint mais le problème est que cela n'extrait que le texte des 2 ou 3 premiers slides et le dernier slide. Bref, une partie du texte seulement est extraite et non pas tout le texte.
Voici mon code :
import
java.io.FileInputStream;import
org.apache.poi.util.LittleEndian;import
org.apache.poi.poifs.filesystem.DocumentInputStream;import
org.apache.poi.poifs.eventfilesystem.POIFSReader;import
org.apache.poi.poifs.eventfilesystem.POIFSReaderEvent;import
org.apache.poi.poifs.eventfilesystem.POIFSReaderListener;public
class PowerPoint {public PowerPoint(String filePath) throws Exception {POIFSReader poifReader =
new POIFSReader();poifReader.registerListener(
new PowerPoint.MyPOIFSReaderListener());poifReader.read(
new FileInputStream(filePath));}
public String getText() {System.out.println(sb.toString());
return sb.toString();}
StringBuffer sb =
new StringBuffer();class MyPOIFSReaderListener implements POIFSReaderListener {publicvoid processPOIFSReaderEvent(POIFSReaderEvent event) {char ch0 = (char)0;char ch11 = (char)11;try {DocumentInputStream dis =
null;dis = event.getStream();
byte btoWrite[] = newbyte[dis.available()];dis.read(btoWrite, 0, dis.available());
for (int i = 0; i < btoWrite.length-20; i++) {long type = LittleEndian.getUShort(btoWrite, i + 2);long size = LittleEndian.getUInt(btoWrite, i + 4);if (type == 4008) {try {String s =
new String(btoWrite, i + 4 + 1, (int) size + 3).replace(ch0, ' ').replace(ch11,' ');i = i + 4 + 1 + (
int) size - 1;if ((s.trim().startsWith("Click to edit") == false)|| (s.trim().startsWith(
"Cliquez pour modifier") == false)) {sb.append(s);
}
}
catch (Exception ee) {System.out.println("error:"+ee); }}
}
}
catch (Exception ex) {ex.printStackTrace();
return;}
}
}
}
Est-ce que quelqu'un pourrait m'aider svp??
Cela fait quelques jours que je cherche désespérément ce qui ne va pas mais je ne trouve pas.
D'avance je vous remercie.
*** Kakol ***