创建docx word文档web api .net core 2.0 [英] Create docx word document web api .net core 2.0

查看:27
本文介绍了创建docx word文档web api .net core 2.0的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在用 Asp.net core 2.0 开发一个 Web API 项目.我需要一个库或创建 Word 文档的方法.我搜索了一个尝试过的 NPOI 和 DocX.两者都没有预期的那么好.谁能给我推荐一个工具?

I am developing a Web API project in Asp.net core 2.0. I am in need of a library or way to create Word document. I have searched an tried NPOI and DocX. Both are not as good as expected. Can anyone suggest me a tool?

推荐答案

乍一看,下面的链接可以帮上忙:

At first glance, the below link can help somehow:

https://asp.net-hacker.rocks/2017/02/23/word-document-formatter-in-aspnetcore.html

无论如何,关于 DOCX - Microsoft 使用 Open XML SDK 的 Word 文档 - 您可以使用 2.8.1 版将 Open XML SDK 安装到您的解决方案中.都是免费的.

Anyway, about DOCX - Word Document using Open XML SDK by Microsoft - you can install Open XML SDK into your solution using the version 2.8.1. It´s all free.

文档可在:

在 GIT 上 => https://github.com/OfficeDev/Open-XML-SDK;

On GIT => https://github.com/OfficeDev/Open-XML-SDK ;

在 MSDN => https://docs.microsoft.com/en-us/office/open-xml/open-xml-sdk

ps:MSDN 文档都是关于版本 SDK 2.5 而不是 2.8.1,但正如 GIT 链接中所解释的,没有实质性的变化.

ps: the MSDN documentation is all about the version SDK 2.5 instead of 2.8.1, but as explained in the GIT link there is no substancial changes.

无论如何要在 Web APP CORE 2.0 中使用它,您可以执行以下操作:

Anyway to use it in a Web APP CORE 2.0 you can do the follow:

  1. 安装 Nuget Packgaes 版本 SDK 2.8.1
  2. 在您的控制器中引用以下命名空间:

  1. INstall the Nuget Packgaes version SDK 2.8.1
  2. Reference the below namespaces within your controller:

using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;

  • 如果您只想将其保存在本地文件夹中,请执行以下操作:

  • If you just want to save it in a folder locally do something like:

    public static void CreateWordprocessingDocument(string filepath)
    {
        // Create a document by supplying the filepath. 
        using (WordprocessingDocument wordDocument =
            WordprocessingDocument.Create(filepath, WordprocessingDocumentType.Document))
        {
            // Add a main document part. 
            MainDocumentPart mainPart = wordDocument.AddMainDocumentPart();
    
            // Create the document structure and add some text.
            mainPart.Document = new Document();
            Body body = mainPart.Document.AppendChild(new Body());
            Paragraph para = body.AppendChild(new Paragraph());
            Run run = para.AppendChild(new Run());
            run.AppendChild(new Text("Create text in body - CreateWordprocessingDocument"));
        }
    }
    

  • 并称之为:

     public IActionResult GenerateDocx()
        {
            string filePath = @"c:wordInvoice.docx";
            CreateWordprocessingDocument(filePath);
        }
    

    1. 如果您想生成一个 docx 以从浏览器保存到用户计算机中,请在点击链接后执行以下操作:

    1. If you want to generate a docx to be saved into a users computer from their browsers, after hitting a link, do something like:

    // GET verb
    public IActionResult GenerateDocxBrowser()
    {
    
        // open xml sdk - docx
        using (MemoryStream mem = new MemoryStream())
        {
            using (WordprocessingDocument wordDoc = WordprocessingDocument.Create(mem, DocumentFormat.OpenXml.WordprocessingDocumentType.Document, true))
            {
                wordDoc.AddMainDocumentPart();
                // siga a ordem
                Document doc = new Document();
                Body body = new Body();
    
                // 1 paragrafo
                Paragraph para = new Paragraph();
    
                ParagraphProperties paragraphProperties1 = new ParagraphProperties();
                ParagraphStyleId paragraphStyleId1 = new ParagraphStyleId() { Val = "Normal" };
                Justification justification1 = new Justification() { Val = JustificationValues.Center };
                ParagraphMarkRunProperties paragraphMarkRunProperties1 = new ParagraphMarkRunProperties();
    
                paragraphProperties1.Append(paragraphStyleId1);
                paragraphProperties1.Append(justification1);
                paragraphProperties1.Append(paragraphMarkRunProperties1);
    
                Run run = new Run();
                RunProperties runProperties1 = new RunProperties();
    
                Text text = new Text() { Text = "The OpenXML SDK rocks!" };
    
                // siga a ordem 
                run.Append(runProperties1);
                run.Append(text);
                para.Append(paragraphProperties1);
                para.Append(run);
    
                // 2 paragrafo
                Paragraph para2 = new Paragraph();
    
                ParagraphProperties paragraphProperties2 = new ParagraphProperties();
                ParagraphStyleId paragraphStyleId2 = new ParagraphStyleId() { Val = "Normal" };
                Justification justification2 = new Justification() { Val = JustificationValues.Start };
                ParagraphMarkRunProperties paragraphMarkRunProperties2 = new ParagraphMarkRunProperties();
    
                paragraphProperties2.Append(paragraphStyleId2);
                paragraphProperties2.Append(justification2);
                paragraphProperties2.Append(paragraphMarkRunProperties2);
    
                Run run2 = new Run();
                RunProperties runProperties3 = new RunProperties();
                Text text2 = new Text();
                text2.Text = "Teste aqui";
    
                run2.AppendChild(new Break());
                run2.AppendChild(new Text("Hello"));
                run2.AppendChild(new Break());
                run2.AppendChild(new Text("world"));
    
                para2.Append(paragraphProperties2);
                para2.Append(run2);
    
                // todos os 2 paragrafos no main body
                body.Append(para);
                body.Append(para2);
    
                doc.Append(body);
    
                wordDoc.MainDocumentPart.Document = doc;
    
                wordDoc.Close();
            }
            return File(mem.ToArray(), "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "ABC.docx");
        }
    
    }
    

    上面的代码甚至展示了如何使用最重要的对象:正文、段落、段落和文本.记住永远遵循这个顺序!

    the above code even shows how to use the most important objects: body, paragraphs, runs and text. Remember to follow this order always!

    这篇关于创建docx word文档web api .net core 2.0的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆