Aspose.Words for .NET下载地址 https://soft51.cc/software/175811283999782847
在现代企业级应用中,Web 应用集成是 Aspose.Words for .NET 的重要应用场景。通过本章教程,你将掌握如何在 ASP.NET Core 中集成文档处理功能、提供 Web API 文档服务、实现在线文档编辑器、文档预览组件、云存储集成以及微服务架构应用。教程包含完整的理论说明、详细实例代码,以及综合示例,帮助你快速搭建功能齐全的文档 Web 系统。
ASP.NET Core 是现代 Web 应用开发的首选框架,Aspose.Words 可以无缝集成到其中,实现以下功能:
集成步骤主要包括:
using Aspose.Words;
using Microsoft.AspNetCore.Mvc;
namespace WebDocDemo.Controllers
{
[ApiController]
[Route("api/[controller]")]
public class DocumentController : ControllerBase
{
[HttpGet("generate")]
public IActionResult GenerateDoc()
{
// 创建文档
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
builder.Writeln("Aspose.Words Web 集成示例");
builder.Writeln("生成时间: " + DateTime.Now);
// 保存为流
MemoryStream stream = new MemoryStream();
doc.Save(stream, SaveFormat.Docx);
stream.Position = 0;
return File(stream,
"application/vnd.openxmlformats-officedocument.wordprocessingml.document",
"GeneratedDocument.docx");
}
}
}
Document
和 DocumentBuilder
生成动态内容MemoryStream
返回文件流,实现浏览器下载Web API 文档服务可以让前端或其他系统直接请求生成文档,实现自动化报表或文件分发。关键点:
using Aspose.Words;
using Microsoft.AspNetCore.Mvc;
namespace WebDocDemo.Controllers
{
[ApiController]
[Route("api/[controller]")]
public class ReportController : ControllerBase
{
[HttpPost("generate-report")]
public IActionResult GenerateReport([FromBody] ReportRequest request)
{
// 加载模板
Document doc = new Document("Templates/ReportTemplate.docx");
doc.MailMerge.Execute(
new string[] { "UserName", "Date", "Score" },
new object[] { request.UserName, request.Date, request.Score }
);
// 输出 PDF
MemoryStream stream = new MemoryStream();
doc.Save(stream, SaveFormat.Pdf);
stream.Position = 0;
return File(stream, "application/pdf", "Report.pdf");
}
}
public class ReportRequest
{
public string UserName { get; set; }
public string Date { get; set; }
public double Score { get; set; }
}
}
在线文档编辑器可以在浏览器中直接编辑 Word 文档:
[HttpPost("save-document")]
public IActionResult SaveDocument([FromBody] DocumentSaveRequest request)
{
byte[] docBytes = Convert.FromBase64String(request.Base64Content);
using (MemoryStream stream = new MemoryStream(docBytes))
{
Document doc = new Document(stream);
doc.Save($"SavedDocuments/{request.FileName}.docx");
}
return Ok(new { message = "文档保存成功" });
}
public class DocumentSaveRequest
{
public string Base64Content { get; set; }
public string FileName { get; set; }
}
文档预览功能允许用户在浏览器中查看文档内容而无需下载:
[HttpGet("preview/{fileName}")]
public IActionResult PreviewDocument(string fileName)
{
Document doc = new Document($"SavedDocuments/{fileName}.docx");
MemoryStream stream = new MemoryStream();
HtmlSaveOptions options = new HtmlSaveOptions
{
ExportImagesAsBase64 = true
};
doc.Save(stream, options);
stream.Position = 0;
StreamReader reader = new StreamReader(stream);
string htmlContent = reader.ReadToEnd();
return Content(htmlContent, "text/html");
}
在现代 Web 系统中,文档通常存储在云端,实现跨平台访问:
using Amazon.S3;
using Amazon.S3.Transfer;
[HttpPost("upload-report")]
public async Task<IActionResult> UploadReport([FromBody] ReportRequest request)
{
Document doc = new Document("Templates/ReportTemplate.docx");
doc.MailMerge.Execute(
new string[] { "UserName", "Date", "Score" },
new object[] { request.UserName, request.Date, request.Score }
);
using (MemoryStream stream = new MemoryStream())
{
doc.Save(stream, SaveFormat.Docx);
stream.Position = 0;
var transferUtility = new TransferUtility(new AmazonS3Client());
await transferUtility.UploadAsync(stream, "my-bucket", $"Reports/{request.UserName}_{DateTime.Now:yyyyMMdd}.docx");
}
return Ok(new { message = "文档上传成功" });
}
MemoryStream
保存文档在微服务架构下,文档处理可以作为独立服务存在:
[HttpPost("async-generate")]
public IActionResult AsyncGenerate([FromBody] ReportRequest request)
{
// 将任务加入队列(示例伪代码)
TaskQueue.Enqueue(async () =>
{
Document doc = new Document("Templates/ReportTemplate.docx");
doc.MailMerge.Execute(
new string[] { "UserName", "Date", "Score" },
new object[] { request.UserName, request.Date, request.Score }
);
using (MemoryStream stream = new MemoryStream())
{
doc.Save(stream, SaveFormat.Pdf);
stream.Position = 0;
// 上传到云存储或发送邮件
await CloudStorage.UploadAsync(stream, $"Reports/{request.UserName}_{DateTime.Now:yyyyMMdd}.pdf");
}
});
return Ok(new { message = "文档生成任务已加入队列" });
}
using Aspose.Words;
using Aspose.Words.Saving;
using Microsoft.AspNetCore.Mvc;
using System;
using System.IO;
using System.Threading.Tasks;
namespace WebDocDemo.Controllers
{
[ApiController]
[Route("api/[controller]")]
public class FullWebDocController : ControllerBase
{
[HttpPost("generate-and-preview")]
public async Task<IActionResult> GenerateAndPreview([FromBody] ReportRequest request)
{
// 1. 加载模板并执行 MailMerge
Document doc = new Document("Templates/ReportTemplate.docx");
doc.MailMerge.Execute(
new string[] { "UserName", "Date", "Score" },
new object[] { request.UserName, request.Date, request.Score }
);
// 2. 保存为 PDF
MemoryStream pdfStream = new MemoryStream();
doc.Save(pdfStream, SaveFormat.Pdf);
pdfStream.Position = 0;
// 3. 保存 HTML 预览
MemoryStream htmlStream = new MemoryStream();
HtmlSaveOptions options = new HtmlSaveOptions
{
ExportImagesAsBase64 = true
};
doc.Save(htmlStream, options);
htmlStream.Position = 0;
StreamReader reader = new StreamReader(htmlStream);
string htmlContent = reader.ReadToEnd();
// 4. 返回 JSON 包含 PDF 下载地址和 HTML 预览
return Ok(new
{
PdfFileName = $"Report_{request.UserName}_{DateTime.Now:yyyyMMdd}.pdf",
HtmlPreview = htmlContent
});
}
}
public class ReportRequest
{
public string UserName { get; set; }
public string Date { get; set; }
public double Score { get; set; }
}
}
本章内容覆盖:
通过本章教程,你可以在现代 Web 系统中高效整合 Aspose.Words,实现企业级文档 Web 服务。
Aspose.Words for .NET下载地址 https://soft51.cc/software/175811283999782847