1

使用 DocX 库时,我在服务器上生成 docx 文档,然后下载它。

为此,我需要将我的文档转换为字节数组。

为此,我之前将文档保存为物理文件,如下所示:

// Save all changes to this document.
document.SaveAs(GENERATED_DOCX_LOCATION);

return System.IO.File.ReadAllBytes(GENERATED_DOCX_LOCATION);

但我宁愿不这样做。是否可以序列化此对象以下载它而无需物理保存?

我已经试过了:

private byte[] ObjectToByteArray(object obj)
{
    if (obj == null)
        return null;
    BinaryFormatter bf = new BinaryFormatter();
    using (MemoryStream ms = new MemoryStream())
    {
        bf.Serialize(ms, obj);
        return ms.ToArray();
    }
}

和 :

return this.ObjectToByteArray(document);

但显然,DocX 没有实现 ISerializable。

编辑:下面的代码也不起作用

byte[] byteArray = null;
using (var stream = new MemoryStream())
{
    document.SaveAs(stream);
    byteArray = stream.ToArray();
}
return byteArray;
4

2 回答 2

1

试试这个,用你的文档位置替换我的 c:\temp... 路径,这将从字节数组中为你获取和写入文件

void Main()
{
    byte[] bytes = System.IO.File.ReadAllBytes(@"C:\temp\test.csv");

    using (var bw = new BinaryWriter(File.Open(@"C:\temp\test2.csv", FileMode.OpenOrCreate)))
    {
        bw.Write(bytes);
        bw.Flush();
    }

}
于 2017-10-02T12:03:43.360 回答
0

没有办法通过原始的 DocX 库来做到这一点。

这是一个耻辱,因为这个库使用 MemoryStream 来操纵数据。

为了解决我的问题,我只是添加了一个新的公共只读属性来公开私有 MemoryStream 变量,然后我使用了这个简单的代码:

DocX 项目中添加的代码:

public MemoryStream DocumentMemoryStream { get { return this.memoryStream; }  } 

我的主要功能中的代码:

return document.DocumentMemoryStream.ToArray();
于 2017-10-03T11:03:14.833 回答