[英]Writing a docx file to a BLOB using Java 1.4 inside Oracle 10g
我試圖使用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();
}
看來問題出在我們的文檔處理引擎中。 它期待一個壓縮的docx。 很高興我們很好地記錄了我們的代碼。
無論如何,感謝所有關注我的問題的人。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.