我正在尝试使用Java生成一个空白的docx文件,添加一些文本,然后将其写入BLOB,我可以返回到我们的文档处理引擎(PL / SQL和Java的自定义混乱)。我必须在Oracle 10g中使用1.4 JVM,所以没有Java 1.5的东西。将docx写入本地计算机上的文件时没有问题,但是当我尝试写入BLOB时,我得到了垃圾。我在做一些蠢事吗?任何帮助表示赞赏。请注意,在下面的代码中,所有get [name] Xml()方法都返回一个org.w3c.dom.Document。
public void save(String fileName) throws Exception {
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(fileName));
addEntry(zos, getDocumentXml(), "word/document.xml");
addEntry(zos, getContentTypesXml(), "[Content_Types].xml");
addEntry(zos, getRelsXml(), "_rels/.rels");
zos.flush();
zos.close();
}
public java.sql.BLOB save() throws Exception {
java.sql.Connection conn = DbUtilities.openConnection();
BLOB outBlob = BLOB.createTemporary(conn, true, BLOB.DURATION_SESSION);
outBlob.open(BLOB.MODE_READWRITE);
ZipOutputStream zos = new ZipOutputStream(outBlob.setBinaryStream(0L));
addEntry(zos, getDocumentXml(), "word/document.xml");
addEntry(zos, getContentTypesXml(), "[Content_Types].xml");
addEntry(zos, getRelsXml(), "_rels/.rels");
zos.flush();
zos.close();
return outBlob;
}
private void addEntry(ZipOutputStream zos, Document doc, String fileName) throws Exception {
Transformer t = TransformerFactory.newInstance().newTransformer();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
t.transform(new DOMSource(doc), new StreamResult(baos));
ZipEntry ze = new ZipEntry(fileName);
byte[] data = baos.toByteArray();
ze.setSize(data.length);
zos.putNextEntry(ze);
zos.write(data);
zos.flush();
zos.closeEntry();
}
答案 0 :(得分:0)
看起来问题出现在我们的文档处理引擎中。它期待一个压缩的docx。很高兴我们很好地记录了我们的代码。
无论如何,感谢所有看过我问题的人。