Tôi đang cố gắng sử dụng tuyệt vời DocX library on codeplex để tạo tài liệu từ.lưu tài liệu được tạo bởi docX vào phản hồi và gửi cho người dùng để tải xuống
khi người dùng nhấp vào một nút, các tài liệu được tạo ra và tôi muốn để có thể gửi nó cho người sử dụng ngay lập tức thông qua phản ứng .. Tôi đang làm một cái gì đó tương tự như này ngay bây giờ:
Chỉnh sửa mã dựa trên gợi ý
using (DocX Report = DocX.Create(string.Format("Report-{0}.doc", DateTime.Now.Ticks)))
{
Paragraph p = Report.InsertParagraph();
p.Append("Title").FontSize(30).Bold()
.Append("Sub title").FontSize(28)
.AppendLine()
.Append(DateTime.Now.Date)
;
MemoryStream ms = new MemoryStream();
Report.SaveAs(ms);
Response.Clear();
Response.AddHeader("content-disposition", "attachment; filename=\"" + fileName + ".docx\"");
Response.ContentType = "application/msword";
Response.Write(ms);
Response.End();
}
tôi đã thử một vài biến thể của việc này .. nhưng tôi không thể đạt được những gì tôi muốn .. Looking at this answer tôi có thể có thể lưu các tài liệu trên máy chủ và cởi mở với io dòng .. nhưng tôi muốn tránh bước bổ sung đó (và sau đó tôi cũng cần xóa tệp)
Tôi không thấy điểm tạo tệp trong vài milli giây .. phải có cách để lưu nội dung và gửi chúng tới luồng phản hồi .. phải không?
Tôi làm cách nào để tìm hiểu? thanks ..
EDIT: mã hiện tại của tôi hoặc ném lên không thể mở tệp (Access denied) error Nếu tôi đang sử dụng luồng tệp, HOẶC tải xuống tệp tài liệu trống mà không có bất kỳ nội dung nào (đôi khi, loại phản hồi được ghi vào tài liệu)
mã này được cho tôi một tài liệu MS Word với
System.IO.MemoryStream
như nội dung của nó ..
được rồi, đây là giải pháp làm việc cuối cùng:
Vì lý do nào đó, thư viện DocX không muốn lưu trực tiếp vào Response.OutputStream
, vì vậy tôi phải lưu nó vào luồng bộ nhớ và ghi luồng bộ nhớ để phản hồi, như Neil & Daniel được đề xuất. Dưới đây là những gì phù hợp với tôi:
MemoryStream ms = new MemoryStream()
Report.SaveAs(ms);
Response.Clear();
Response.AddHeader("content-disposition", "attachment; filename=\"" + fileName + ".doc\");
Response.ContentType = "application/msword";
ms.WriteTo(Response.OutputStream);
Response.End();
Điều gì sẽ xảy ra với mã hiện tại của bạn? – Stu
@Stu, mã đã chỉnh sửa để trả lời bạn, cảm ơn! – LocustHorde
Tôi đang bối rối mà câu trả lời để chấp nhận, tôi có thể bỏ phiếu cả hai như cả hai đã giúp tôi ... – LocustHorde