我有一些代码使用Java Apache POI库打开一个Microsoft Word文档,并使用Apache
POI将其转换为html,它还会获取文档上图像的字节数组数据。但是我需要将此信息转换为html才能写出为html文件。任何提示或建议,将不胜感激。请记住,我是台式机开发人员而不是Web程序员,因此,当您提出建议时,请记住这一点。下面的代码获取图像。
private void parseWordText(File file) throws IOException {
FileInputStream fs = new FileInputStream(file);
doc = new HWPFDocument(fs);
PicturesTable picTable = doc.getPicturesTable();
if (picTable != null){
picList = new ArrayList<Picture>(picTable.getAllPictures());
if (!picList.isEmpty()) {
for (Picture pic : picList) {
byte[] byteArray = pic.getContent();
pic.suggestFileExtension();
pic.suggestFullFileName();
pic.suggestPictureType();
pic.getStartOffset();
}
}
}
然后,下面的代码将文档转换为html。有没有办法在下面的代码中将byteArray添加到ByteArrayOutputStream中?
private void convertWordDoctoHTML(File file) throws ParserConfigurationException, TransformerConfigurationException, TransformerException, IOException {
HWPFDocumentCore wordDocument = null;
try {
wordDocument = WordToHtmlUtils.loadDoc(new FileInputStream(file));
} catch (IOException ex) {
Exceptions.printStackTrace(ex);
}
WordToHtmlConverter wordToHtmlConverter = new WordToHtmlConverter(DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument());
wordToHtmlConverter.processDocument(wordDocument);
org.w3c.dom.Document htmlDocument = wordToHtmlConverter.getDocument();
NamedNodeMap node = htmlDocument.getAttributes();
ByteArrayOutputStream out = new ByteArrayOutputStream();
DOMSource domSource = new DOMSource(htmlDocument);
StreamResult streamResult = new StreamResult(out);
TransformerFactory tf = TransformerFactory.newInstance();
Transformer serializer = tf.newTransformer();
serializer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
serializer.setOutputProperty(OutputKeys.INDENT, "yes");
serializer.setOutputProperty(OutputKeys.METHOD, "html");
serializer.transform(domSource, streamResult);
out.close();
String result = new String(out.toByteArray());
acDocTextArea.setText(newDocText);
htmlText = result;
}
综观对源代码org.apache.poi.hwpf.converter.WordToHtmlConverter
的
http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/converter/WordToHtmlConverter.java?view=markup&pathrev=1180740
它JavaDoc中的状态:
此实现不会创建图像或指向它们的链接。 可以通过重写{@link #processImage(Element,boolean,Picture)}方法来更改
如果您processImage(...)
在790行的AbstractWordConverter.java中查看该方法,则该方法似乎正在调用,然后是另一个名为的方法processImageWithoutPicturesManager(...)
。
http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/converter/AbstractWordConverter.java?view=markup&pathrev=1180740
此方法WordToHtmlConverter
再次定义,可疑与您要增加代码的地方完全相同(第317行):
@Override
protected void processImageWithoutPicturesManager(Element currentBlock,
boolean inlined, Picture picture)
{
// no default implementation -- skip
currentBlock.appendChild(htmlDocumentFacade.document
.createComment("Image link to '"
+ picture.suggestFullFileName() + "' can be here"));
}
我认为您已经开始将图像插入流中了。
创建转换器的子类,例如
public class InlineImageWordToHtmlConverter extends WordToHtmlConverter
然后覆盖该方法并将任何代码放入其中。
我还没有测试过,但是从理论上看,这应该是正确的方法。
问题内容: 如何将Word文档转换为PDF,其中文档包含各种内容,例如表格。尝试使用iText时,原始文档看起来与转换后的PDF不同。有没有我可以使用的开源API /库,而不是调用可执行文件? 问题答案: 这是一项艰巨的任务,如果您想要完美的结果(如果不使用Word则不可能),则难度就更大了,因为仅使用纯Java即可为您完成所有操作且都是开源的API数量为零,我相信( 更新:我错了,请参见下文 )
我需要将带有彩色单词的. docx文件转换为html。我尝试过庞大的库,但颜色丢失了。我如何才能实现我的目标?
我正在尝试创建一个包含多列的word文档。这样做(而不是使用表)的原因是,数据将跨越多个页面,在添加到新页面之前,我只能用列填充整个页面。 可以用ApachePOI实现吗?谢谢
对于一些用PHP编写的REST API,我被要求创建Swagger文档,由于我不知道有什么简单的方法可以向现有的API添加注释并创建这样的文档,所以我现在使用这个编辑器来生成一些文档。
问题内容: 这是我第一次使用Apache POI,并且已经在该站点上提出了我要问的问题,但是没有给他们明确的答案,所以我别无选择,只能接受您的所有帮助。 我正在尝试编写一个Java程序,该程序从一个文件夹中获取图像并将该图像插入到Word文档中。我正在为此程序使用Apache POI。我在这里发布我的代码。 我可以创建word文档文件,也可以插入文本,但是该行却给我错误,例如“将演员转换为docx