使用 Aspose 在文档中设置不同的背景
Set different backgrounds in the document using Aspose
我想根据以下条件在我的文档中设置不同的背景
- 文档的第一页应包含 first.png 作为背景。
- 文档的其余页面应包含 second.png 作为背景。
如果输入文档的第一页页眉中不包含图像,我可以按照我的期望设置背景。
如果文档的第一页在页眉中包含图像,则它只会删除第一页上的页眉。
我正在使用以下代码片段来实现我的功能。
val headerPrimary = document.firstSection.headersFooters[HEADER_PRIMARY]
if (!document.firstSection.pageSetup.differentFirstPageHeaderFooter && headerPrimary != null) {
// If so create first page header and copy content of the primary header into it.
val headerFirst = HeaderFooter(document, HEADER_FIRST);
headerPrimary.childNodes.forEach {
headerFirst.appendChild(it.deepClone(true));
}
// Put the first page header into the document.
document.firstSection.headersFooters.add(headerFirst);
}
val builder = DocumentBuilder(document)
document.firstSection.pageSetup.differentFirstPageHeaderFooter = true
builder.moveToHeaderFooter(HEADER_FIRST)
setImageInBackground(builder, firstImageDataString)
builder.moveToHeaderFooter(HEADER_PRIMARY)
setImageInBackground(builder, SecondImageDataString)
private fun setImageInBackground(builder: DocumentBuilder, imageString: String) {
val background = builder.insertImage(imageString)
background.wrapType = NONE
background.behindText = true
background.relativeHorizontalPosition = RelativeHorizontalPosition.PAGE
background.relativeVerticalPosition = RelativeVerticalPosition.PAGE
background.left = (builder.pageSetup.pageWidth - background.width) / 2
background.top = (builder.pageSetup.pageHeight - background.height) / 2
}
对于input-document/expected-result和图片,我已经在回复论坛上传了一个附件Aspose forum link
对于代码的输入输出:Files.zip
出现此问题是因为您的输入文档仅包含主要 header。当您将 DocumentBuilder 的光标移动到第一页 header 时,Aspose.Words 创建新的空第一页 header。要将主要 header 的内容保留在第一页上,您只需将主要 header 的内容复制到新创建的第一页 header 中。这是执行此操作的简单代码。
// Check whether there is only primary header.
HeaderFooter headerPrimary = (HeaderFooter)document.FirstSection.HeadersFooters[HeaderFooterType.HeaderPrimary];
if (!document.FirstSection.PageSetup.DifferentFirstPageHeaderFooter
&& headerPrimary != null)
{
// If so create first page header and copy content of the primary header into it.
HeaderFooter headerFirst = new HeaderFooter(document, HeaderFooterType.HeaderFirst);
foreach (Node primaryHeaderChild in headerPrimary.ChildNodes)
headerFirst.AppendChild(primaryHeaderChild.Clone(true));
// Put the first page header into the document.
document.FirstSection.HeadersFooters.Add(headerFirst);
}
// Your original code goes after.
DocumentBuilder builder = new DocumentBuilder(document);
document.FirstSection.PageSetup.DifferentFirstPageHeaderFooter = true;
builder.MoveToHeaderFooter(HeaderFooterType.HeaderFirst);
SetImageInBackground(builder, firstImageDataString);
builder.MoveToHeaderFooter(HeaderFooterType.HeaderPrimary);
SetImageInBackground(builder, secondImageDataString);
我想根据以下条件在我的文档中设置不同的背景
- 文档的第一页应包含 first.png 作为背景。
- 文档的其余页面应包含 second.png 作为背景。
如果输入文档的第一页页眉中不包含图像,我可以按照我的期望设置背景。 如果文档的第一页在页眉中包含图像,则它只会删除第一页上的页眉。
我正在使用以下代码片段来实现我的功能。
val headerPrimary = document.firstSection.headersFooters[HEADER_PRIMARY]
if (!document.firstSection.pageSetup.differentFirstPageHeaderFooter && headerPrimary != null) {
// If so create first page header and copy content of the primary header into it.
val headerFirst = HeaderFooter(document, HEADER_FIRST);
headerPrimary.childNodes.forEach {
headerFirst.appendChild(it.deepClone(true));
}
// Put the first page header into the document.
document.firstSection.headersFooters.add(headerFirst);
}
val builder = DocumentBuilder(document)
document.firstSection.pageSetup.differentFirstPageHeaderFooter = true
builder.moveToHeaderFooter(HEADER_FIRST)
setImageInBackground(builder, firstImageDataString)
builder.moveToHeaderFooter(HEADER_PRIMARY)
setImageInBackground(builder, SecondImageDataString)
private fun setImageInBackground(builder: DocumentBuilder, imageString: String) {
val background = builder.insertImage(imageString)
background.wrapType = NONE
background.behindText = true
background.relativeHorizontalPosition = RelativeHorizontalPosition.PAGE
background.relativeVerticalPosition = RelativeVerticalPosition.PAGE
background.left = (builder.pageSetup.pageWidth - background.width) / 2
background.top = (builder.pageSetup.pageHeight - background.height) / 2
}
对于input-document/expected-result和图片,我已经在回复论坛上传了一个附件Aspose forum link
对于代码的输入输出:Files.zip
出现此问题是因为您的输入文档仅包含主要 header。当您将 DocumentBuilder 的光标移动到第一页 header 时,Aspose.Words 创建新的空第一页 header。要将主要 header 的内容保留在第一页上,您只需将主要 header 的内容复制到新创建的第一页 header 中。这是执行此操作的简单代码。
// Check whether there is only primary header.
HeaderFooter headerPrimary = (HeaderFooter)document.FirstSection.HeadersFooters[HeaderFooterType.HeaderPrimary];
if (!document.FirstSection.PageSetup.DifferentFirstPageHeaderFooter
&& headerPrimary != null)
{
// If so create first page header and copy content of the primary header into it.
HeaderFooter headerFirst = new HeaderFooter(document, HeaderFooterType.HeaderFirst);
foreach (Node primaryHeaderChild in headerPrimary.ChildNodes)
headerFirst.AppendChild(primaryHeaderChild.Clone(true));
// Put the first page header into the document.
document.FirstSection.HeadersFooters.Add(headerFirst);
}
// Your original code goes after.
DocumentBuilder builder = new DocumentBuilder(document);
document.FirstSection.PageSetup.DifferentFirstPageHeaderFooter = true;
builder.MoveToHeaderFooter(HeaderFooterType.HeaderFirst);
SetImageInBackground(builder, firstImageDataString);
builder.MoveToHeaderFooter(HeaderFooterType.HeaderPrimary);
SetImageInBackground(builder, secondImageDataString);