在对 Word 文档进行格式化时,设置段落的段前间距、段后间距是我们经常碰到的场景,设置段前、段后间距可以改善文档的可读性、美观性以及排版效果;同时适当的段落间距可以使不同段落之间更加明确地区分开来,让读者更容易理解文本的逻辑结构和段落之间的关系。在本文中,您将学习如何使用 Spire.Doc for C++ 给新增的段落设置段前、段后间距以及如何批量给同类型的段落设置段前、段后间距。
安装 Spire.Doc for C++
有两种方法可以将 Spire.Doc for C++ 集成到您的应用程序中。一种方法是通过 NuGet 安装它,另一种方法是从我们的网站下载包并将库复制到您的程序中。通过 NuGet 安装更简单,更推荐使用。您可以通过访问以下链接找到更多详细信息。
如何将 Spire.Doc for C++ 集成到 C++ 程序中
关键方法
Spire.Doc for C++ 提供了 ParagraphFormat 类用于处理段落格式。您可以使用 Paragraph->GetFormat() 方法获取 ParagraphFormat 类的对象,然后使用下面的方法设置对应的段落段前、段后值:
方法 | 方法解释 |
para->GetFormat()->SetBeforeAutoSpacing(bool value); | 设置段前间距是否自动变化 |
para->GetFormat()->SetBeforeSpacing(float value); | 设置固定的段前间距值 |
para->GetFormat()->SetAfterAutoSpacing(bool value); | 设置段后间距是否自动变化 |
para->GetFormat()->SetAfterSpacing(float value); | 设置固定的段后间距值 |
给新增的段落设置段前、段后间距
下面介绍如何对给新增的段落设置段前、段后间距,下面步骤的主要逻辑就是给加载的 Word 文档新增一个文本内容的段落,并为其设置字体颜色、字体大小;然后设置该段落的段前、段后间距,最后保存结果文档到指定目录。
- 创建 Document 类的实例。
- 使用 Document->loadFromFile() 方法加载 Word 文档。
- 创建 Paragraph 类的实例。
- 使用 Paragraph->AppendText() 方法为段落添加文本内容,并将该方法返回值放在 TextRange 类的实例中。
- 使用 TextRange->GetCharacterFormat()->SetTextColor() 方法设置字体颜色。
- 使用 TextRange->GetCharacterFormat()->SetFontSize() 方法设置字体大小。
- 使用 Paragraph->GetFormat() 方法获取 ParagraphFormat 对象。
- 使用 ParagraphFormat->SetBeforeAutoSpacing() 方法设置段前间距为非自动变化。
- 使用 ParagraphFormat->SetBeforeSpacing() 方法设置段前间距为某一固定值。
- 使用 ParagraphFormat->SetAfterAutoSpacing() 方法设置段后间距为非自动变化。
- 使用 ParagraphFormat->SetAfterSpacing() 方法设置段后间距为某一固定值。
- 使用 Document->GetSections()->GetItemInSectionCollection(0)->GetParagraphs()->Insert() 将段落插入到文档指定位置。
- 使用 Document->SaveToFile 方法保存结果文档。
- C++
#include "../include/Spire.Doc.o.h"
using namespace Spire::Doc;
using namespace std;
int main()
{
// 输入文件路径
wstring inputFile = L"sample.docx";
// 输出文件路径
wstring outputFile = L"result.docx";
// 创建Word文档对象
intrusive_ptr<Document> document = new Document();
// 从磁盘加载文件
document->LoadFromFile(inputFile.c_str());
// 向文档中新增一个段落
intrusive_ptr<Paragraph> para = new Paragraph(document);
// 向段落中添加文本字符串并设置样式
intrusive_ptr<TextRange> textRange1 = para->AppendText(L"这是插入的段落。");
textRange1->GetCharacterFormat()->SetTextColor(Color::GetBlue());
textRange1->GetCharacterFormat()->SetFontSize(15);
// 获取ParagraphFormat对象
intrusive_ptr<ParagraphFormat> format = para->GetFormat();
// 设置段前间距为固定值:10(磅)pt
format->SetBeforeAutoSpacing(false);
format->SetBeforeSpacing(10);
// 设置段后间距为固定值:10(磅)pt
format->SetAfterAutoSpacing(false);
format->SetAfterSpacing(10);
// 将添加的段落插入到Word文档中
document->GetSections()->GetItemInSectionCollection(0)->GetParagraphs()->Insert(1, para);
// 保存到文件
document->SaveToFile(outputFile.c_str(), FileFormat::Docx2013);
// 关闭文档
document->Close();
}
批量给同类型的段落设置段前、段后间距
我们用 Spire.Doc for C++ 格式化文档段落时,更多的场景是需要批量对某些段落进行段前、段后间距的设置以此来提高效率。下面就介绍如何批量对拥有相同样式的段落设置段前、段后间距。下面看看具体实现步骤:
- 创建 Document 类的实例。
- 使用 Document->loadFromFile() 方法加载 Word 文档。
- 遍历 Document 所有节(Section)。
- 遍历当前节(Section)中所有段落(Paragraph)。
- 获取 Paragraph 类的实例。
- 使用 Paragraph->GetStyleName() 获取段落样式名称。
- 判断获取到的样式名称是否符合我们需求。
对于符合需求的段落设置段前、段后间距,就和给新增段落设置段前、段后间距一样,如下步骤:
- 使用 Paragraph->GetFormat() 方法获取 ParagraphFormat 对象。
- 使用 ParagraphFormat->SetBeforeAutoSpacing() 方法设置段前间距为非自动变化。
- 使用 ParagraphFormat->SetBeforeSpacing() 方法设置段前间距为某一固定值。
- 使用 ParagraphFormat->SetAfterAutoSpacing() 方法设置段后间距为非自动变化。
- 使用 ParagraphFormat->SetAfterSpacing() 方法设置段后间距为某一固定值。
- 批量处理完段落后,使用 Document->SaveToFile 方法保存结果文档。
- C++
#include "../include/Spire.Doc.o.h"
using namespace Spire::Doc;
using namespace std;
int main()
{
// 输入文件路径
wstring inputFile = L"sample.docx";
// 输出文件路径
wstring outputFile = L"result.docx";
// 创建Word文档对象
intrusive_ptr<Document> document = new Document();
// 从磁盘加载文件
document->LoadFromFile(inputFile.c_str());
// 遍历文档中的所有setion
for (int i = 0; i < document->GetSections()->GetCount(); i++)
{
// 获取当前section
intrusive_ptr<Section> section = document->GetSections()->GetItemInSectionCollection(i);
// 遍历当前section的所有段落
for (int j = 0; j < section->GetParagraphs()->GetCount(); j++)
{
// 获取当前段落
intrusive_ptr<Paragraph> paragraph = section->GetParagraphs()->GetItemInParagraphCollection(j);
// 获取当前段落的样式名称
wstring style_name = paragraph->GetStyleName();
// 判断样式名称是否为“Heading1”
if (style_name.compare(L"Heading1") == 0)
{
// 获取ParagraphFormat对象
intrusive_ptr<ParagraphFormat> format = paragraph->GetFormat();
// 设置段前间距为固定值:20(磅)pt
format->SetBeforeAutoSpacing(false);
format->SetBeforeSpacing(20);
// 设置段后间距为固定值:20(磅)pt
format->SetAfterAutoSpacing(false);
format->SetAfterSpacing(20);
}
}
}
// 保存到文件
document->SaveToFile(outputFile.c_str(), FileFormat::Docx2013);
// 关闭文档
document->Close();
}
申请临时 License
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。