Как скачать файл DOCX, созданный с открытым XML SDK?

1

Document.cs:

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

namespace GeneratedCode
{
    public class GeneratedClass
    {
        // Creates an Document instance and adds its children.
        public Document GenerateDocument()
        {
            Document document1 = new Document(){ MCAttributes = new MarkupCompatibilityAttributes(){ Ignorable = "w14 w15 wp14" }  };
            document1.AddNamespaceDeclaration("wpc", "http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas");
            document1.AddNamespaceDeclaration("mc", "http://schemas.openxmlformats.org/markup-compatibility/2006");
            document1.AddNamespaceDeclaration("o", "urn:schemas-microsoft-com:office:office");
            document1.AddNamespaceDeclaration("r", "http://schemas.openxmlformats.org/officeDocument/2006/relationships");
            document1.AddNamespaceDeclaration("m", "http://schemas.openxmlformats.org/officeDocument/2006/math");
            document1.AddNamespaceDeclaration("v", "urn:schemas-microsoft-com:vml");
            document1.AddNamespaceDeclaration("wp14", "http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing");
            document1.AddNamespaceDeclaration("wp", "http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing");
            document1.AddNamespaceDeclaration("w10", "urn:schemas-microsoft-com:office:word");
            document1.AddNamespaceDeclaration("w", "http://schemas.openxmlformats.org/wordprocessingml/2006/main");
            document1.AddNamespaceDeclaration("w14", "http://schemas.microsoft.com/office/word/2010/wordml");
            document1.AddNamespaceDeclaration("w15", "http://schemas.microsoft.com/office/word/2012/wordml");
            document1.AddNamespaceDeclaration("wpg", "http://schemas.microsoft.com/office/word/2010/wordprocessingGroup");
            document1.AddNamespaceDeclaration("wpi", "http://schemas.microsoft.com/office/word/2010/wordprocessingInk");
            document1.AddNamespaceDeclaration("wne", "http://schemas.microsoft.com/office/word/2006/wordml");
            document1.AddNamespaceDeclaration("wps", "http://schemas.microsoft.com/office/word/2010/wordprocessingShape");

            Body body1 = new Body();

            Paragraph paragraph1 = new Paragraph(){ RsidParagraphMarkRevision = "00100E91", RsidParagraphAddition = "009D5F75", RsidRunAdditionDefault = "00100E91" };

            ParagraphProperties paragraphProperties1 = new ParagraphProperties();

            ParagraphMarkRunProperties paragraphMarkRunProperties1 = new ParagraphMarkRunProperties();
            Languages languages1 = new Languages(){ Val = "en-US" };

            paragraphMarkRunProperties1.Append(languages1);

            paragraphProperties1.Append(paragraphMarkRunProperties1);

            Run run1 = new Run();

            RunProperties runProperties1 = new RunProperties();
            Languages languages2 = new Languages(){ Val = "en-US" };

            runProperties1.Append(languages2);
            Text text1 = new Text();
            text1.Text = "Hello";

            run1.Append(runProperties1);
            run1.Append(text1);
            BookmarkStart bookmarkStart1 = new BookmarkStart(){ Name = "_GoBack", Id = "0" };
            BookmarkEnd bookmarkEnd1 = new BookmarkEnd(){ Id = "0" };

            paragraph1.Append(paragraphProperties1);
            paragraph1.Append(run1);
            paragraph1.Append(bookmarkStart1);
            paragraph1.Append(bookmarkEnd1);

            SectionProperties sectionProperties1 = new SectionProperties(){ RsidRPr = "00100E91", RsidR = "009D5F75" };
            PageSize pageSize1 = new PageSize(){ Width = (UInt32Value)11906U, Height = (UInt32Value)16838U };
            PageMargin pageMargin1 = new PageMargin(){ Top = 1134, Right = (UInt32Value)850U, Bottom = 1134, Left = (UInt32Value)1701U, Header = (UInt32Value)708U, Footer = (UInt32Value)708U, Gutter = (UInt32Value)0U };
            Columns columns1 = new Columns(){ Space = "708" };
            DocGrid docGrid1 = new DocGrid(){ LinePitch = 360 };

            sectionProperties1.Append(pageSize1);
            sectionProperties1.Append(pageMargin1);
            sectionProperties1.Append(columns1);
            sectionProperties1.Append(docGrid1);

            body1.Append(paragraph1);
            body1.Append(sectionProperties1);

            document1.Append(body1);
            return document1;
        }


    }
}

Я хочу получить документ, созданный на этом коде (код из Open XML SDK).

как, нажав кнопку, чтобы подготовить документ (получить hello.docx)?

Созданный проект: asp.net mvc 4 add: 1) Контроллер 2) View-> code:

    @using (Html.BeginForm())
    {
        <input type="submit" value="Get docx file" />
    }

Спасибо вам всем.

Проблема решена.

Метод:

    public ActionResult GetFile()
    {
        try
        {
            byte[] document = new GeneratedClass().CreateDocumenBytes();
            return File(document, "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "Contract.docx");
        }
        catch (Exception ex)
        {
            ViewBag.ErrorMessage = ex.Message;
            throw;
        }
    }

Посмотреть:

    @using (Html.BeginForm())
    {
        @Html.ActionLink("Экспорт договора в Word","GetFile","get")
    }
Теги:
razor
asp.net-mvc
openxml-sdk

1 ответ

0
Лучший ответ

Вам просто нужно создать действие, которое возвращает FileResult или ContentResult. Т.е. ваше действие должно сделать звонок

return File(...);

или

return Content(...);

Вы должны указать параметры для имени файла, содержимого файла, кодирования... Посмотрите документацию:

[FileResult][1]
[ContentResult][2]

И документация методов Content и File для класса Controller (упомянутая выше).

Если вы хотите сделать это с помощью кнопки отправки, ваше действие должно быть украшено [HttpPost]. Вы также можете разоблачить его как ссылку и выполнить действие GET. В любом случае вам следует отправить дополнительную информацию, чтобы серверы знали, какой документ запрашивается (значения формы, если вы используете POST или параметры Url, если вы используете GET).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню