public partial class DemoHeaderFooter : Form { public DemoHeaderFooter() { InitializeComponent(); } private void btnOpen_Click(object sender, EventArgs e) { OpenFileDialog dialog = new OpenFileDialog(); dialog.Filter = ""; if (dialog.ShowDialog() == DialogResult.OK) { txtSourceFile.Text = dialog.FileName; } } private void btnTargetDir_Click(object sender, EventArgs e) { FolderBrowserDialog dialog = new FolderBrowserDialog(); if (dialog.ShowDialog() == DialogResult.OK) { txtTargetDir.Text = dialog.SelectedPath; } } private void btnGetHeader_Click(object sender, EventArgs e) { string sourceFile = txtSourceFile.Text; Stream headerStream = null; const string presentationmlNamespace = "http://schemas.openxmlformats.org/presentationml/2006/main"; const string drawingmlNamespace = "http://schemas.openxmlformats.org/drawingml/2006/main"; const string relationshipNamespace = "http://schemas.openxmlformats.org/officeDocument/2006/relationships"; NameTable nt = new NameTable(); XmlNamespaceManager nsManager = new XmlNamespaceManager(nt); nsManager.AddNamespace("p", presentationmlNamespace); nsManager.AddNamespace("a", drawingmlNamespace); nsManager.AddNamespace("r", relationshipNamespace); using (WordprocessingDocument wdSourceDoc = WordprocessingDocument.Open(sourceFile, false)) { HeaderPart soruceHeader = wdSourceDoc.MainDocumentPart.HeaderParts.FirstOrDefault(); if (soruceHeader == null) { MessageBox.Show("操作失败,源文档没有设置页眉。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } headerStream = soruceHeader.GetStream(); var imgs = soruceHeader.ImageParts; DirectoryInfo dir = new DirectoryInfo(txtTargetDir.Text); foreach (FileInfo file in dir.GetFiles("*.docx")) { using (WordprocessingDocument wdTargetDoc = WordprocessingDocument.Open(file.FullName, true)) { MainDocumentPart mainPart = wdTargetDoc.MainDocumentPart; mainPart.DeleteParts<HeaderPart>(mainPart.HeaderParts); HeaderPart newHeader = mainPart.AddNewPart<HeaderPart>(); string rID = mainPart.GetIdOfPart(newHeader); newHeader.FeedData(soruceHeader.GetStream()); foreach (ImagePart img in soruceHeader.ImageParts) { string imgID = soruceHeader.GetIdOfPart(img); ImagePart newImagePart = newHeader.AddPart<ImagePart>(img); string newIDs = newHeader.GetIdOfPart(newImagePart); string searchString = string.Format("//a:blip[@r:embed='{0}']", imgID); XmlDocument doc = new XmlDocument(); doc.Load(XmlReader.Create(newHeader.GetStream())); XmlNode relNode = doc.SelectSingleNode(searchString,nsManager); if (relNode != null) { relNode.Attributes["r:embed"].Value = newIDs; } doc.Save(newHeader.GetStream()); } var sectPrs = mainPart.Document.Body.Elements<SectionProperties>(); foreach (SectionProperties sectPr in sectPrs) { sectPr.RemoveAllChildren<HeaderReference>(); sectPr.PrependChild<HeaderReference>(new HeaderReference(){Id=rID}); } } } } MessageBox.Show("操作完成", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } private void CopyPartContent<T>(T oldPart, T newPart) where T : OpenXmlPart { using (Stream inputStream = oldPart.GetStream(FileMode.Open, FileAccess.Read)) { byte[] oldPartContent = new byte[inputStream.Length]; inputStream.Read(oldPartContent, 0, (int)inputStream.Length); using (Stream outputStream = newPart.GetStream(FileMode.Open, FileAccess.ReadWrite)) { outputStream.Write(oldPartContent, 0, oldPartContent.Length); } } } private void btnHeaderXML_Click(object sender, EventArgs e) { txtHeaderXML.Text = string.Empty; using (WordprocessingDocument wdDoc = WordprocessingDocument.Open(txtSourceFile.Text, false)) { MainDocumentPart mainPart = wdDoc.MainDocumentPart; wdcPro.Properties properties = wdDoc.CustomFilePropertiesPart.Properties; foreach (wdcPro.CustomDocumentProperty p in properties) { string cust = p.Name + p.VTLPWSTR; } wdPro.Properties pro = wdDoc.ExtendedFilePropertiesPart.Properties; foreach (HeaderPart header in mainPart.HeaderParts) { foreach (ImagePart img in header.ImageParts) { } txtHeaderXML.SelectionColor = System.Drawing.Color.Red; txtHeaderXML.AppendText(header.Header.LocalName); txtHeaderXML.AppendText(Environment.NewLine); txtHeaderXML.SelectionColor = System.Drawing.Color.Black; XmlDocument xDoc = new XmlDocument(); xDoc.Load(header.GetStream()); txtHeaderXML.AppendText(xDoc.InnerXml); txtHeaderXML.AppendText(Environment.NewLine); txtHeaderXML.AppendText(Environment.NewLine); } } } private void btnReplace2_Click(object sender, EventArgs e) { string sourceFile = txtSourceFile.Text; Stream headerStream = null; using (WordprocessingDocument wdSourceDoc = WordprocessingDocument.Open(sourceFile, false)) { HeaderPart soruceHeader = wdSourceDoc.MainDocumentPart.HeaderParts.FirstOrDefault(); if (soruceHeader == null) { MessageBox.Show("操作失败,源文档没有设置页眉。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } headerStream = soruceHeader.GetStream(); var imgs = soruceHeader.ImageParts; DirectoryInfo dir = new DirectoryInfo(txtTargetDir.Text); foreach (FileInfo file in dir.GetFiles("*.docx")) { using (WordprocessingDocument wdTargetDoc = WordprocessingDocument.Open(file.FullName, true)) { MainDocumentPart mainPart = wdTargetDoc.MainDocumentPart; mainPart.DeleteParts<HeaderPart>(mainPart.HeaderParts); HeaderPart newHeader = mainPart.AddNewPart<HeaderPart>(); string rID = mainPart.GetIdOfPart(newHeader); foreach (ImagePart sImg in soruceHeader.ImageParts) { ImagePart img = newHeader.AddPart<ImagePart>(sImg); } var sectPrs = mainPart.Document.Body.Elements<SectionProperties>(); foreach (SectionProperties sectPr in sectPrs) { sectPr.RemoveAllChildren<HeaderReference>(); sectPr.PrependChild<HeaderReference>(new HeaderReference() { Id = rID }); } } } } MessageBox.Show("操作完成", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } }