Ich habe eine ms Word-Dokument-Datei, die ich in ein HTML-Dokument mit Apache poi konvertieren.Codierung Problem mit Apache Poi-Konverter
dies ist der Code ich bin
InputStream input = new FileInputStream (path);
HWPFDocument wordDocument = new HWPFDocument (input);
WordToHtmlConverter wordToHtmlConverter = new WordToHtmlConverter (DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument());
List<Picture> pics = wordDocument.getPicturesTable().getAllPictures();
if (pics != null)
{
for (int i = 0; i <pics.size(); i++)
{
Picture pic = (Picture) pics.get (i);
try
{
pic.writeImageContent (new FileOutputStream (path + pic.hashCode() + '.' + pic.suggestFileExtension()));
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
}
}
wordToHtmlConverter.setPicturesManager (new PicturesManager()
{
public String savePicture (byte[] content, PictureType pictureType, String suggestedName, float widthInches, float heightInches)
{
for(Picture picName:pics)
{
return Integer.toString(picName.hashCode()) + '.' + picName.suggestFileExtension();
}
return null;
}
});
wordToHtmlConverter.processDocument(wordDocument);
Document htmlDocument = wordToHtmlConverter.getDocument();
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
DOMSource domSource = new DOMSource(htmlDocument);
StreamResult streamResult = new StreamResult (outStream);
TransformerFactory tf = TransformerFactory.newInstance();
Transformer serializer = tf.newTransformer();
serializer.setOutputProperty (OutputKeys.ENCODING, "gbk");
serializer.setOutputProperty (OutputKeys.INDENT, "yes");
serializer.setOutputProperty (OutputKeys.METHOD, "html");
serializer.transform (domSource, streamResult);
outStream.close();
String html = new String (outStream.toByteArray());
Der Code funktioniert gut läuft, dann ist es Bilder und Stile zu erhalten. Es scheint jedoch ein Problem mit einigen Zeichen im HTML zu geben, das nicht richtig kodiert. Beispielsweise werden einige Aufzählungsstile in der ursprünglichen DOC-Datei nicht korrekt ausgegeben. Ich habe mehrere Zeichensätze ausprobiert (ASCII, UTF-8, Gbk ...), alle erzeugen die Aufzählungspunkte nicht korrekt.
Ich bin% 99 Prozent sicher, dass die Kugeln wegen der Kodierung Kauderwelsch zeigen. Ist jemand mit Apache auf ein solches Problem gestoßen?
Ich habe diesen Ansatz versucht, ich habe die gleichen fehlerhaften Ergebnisse auf meiner endgültigen HTML-Seite wie zuvor. – Acidburn73
Dann verwenden Sie andere Aufzählungszeichen in Word. Bitte kommentieren Sie '//System.out.println((int)bulletText.charAt(0));' und schauen Sie, welcher Zeichencode verwendet wird, konvertieren Sie ihn in hex und ersetzen Sie dann das Zeichen "\ u ...." . –