Изменение полей документа Word - PullRequest
3 голосов
/ 27 февраля 2012

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

Пока код, который у меня есть, выглядит следующим образом:

void GenerateBadges_Click(object sender, EventArgs e)
{

string Title = null;
string jobTitle = null;

WordprocessingDocument document = WordprocessingDocument.Create(@"C:\sample-
badges.docx", WordprocessingDocumentType.Document);


MainDocumentPart mainDocumenPart = document.AddMainDocumentPart();
mainDocumenPart.Document = new Document();
Body documentBody = new Body();

mainDocumenPart.Document.Append(documentBody);


SPWeb web = SPContext.Current.Web;
SPList list = web.Lists["SampleList"];

SPListItemCollection collListItems = list.Items;

//getting the internal name for the Title and JobTitle fields of the list

string jobTitleField = collListItems.Fields["JobTitle"].InternalName;
string titleField = collListItems.Fields["Title"].InternalName;


//adding a table to the document
//creating a properties object to add border to the table (wNo border will be required)


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);

int x = collListItems.Count;

//creatin the table rows/cells
for (int i = 0; (i * 2) < x; i++)
{
TableRow row = new TableRow();

// get the indexes for left and right cells as pairs (i.e. 0 + 1, 2 + 3, 4 + 5 etc)
int leftIndexer = i * 2;
int rightIndexer = (i * 2) + 1;

if (leftIndexer == x)
{
break;
}

//getting the values from the list for the left table cell
Title = collListItems[leftIndexer][titleField].ToString();
jobTitle = collListItems[leftIndexer][jobTitleField].ToString();

// attach content to row as cell
row.Append(new TableCell(new Paragraph(new Run(new Text(Title)))));


// get right cell contents, if there is a value for this index
if (rightIndexer < x)
{
//getting the values from the list for the right cell
Title = collListItems[rightIndexer][titleField].ToString();
jobTitle = collListItems[rightIndexer][jobTitleField].ToString();

// attach to table row as right cell
row.Append(new TableCell(new Paragraph(new Run(new Text(Title)))));


}

// attach row to table
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();

Ответы [ 2 ]

4 голосов
/ 28 февраля 2012

Ключевая часть, позволяющая изменять поля страницы, - сначала создать объект «PageMagrin», а затем объект «SectionProperties». Наконец, нам нужно добавить объект поля страницы в объект свойств раздела. Наконец добавьте объект свойств раздела к объекту body.

Кроме того, очень полезно создать текстовый документ, а затем сохранить его в формате .xml. Затем откройте его в блокноте, notepad ++ или даже в Visual Studio 2010. При этом отобразятся все элементы, составляющие текстовый документ, и вы сможете определить, какие части или элементы документа необходимо изменить.

Ниже приведен действительный код:


//setting the page margins go here
PageMargin pageMargins = new PageMargin();
pageMargins.Left = 600;
pageMargins.Right = 600;
pageMargins.Bottom = 500;
pageMargins.Top = 500;
//pageMargins.Header = 1500; //not needed for now
//pageMargins.Footer = 1500; //not needed for now

//Important needed to access properties (sections) to set values for all elements.
SectionProperties sectionProps = new SectionProperties(); 
sectionProps.Append(pageMargins);
documentBody.Append(sectionProps);

Надеюсь, это поможет другим, мне было трудно понять это

3 голосов
/ 27 февраля 2012

Сложно сказать, что именно вы хотите сделать - следующие ссылки содержат подробности и исходный код полей, верхних и нижних колонтитулов и т. Д.:

Если вышесказанное не является тем, о чем вы просили, просьба представить более подробную информацию о том, чего вы добились ...

...