private void AddPicture(OXmlPictureElement element) { //if (_paragraph == null) // AddParagraph(); AddRun(); // Drawing : child Inline, Anchor // <w:drawing> _run.AppendChild(new Drawing(OXmlPicture.Create(_mainPart, element, ++_pictureId))); }
// Body : BodyType : OpenXmlCompositeElement // Header : OpenXmlPartRootElement : OpenXmlCompositeElement private void _Create(string file, IEnumerable <OXmlElement> elements) { using (_document = WordprocessingDocument.Create(file, WordprocessingDocumentType.Document)) { _mainPart = _document.AddMainDocumentPart(); _mainPart.Document = new Document(); OXmlPicture.AddNamespaceDeclarations(_mainPart.Document); _body = _mainPart.Document.AppendChild(new Body()); _element = _body; foreach (OXmlElement element in elements) { switch (element.Type) { case OXmlElementType.Paragraph: AddParagraph((OXmlParagraphElement)element); break; case OXmlElementType.Break: AddBreak((OXmlBreakElement)element); break; case OXmlElementType.Text: AddText((OXmlTextElement)element); break; case OXmlElementType.Line: AddLine(); break; case OXmlElementType.TabStop: AddTabStop(); break; case OXmlElementType.SimpleField: AddSimpleField((OXmlSimpleFieldElement)element); break; case OXmlElementType.DocSection: //if (_headerFooter) if (_currentElement != OXmlDocElementType.Body) { throw new PBException("DocSection cant be inside Header or Footer"); } AddDocSection((OXmlDocSectionElement)element); break; //case OXmlElementType.DocDefaults: // if (_headerFooter) // throw new PBException("DocDefaults cant be inside Header or Footer"); // AddDocDefaults((OXmlDocDefaultsElement)element); // break; case OXmlElementType.DocDefaultsRunProperties: //if (_headerFooter) if (_currentElement != OXmlDocElementType.Body) { throw new PBException("DocDefaultsRunProperties cant be inside Header or Footer"); } AddRunPropertiesDefault((OXmlDocDefaultsRunPropertiesElement)element); break; case OXmlElementType.DocDefaultsParagraphProperties: //if (_headerFooter) if (_currentElement != OXmlDocElementType.Body) { throw new PBException("DocDefaultsParagraphProperties cant be inside Header or Footer"); } //AddParagraphPropertiesDefault((OXmlDocDefaultsParagraphPropertiesElement)element); AddParagraphPropertiesDefault(); break; //case OXmlElementType.OpenHeaderFooter: // OpenHeaderFooter((OXmlOpenHeaderFooter)element); // break; case OXmlElementType.OpenHeader: if (_currentElement != OXmlDocElementType.Body) { throw new PBException("Open header cant be inside Header or Footer"); } OpenHeader((OXmlOpenHeaderElement)element); break; case OXmlElementType.OpenFooter: if (_currentElement != OXmlDocElementType.Body) { throw new PBException("Open footer cant be inside Header or Footer"); } OpenFooter((OXmlOpenFooterElement)element); break; case OXmlElementType.CloseHeader: if (_currentElement != OXmlDocElementType.Header) { throw new PBException("Close header without open header"); } CloseHeaderFooter(); break; case OXmlElementType.CloseFooter: if (_currentElement != OXmlDocElementType.Footer) { throw new PBException("Close footer without open footer"); } CloseHeaderFooter(); break; case OXmlElementType.Style: //if (_headerFooter) if (_currentElement != OXmlDocElementType.Body) { throw new PBException("Style cant be inside Header or Footer"); } AddStyle((OXmlStyleElement)element); break; case OXmlElementType.Picture: AddPicture((OXmlPictureElement)element); break; default: throw new PBException($"unknow element type {element.Type}"); } } } }