Робота з абзацами
Абзац - це набір символів, об’єднаних в логічний блок і закінчуються спеціальним символом paragraph break. В Aspose.Words абзац представлений класом Paragraph.
Вставити абзац
Щоб вставити в документ новий абзац, насправді, вам потрібно вставити в нього символ розриву абзацу. DocumentBuilder.Writeln вставляє в документ не тільки рядок тексту, але і додає розрив абзацу.
Поточне форматування шрифту також визначається властивістю Font, а поточне форматування абзацу визначається властивістю ParagraphFormat. У наступному розділі ми детальніше розглянемо форматування абзацу.
Наступний приклад коду показує, як вставити абзац у документ:
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
// The path to the documents directory. | |
System::String outputDataDir = GetOutputDataDir_WorkingWithDocument(); | |
// Initialize document. | |
System::SharedPtr<Document> doc = System::MakeObject<Document>(); | |
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc); | |
// Specify font formatting | |
System::SharedPtr<Font> font = builder->get_Font(); | |
font->set_Size(16); | |
font->set_Bold(true); | |
font->set_Color(System::Drawing::Color::get_Blue()); | |
font->set_Name(u"Arial"); | |
font->set_Underline(Underline::Dash); | |
// Specify paragraph formatting | |
System::SharedPtr<ParagraphFormat> paragraphFormat = builder->get_ParagraphFormat(); | |
paragraphFormat->set_FirstLineIndent(8); | |
paragraphFormat->set_Alignment(ParagraphAlignment::Justify); | |
paragraphFormat->set_KeepTogether(true); | |
builder->Writeln(u"A whole paragraph."); | |
System::String outputPath = outputDataDir + u"DocumentBuilderInsertParagraph.doc"; | |
doc->Save(outputPath); |
Форматувати абзац
Поточне форматування абзацу представлено об’єктом ParagraphFormat, який повертається властивістю ParagraphFormat. Цей об’єкт інкапсулює різні властивості форматування абзацу, доступні в Microsoft Word. Ви можете легко змінити форматування абзацу за замовчуванням на звичайний стиль, вирівняний за лівим краєм, без відступів, без інтервалів, без меж і без затінення, викликавши команду ClearFormatting.
У наступному прикладі коду показано, як задати форматування абзацу:
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
System::SharedPtr<Document> doc = System::MakeObject<Document>(); | |
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc); | |
// Set paragraph formatting properties | |
System::SharedPtr<ParagraphFormat> paragraphFormat = builder->get_ParagraphFormat(); | |
paragraphFormat->set_Alignment(ParagraphAlignment::Center); | |
paragraphFormat->set_LeftIndent(50); | |
paragraphFormat->set_RightIndent(50); | |
paragraphFormat->set_SpaceAfter(25); | |
// Output text | |
builder->Writeln(u"I'm a very nice formatted paragraph. I'm intended to demonstrate how the left and right indents affect word wrapping."); | |
builder->Writeln(u"I'm another nice formatted paragraph. I'm intended to demonstrate how the space after paragraph looks like."); | |
System::String outputPath = outputDataDir + u"DocumentBuilderSetFormatting.SetParagraphFormatting.doc"; | |
doc->Save(outputPath); |
Застосувати стиль абзацу
Деякі об’єкти форматування, такі як шрифт або ParagraphFormat, підтримують стилі. Окремий вбудований або визначений користувачем стиль представлений об’єктом Style
, який містить відповідні властивості стилю, такі як назва, базовий стиль, форматування шрифту та абзацу стилю тощо.
Крім того, об’єкт Style надає властивість StyleIdentifier, яка повертає незалежний від мови ідентифікатор стилю, представлений значенням перерахування StyleIdentifier. Справа в тому, що назви вбудованих стилів в Microsoft Word локалізовані для різних мов. Використовуючи ідентифікатор стилю, ви можете знайти правильний стиль незалежно від мови документа. Значення перерахування відповідають вбудованим стилям Microsoft Word, таким як Normal, Heading 1, Heading 2 і т.д. всім призначеним для користувача стилям присвоюється значення StyleIdentifier.User.
Наступний приклад коду показує, як застосувати стиль абзацу:
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
System::SharedPtr<Document> doc = System::MakeObject<Document>(); | |
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc); | |
// Set paragraph style | |
builder->get_ParagraphFormat()->set_StyleIdentifier(StyleIdentifier::Title); | |
builder->Write(u"Hello"); | |
System::String outputPath = outputDataDir + u"DocumentBuilderSetFormatting.ApplyParagraphStyle.doc"; | |
doc->Save(outputPath); |
Вставте роздільник стилів для розміщення різних стилів абзаців
Роздільник стилів можна додати до кінця абзацу за допомогою комбінації клавіш Ctrl + Alt + Enter у MS Word. Ця функція дозволяє використовувати два різні стилі абзацу в одному логічному друкованому абзаці. Якщо ви хочете, щоб якийсь текст із початку певного заголовка відображався у змісті, але не весь заголовок, ви можете скористатися цією функцією.
Наступний приклад коду показує, як вставити роздільник стилів, щоб відповідати різним стилям абзаців:
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
System::SharedPtr<Document> doc = System::MakeObject<Document>(); | |
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc); | |
System::SharedPtr<Style> paraStyle = builder->get_Document()->get_Styles()->Add(StyleType::Paragraph, u"MyParaStyle"); | |
paraStyle->get_Font()->set_Bold(false); | |
paraStyle->get_Font()->set_Size(8); | |
paraStyle->get_Font()->set_Name(u"Arial"); | |
// Append text with "Heading 1" style. | |
builder->get_ParagraphFormat()->set_StyleIdentifier(StyleIdentifier::Heading1); | |
builder->Write(u"Heading 1"); | |
builder->InsertStyleSeparator(); | |
// Append text with another style. | |
builder->get_ParagraphFormat()->set_StyleName(paraStyle->get_Name()); | |
builder->Write(u"This is text with some other formatting "); | |
System::String outputPath = outputDataDir + u"InsertStyleSeparator.doc"; | |
// Save the document to disk. | |
doc->Save(outputPath); |
Визначте роздільник стилів абзаців
Aspose.Words надає загальнодоступну властивість BreakIsStyleSeparator для класу Paragraph
, що дозволяє ідентифікувати абзац-роздільник стилів, як показано в прикладі, наведеному нижче:
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
// The path to the documents directory. | |
System::String inputDataDir = GetInputDataDir_RenderingAndPrinting(); | |
// Initialize document. | |
System::String fileName = u"TestFile.doc"; | |
System::SharedPtr<Document> doc = System::MakeObject<Document>(inputDataDir + fileName); | |
for (System::SharedPtr<Paragraph> paragraph : System::IterateOver<Paragraph>(doc->GetChildNodes(NodeType::Paragraph, true))) | |
{ | |
if (paragraph->get_BreakIsStyleSeparator()) | |
{ | |
std::cout << "Separator Found!" << std::endl; | |
} | |
} |
Застосуйте межі та затінення до абзацу
Межі в Aspose.Words представлені класом BorderCollection – це колекція об’єктів Border, доступ до яких здійснюється за індексом або за типом кордону. Тип кордону представлений перерахуванням BorderType
. Деякі значення перерахування стосуються кількох або лише одного елемента документа. Наприклад, BorderType.Bottom застосовується до абзацу або комірки таблиці, тоді як BorderType.DiagonalDown визначає діагональну межу лише в комірці таблиці.
Як колекція кадрів, так і кожна окрема межа мають подібні атрибути, такі як колір, стиль лінії, ширина лінії, відстань від тексту та необов’язкова тінь. Вони представлені однойменними властивостями. Поєднуючи значення властивостей, ви можете створювати різні типи меж. Крім того, обидва об’єкти BorderCollection і Border дозволяють скинути ці значення до значень за замовчуванням, викликавши метод ClearFormatting.
Aspose.Words також містить клас Shading, що містить атрибути затінення для елементів документа. Ви можете задати бажану текстуру затінення і кольору, які будуть застосовуватися до фону і переднього плану елемента.
Текстура затінення задається значенням перерахування TextureIndex, яке дозволяє застосовувати різні шаблони до об’єкта Shading. Наприклад, щоб встановити колір фону для елемента документа, використовуйте значення TextureIndex.TextureSolid і відповідно встановіть колір затінення переднього плану.
Наступний приклад коду показує, як застосувати межі та затінення до абзацу:
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
System::SharedPtr<Document> doc = System::MakeObject<Document>(); | |
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc); | |
// Set paragraph borders | |
System::SharedPtr<BorderCollection> borders = builder->get_ParagraphFormat()->get_Borders(); | |
borders->set_DistanceFromText(20); | |
borders->idx_get(BorderType::Left)->set_LineStyle(LineStyle::Double); | |
borders->idx_get(BorderType::Right)->set_LineStyle(LineStyle::Double); | |
borders->idx_get(BorderType::Top)->set_LineStyle(LineStyle::Double); | |
borders->idx_get(BorderType::Bottom)->set_LineStyle(LineStyle::Double); | |
// Set paragraph shading | |
System::SharedPtr<Shading> shading = builder->get_ParagraphFormat()->get_Shading(); | |
shading->set_Texture(TextureIndex::TextureDiagonalCross); | |
shading->set_BackgroundPatternColor(System::Drawing::Color::get_LightCoral()); | |
shading->set_ForegroundPatternColor(System::Drawing::Color::get_LightSalmon()); | |
builder->Write(u"I'm a formatted paragraph with double border and nice shading."); | |
System::String outputPath = outputDataDir + u"DocumentBuilderSetFormatting.ApplyBordersAndShadingToParagraph.doc"; | |
doc->Save(outputPath); |