【发布时间】:2017-01-25 16:20:03
【问题描述】:
我有一个 ms word doc 文件,我正在使用 apache poi 将其转换为 html 文档。
这是我正在运行的代码
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());
代码运行良好,它保留了图像和样式。但是,html 中的某些字符似乎存在问题,它没有正确编码。例如,原始 .doc 文件中的某些项目符号样式无法正确输出。我尝试了多个字符集(ASCII、UTF-8、gbk ...)都没有正确生成项目符号。
我 %99% 确定项目符号由于编码而显示为乱码。有没有人遇到过这样的 apache 问题?
【问题讨论】:
标签: encoding apache-poi converter