2

我正在尝试使用 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();
}
4

1 回答 1

0

看起来问题出在我们的文档处理引擎中。它期待一个压缩的docx。很高兴我们很好地记录了我们的代码。

无论如何,感谢所有关注我问题的人。

于 2010-03-12T01:30:14.940 回答