Разрывы строк в CustomXMLPart
Я обновляю документ Word, переписывая файл CustomXMLPart. Я в основном следовал этому руководству: http://blogs.msdn.com/b/brian_jones/archive/2009/01/05/taking-advantage-of-bound-content-controls.aspx
private bool _makeDoc()
{
var path = HttpContext.Current.Server.MapPath("~/Classes/Word/template.docx");
using (WordprocessingDocument myDoc = WordprocessingDocument.Open(path, true))
{
//create new XML string
//these values will populate the template word doc
string newXML = "<root>";
newXML += "<name>";
newXML += "name goes here";
newXML += "</name>";
newXML += "<bio>";
newXML += "text" + "more text";
newXML += "</bio>";
newXML += "</root>";
MainDocumentPart mainPart = myDoc.MainDocumentPart;
//delete old xml part
mainPart.DeleteParts<CustomXmlPart>(mainPart.CustomXmlParts);
//add new xml part
CustomXmlPart customXml = mainPart.AddCustomXmlPart(CustomXmlPartType.CustomXml);
using(StreamWriter ts = new StreamWriter(customXml.GetStream()))
{
ts.Write(newXML);
}
myDoc.Close();
}
return true;
}
Проблема в том, что я не могу понять, как добавить разрыв строки между "текстом" и "больше текста". Я пробовал Environment.NewLine, я пытался обернуть его <w:p><w:r><w:t>
теги. Я не могу заставить его создать действительный файл docx.
Любая помощь будет оценена.
3 ответа
В свойствах Content Control есть опция "Разрешить возврат каретки". Включение и использование Environment.NewLine
работал отлично.
Я полагаю, что вам придется заключать их в абзацы, чтобы получить отдачу, насколько я знаю, по крайней мере. Таким образом, ваш полученный OOXML будет выглядеть примерно так:
<w:p><w:r><w:t>Text</w:t></w:r></w:p>
<w:p><w:r><w:t>More text</w:t></w:r></w:p>
Насколько это не приводит к действительному OOXML, когда вы это делаете, открыли ли вы пакет OOXML "document.xml" и увидели, где именно недопустимый XML?
Редактировать:
OOXML SDK 2.0 поставляется с некоторыми инструментами проверки, которые могут оказаться полезными.
Через необработанный XML вы можете добавить:
<w:r>
<w:br />
</w:r>
через OOXML SDK:
Paragraph paragraph1 = new Paragraph();
Run breakRun = new Run();
breakRun.Append( new Break() );
paragraph1.Append( breakRun );
_document.MainDocumentPart.Document.AppendChild<Paragraph>(paragraph1);
//where _document is the WordProcessingDocument instance