Установка поля документа Word в С# с использованием Open XML

Я создал документ Word, используя Open Xml. Документ создается при создании кнопки в веб-части. В настоящее время я создал таблицу в документе, чтобы проверить, работает ли она. Что я хочу сделать сейчас, так это установить поля страницы для вновь созданного документа.

Я не уверен, что делать дальше. Каким был бы самый простой способ добиться этого?

(ниже приведен текущий код, который создает текстовый документ с таблицей внутри)


void GenerateBadges_Click(object sender, EventArgs e)
{
    //Creating a word document using the the Open XML SDK 2.0
    WordprocessingDocument document = WordprocessingDocument.Create(@"C:\Users\Daniel.Perez
    \Documents\sample-badges.docx", WordprocessingDocumentType.Document);

    //create a paragraph
    MainDocumentPart mainDocumenPart = document.AddMainDocumentPart();
    mainDocumenPart.Document = new Document();
    Body documentBody = new Body();
    mainDocumenPart.Document.Append(documentBody);

    //adding a table to the document
    Table table = new Table();
    TableProperties tblProps = new TableProperties();
    TableBorders tblBorders = new TableBorders();

    tblBorders.TopBorder = new TopBorder();
    tblBorders.TopBorder.Val = new EnumValue<BorderValues>(BorderValues.Single);

    tblBorders.BottomBorder = new BottomBorder();
    tblBorders.BottomBorder.Val = new EnumValue<BorderValues>(BorderValues.Single);

    tblBorders.RightBorder = new RightBorder();
    tblBorders.RightBorder.Val = new EnumValue<BorderValues>(BorderValues.Single);

    tblBorders.LeftBorder = new LeftBorder();
    tblBorders.LeftBorder.Val = new EnumValue<BorderValues>(BorderValues.Single);

    tblBorders.InsideHorizontalBorder = new InsideHorizontalBorder();
    tblBorders.InsideHorizontalBorder.Val = BorderValues.Single;

    tblBorders.InsideVerticalBorder = new InsideVerticalBorder();
    tblBorders.InsideVerticalBorder.Val = BorderValues.Single;

    tblProps.Append(tblBorders);
    table.Append(tblProps);

    TableRow row;
    TableCell cell;

    //first table row
    row = new TableRow();
    cell = new TableCell(new Paragraph(new Run(new Text("Table to hold the badges"))));

    TableCellProperties cellProp = new TableCellProperties();
    GridSpan gridSpan = new GridSpan();
    gridSpan.Val = 11;

    cellProp.Append(gridSpan);
    cell.Append(cellProp);
    row.Append(cell);
    table.Append(row);

    //second row
    row = new TableRow();
    cell = new TableCell();
    cell.Append(new Paragraph(new Run(new Text("Inner Table"))));
    row.Append(cell);

    for (int i = 1; i <= 10; i++)
    {
        row.Append(new TableCell(new Paragraph (new Run(new Text(i.ToString())))));
    }

    table.Append(row);
    for (int i = 1; i <= 10; i++)
    {
        row = new TableRow();
        row.Append(new TableCell(new Paragraph(new Run(new Text(i.ToString())))));

        for (int j = 1; j <= 10; j++)
        {
            row.Append(new TableCell(new Paragraph(new Run(new Text((i * j).ToString())))));
        }
        table.Append(row);
    }


    //add the table to the document - table needs to be wired into the for each loop above
    documentBody.Append(table);

    //Saving/Disposing of the created word Document
    document.MainDocumentPart.Document.Save();
    document.Dispose();
}

Любые предложения будут очень признательны. заранее спасибо


person Dev P    schedule 24.02.2012    source источник
comment
Вы пробовали PageMargin? msdn.microsoft.com/en-us/library/   -  person mindandmedia    schedule 24.02.2012
comment
это показывает, как это сделать в открытом Xml, меня интересует выполнение кода с использованием С#   -  person Dev P    schedule 24.02.2012
comment
stackoverflow.com/questions/8430437/open-xml-sdk -поля страницы   -  person mindandmedia    schedule 24.02.2012
comment
PageSetup, как указано в примере, не распознается Visual Studio 2010, есть идеи?   -  person Dev P    schedule 24.02.2012


Ответы (1)


Хотя вопрос довольно старый и остался без ответа, просто чтобы завершить тему и помочь тем, кто может попасть на эту страницу позже, я публикую разрешенный код:

SectionProperties sectionProps = new SectionProperties();
PageMargin pageMargin = new PageMargin() { Top = 1008, Right = (UInt32Value)1008U, Bottom = 1008, Left = (UInt32Value)1008U, Header = (UInt32Value)720U, Footer = (UInt32Value)720U, Gutter = (UInt32Value)0U };
sectionProps.Append(pageMargin);
mainPart.Document.Body.Append(sectionProps);

Примечание. Вы можете преобразовать код Open XML в код C# с помощью «Инструмента повышения производительности Open XML SDK 2.0». Просто откройте любой файл открытого формата XML (документ/таблицу и т. д.) в инструменте и нажмите кнопку панели инструментов «Отразить код».

person Khadim Ali    schedule 22.01.2013