1、Aspose组件下载
Aspose下载地址:https://products.aspose.com/words/net
破解版下载地址:https://download.csdn.net/download/yedajiang44/10667863 (aspose.words 18.7破解版含net 和 .net core 2.0版本)
官方文档地址:https://docs.aspose.com/display/wordsnet/Home
官方Demo代码:https://github.com/aspose-words/Aspose.Words-for-.NET
2、Aspose.Words处理文件示例
Word文件使用Aspose.Words组件添加水印示例代码如下,
private static void InsertWatermarkText(Document doc, string watermarkText) { // 创建一个水印形状。这将是一个WordArt形状。 // 可以随意尝试其他形状类型作为水印。 Shape watermark = new Shape(doc, ShapeType.TextPlainText); watermark.Name = "WaterMark"; // 设置水印文本。 watermark.TextPath.Text = watermarkText; watermark.TextPath.FontFamily = "Arial"; watermark.Width = 500; watermark.Height = 100; // 文本将从左下角指向右上角。 watermark.Rotation = -40; // 如果需要纯黑色文本,请删除以下两行。 watermark.Fill.Color = Color.Gray; // 尝试LightGray得到更多文字风格的水印 watermark.StrokeColor = Color.Gray; // 尝试LightGray得到更多文字风格的水印 // 将水印放在页面中心。 watermark.RelativeHorizontalPosition = RelativeHorizontalPosition.Page; watermark.RelativeVerticalPosition = RelativeVerticalPosition.Page; watermark.WrapType = WrapType.None; watermark.VerticalAlignment = VerticalAlignment.Center; watermark.HorizontalAlignment = HorizontalAlignment.Center; //创建一个新的段落,并附加水印到这段。 Paragraph watermarkPara = new Paragraph(doc); watermarkPara.AppendChild(watermark); //在每个文档部分的所有标题中插入水印。 foreach (Section sect in doc.Sections) { //每个部分可能有三个不同的标题,因为我们需要 //水印将出现在所有页面,插入到所有页眉。 InsertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType.HeaderPrimary); InsertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType.HeaderFirst); InsertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType.HeaderEven); } } private static void InsertWatermarkIntoHeader(Paragraph watermarkPara, Section sect, HeaderFooterType headerType) { HeaderFooter header = sect.HeadersFooters[headerType]; if (header == null) { // There is no header of the specified type in the current section, create it. header = new HeaderFooter(sect.Document, headerType); sect.HeadersFooters.Add(header); } //在标题中插入一个水印的克隆。 header.AppendChild(watermarkPara.Clone(true)); }
参考文件:.NET Core Aspose Word(.doc,docx)文件加水印
3、文件上传及输出响应Aspose.Words处理后文件
1)上传方法
[HttpPost] public IActionResult UploadFile(IFormFile file) { if (file == null || file.Length == 0) return Content("file not selected"); var path = Path.Combine( Directory.GetCurrentDirectory(), "wwwroot", file.FileName); WatermarkDoc(file.OpenReadStream(), GetSaveFormat(file.FileName), path); return RedirectToAction("Files"); }
2)下载方法
public IActionResult Download(string filename) { if (filename == null) return Content("filename not present"); var path = Path.Combine( Directory.GetCurrentDirectory(), "wwwroot", filename); Stream memory = null; //若没加过水印需要加水印 if (path.IndexOf("watermark") == -1) { memory = WatermarkDoc(path, GetSaveFormat(path)); memory.Position = 0; return File(memory, GetContentType(path), Path.GetFileName(path)); } return File(path, GetContentType(path)); }
3)完整代码
using Aspose.Words; using Aspose.Words.Drawing; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Drawing; using System.IO; using System.Linq; using System.Reflection.Metadata; using System.Threading.Tasks; using Document = Aspose.Words.Document; namespace WebApplication1.CJavaPy { public class FileController : Controller { public IActionResult Index() { return View(); } public Stream WatermarkDoc(string inputFile, SaveFormat saveFormat) { var doc = new Aspose.Words.Document(inputFile); InsertWatermarkText(doc, "https://www.cjavapy.com"); var outputFile = new MemoryStream(); outputFile.Seek(0, SeekOrigin.Begin); doc.Save(outputFile, saveFormat); return outputFile; } public void WatermarkDoc(Stream inputFile, SaveFormat saveFormat, string fileName) { var doc = new Aspose.Words.Document(inputFile); InsertWatermarkText(doc, "https://www.cjavapy.com"); doc.Save(fileName, saveFormat); } private SaveFormat GetSaveFormat(string fileName) { FileFormatInfo info = FileFormatUtil.DetectFileFormat(fileName); SaveFormat result = SaveFormat.Unknown; // Display the document type. switch (info.LoadFormat) { case LoadFormat.Doc: result = SaveFormat.Doc; break; case LoadFormat.Dot: result = SaveFormat.Dot; break; case LoadFormat.Docx: result = SaveFormat.Docx; break; case LoadFormat.Docm: result = SaveFormat.Docm; break; case LoadFormat.Dotx: result = SaveFormat.Dotx; break; case LoadFormat.Dotm: result = SaveFormat.Dotm; break; case LoadFormat.FlatOpc: Console.WriteLine("\tFlat OPC document."); break; case LoadFormat.Rtf: Console.WriteLine("\tRTF format."); break; case LoadFormat.WordML: Console.WriteLine("\tMicrosoft Word 2003 WordprocessingML format."); break; case LoadFormat.Html: Console.WriteLine("\tHTML format."); break; case LoadFormat.Mhtml: Console.WriteLine("\tMHTML (Web archive) format."); break; case LoadFormat.Odt: Console.WriteLine("\tOpenDocument Text."); break; case LoadFormat.Ott: Console.WriteLine("\tOpenDocument Text Template."); break; case LoadFormat.DocPreWord60: Console.WriteLine("\tMS Word 6 or Word 95 format."); break; case LoadFormat.Unknown: default: Console.WriteLine("\tUnknown format."); break; } return result; } [HttpPost] public IActionResult UploadFile(IFormFile file) { if (file == null || file.Length == 0) return Content("file not selected"); var path = Path.Combine( Directory.GetCurrentDirectory(), "wwwroot", file.FileName); WatermarkDoc(file.OpenReadStream(), GetSaveFormat(file.FileName), path); return RedirectToAction("Files"); } /*[HttpPost] public async Task<IActionResult> UploadFile(IFormFile file) { if (file == null || file.Length == 0) return Content("file not selected"); var path = Path.Combine( Directory.GetCurrentDirectory(), "wwwroot", file.GetFilename()); using (var stream = new FileStream(path, FileMode.Create)) { await file.CopyToAsync(stream); } return RedirectToAction("Files"); }*/ private static void InsertWatermarkText(Document doc, string watermarkText) { // 创建一个水印形状。这将是一个WordArt形状。 // 可以随意尝试其他形状类型作为水印。 Shape watermark = new Shape(doc, ShapeType.TextPlainText); watermark.Name = "WaterMark"; // 设置水印文本。 watermark.TextPath.Text = watermarkText; watermark.TextPath.FontFamily = "Arial"; watermark.Width = 500; watermark.Height = 100; // 文本将从左下角指向右上角。 watermark.Rotation = -40; // 如果需要纯黑色文本,请删除以下两行。 watermark.Fill.ForeColor = Color.Gray; // 尝试LightGray得到更多文字风格的水印 watermark.StrokeColor = Color.Gray; // 尝试LightGray得到更多文字风格的水印 // 将水印放在页面中心。 watermark.RelativeHorizontalPosition = RelativeHorizontalPosition.Page; watermark.RelativeVerticalPosition = RelativeVerticalPosition.Page; watermark.WrapType = WrapType.None; watermark.VerticalAlignment = VerticalAlignment.Center; watermark.HorizontalAlignment = HorizontalAlignment.Center; //创建一个新的段落,并附加水印到这段。 Paragraph watermarkPara = new Paragraph(doc); watermarkPara.AppendChild(watermark); //在每个文档部分的所有标题中插入水印。 foreach (Section sect in doc.Sections) { //每个部分可能有三个不同的标题,因为我们需要 //水印将出现在所有页面,插入到所有页眉。 InsertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType.HeaderPrimary); InsertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType.HeaderFirst); InsertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType.HeaderEven); } } private static void InsertWatermarkIntoHeader(Paragraph watermarkPara, Section sect, HeaderFooterType headerType) { HeaderFooter header = sect.HeadersFooters[headerType]; if (header == null) { // There is no header of the specified type in the current section, create it. header = new HeaderFooter(sect.Document, headerType); sect.HeadersFooters.Add(header); } //在标题中插入一个水印的克隆。 header.AppendChild(watermarkPara.Clone(true)); } public IActionResult Download(string filename) { if (filename == null) return Content("filename not present"); var path = Path.Combine( Directory.GetCurrentDirectory(), "wwwroot", filename); Stream memory = null; //若没加过水印需要加水印 if (path.IndexOf("watermark") == -1) { memory = WatermarkDoc(path, GetSaveFormat(path)); memory.Position = 0; return File(memory, GetContentType(path), Path.GetFileName(path)); } return File(path, GetContentType(path)); } /* public async Task<IActionResult> Download(string filename) { if (filename == null) return Content("filename not present"); var path = Path.Combine( Directory.GetCurrentDirectory(), "wwwroot", filename); var memory = new MemoryStream(); using (var stream = new FileStream(path, FileMode.Open)) { await stream.CopyToAsync(memory); } memory.Position = 0; return File(memory, GetContentType(path), Path.GetFileName(path)); }*/ private string GetContentType(string path) { var types = GetMimeTypes(); var ext = Path.GetExtension(path).ToLowerInvariant(); return types[ext]; } private Dictionary<string, string> GetMimeTypes() { return new Dictionary<string, string> { {".txt", "text/plain"}, {".pdf", "application/pdf"}, {".doc", "application/vnd.ms-word"}, {".docx", "application/vnd.ms-word"}, {".xls", "application/vnd.ms-excel"}, {".xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"}, {".png", "image/png"}, {".jpg", "image/jpeg"}, {".jpeg", "image/jpeg"}, {".gif", "image/gif"}, {".csv", "text/csv"} }; } } }