用openxml从最后一页排除页眉、页脚和水印
本文关键字:最后 一页 排除 openxml | 更新日期: 2023-09-27 18:06:02
我使用Open XML
(DocumentFormat.OpenXml
nuget包)来生成docx文件。以下是我的方法:
我有一个名为template.docx
的文件。在这个文件中,我有一个Cover Page
和一个空白页面,其中有header
, footer
和背景图像。总之,我首先打开文档,然后向文档添加一些文本,然后关闭它。
另一方面,我有一个名为template-back.docx
的文件,我想把它附加在上面修改的文档(template.docx
)的末尾。
我可以这样做,通过使用这个代码片段:
public static void MergeDocumentWithPagebreak(string sourceFile, string destinationFile, string altChunkID) {
using (var myDoc = WordprocessingDocument.Open(sourceFile, true)) {
var mainPart = myDoc.MainDocumentPart;
//Append page break
var para = new Paragraph(new Run((new Break() { Type = BreakValues.Page })));
mainPart.Document.Body.InsertAfter(para, mainPart.Document.Body.LastChild);
//Append file
var chunk = mainPart.AddAlternativeFormatImportPart(
AlternativeFormatImportPartType.WordprocessingML, altChunkID);
using (var fileStream = File.Open(destinationFile, FileMode.Open))
chunk.FeedData(fileStream);
var altChunk = new AltChunk{
Id = altChunkID
};
mainPart.Document
.Body
.InsertAfter(altChunk, mainPart.Document.Body.Elements<Paragraph>().Last());
mainPart.Document.Save();
}
}
但是,当我这样做时,header
, footer
和背景图像,被应用到最后一个页面。我希望能够排除最后一页从得到这些设计。我希望它干净,简单和白色。但在谷歌上搜索这个问题,没有任何帮助。你有什么主意吗?提前感谢。
关于合并文档的原文在这里:
这有点棘手,但并不那么复杂。
首先你得明白单词是怎么工作的:
- 默认情况下,一个word文档是一个节,这个节共享页眉和页脚。如果你想要不同的页眉/页脚,你必须在页面末尾创建一个换行符,以表明"下一页是一个新的部分"。
- 一旦创建了一个新的节,你必须指出"新的节不共享相同的页眉/页脚"
一些关于"如何在word中创建不同头文件"的文档。http://www.techrepublic.com/blog/microsoft-office/accommodate-different-headers-and-footers-in-a-word-document/
如果我们翻译到你的代码,在插入你的文档之前,你必须:
- 创建分隔符
- 在本节中插入新的页眉/页脚(空的)
- 将新文档插入到新部分
创建新的头文件,其他一些文档:https://msdn.microsoft.com/en-us/library/office/cc546917.aspx
技巧:如果你插入的文档不包含页眉/页脚,创建一个空的并重新复制
信息:我试图删除<w:headerReference r:id="rIdX" w:type="default"/>
或将r:id设置为0,但它不起作用。创建空标题是最快的方法
用以下代码替换你的分页符
Paragraph PageBreakParagraph = new Paragraph(new DocumentFormat.OpenXml.Wordprocessing.Run(new DocumentFormat.OpenXml.Wordprocessing.Break() { Type = BreakValues.Page }));
我还看到你在最后一个子之后插入,这与追加并不重要,但对你来说效果很好!用这个代替。
wordprocessingDocument.MainDocumentPart.Document.Body.Append(PageBreakParagraph)
您需要在section属性中添加分隔符。然后需要将节属性附加到段落属性。然后将段落属性附加到段落中。
Paragraph paragraph232 = new Paragraph();
ParagraphProperties paragraphProperties220 = new ParagraphProperties();
SectionProperties sectionProperties1 = new SectionProperties();
SectionType sectionType1 = new SectionType(){ Val = SectionMarkValues.NextPage };
sectionProperties1.Append(sectionType1);
paragraphProperties220.Append(sectionProperties1);
paragraph232.Append(paragraphProperties220);
//Replace your last but one line with this one.
mainPart.Document
.Body
.Append(altChunk);
生成的Open XML是:
<w:p>
<w:pPr>
<w:sectPr>
<w:type w:val="nextPage" />
</w:sectPr>
</w:pPr>
</w:p>
最简单的方法是在word中创建文档,然后在open XML生产力工具中打开它,您可以反映代码并查看c#代码将生成您想要实现的各种open XML元素。希望这对你有帮助!