段落の操作

段落は、論理ブロックに結合された一連の文字であり、特殊文字 (段落区切り) で終わります。 Aspose.Words では、段落は Paragraph クラスによって表されます。

段落を挿入する

実際、文書に新しい段落を挿入するには、段落区切り文字を挿入する必要があります。 DocumentBuilder.Writeln は、文書にテキスト文字列を挿入するだけでなく、段落区切りも追加します。

現在のフォントの書式設定は Font プロパティによっても指定され、現在の段落の書式設定は ParagraphFormat プロパティによって決定されます。次のセクションでは、段落の書式設定について詳しく説明します。

次のコード例は、ドキュメントに段落を挿入する方法を示しています。

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
// The path to the documents directory.
string dataDir = RunExamples.GetDataDir_WorkingWithDocument();
// Initialize document.
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
// Specify font formatting
Font font = builder.Font;
font.Size = 16;
font.Bold = true;
font.Color = System.Drawing.Color.Blue;
font.Name = "Arial";
font.Underline = Underline.Dash;
// Specify paragraph formatting
ParagraphFormat paragraphFormat = builder.ParagraphFormat;
paragraphFormat.FirstLineIndent = 8;
paragraphFormat.Alignment = ParagraphAlignment.Justify;
paragraphFormat.KeepTogether = true;
builder.Writeln("A whole paragraph.");
dataDir = dataDir + "DocumentBuilderInsertParagraph_out.doc";
doc.Save(dataDir);

段落の書式設定

現在の段落書式設定は、ParagraphFormat プロパティによって返される ParagraphFormat オブジェクトによって表されます。このオブジェクトは、Microsoft Word で使用できるさまざまな段落書式設定プロパティをカプセル化します。 ClearFormatting を呼び出すことで、段落の書式設定をデフォルト (通常のスタイル、左揃え、インデントなし、間隔なし、境界線なし、網かけなし) に簡単にリセットできます。

次のコード例は、段落の書式設定を設定する方法を示しています。

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
// Set paragraph formatting properties
ParagraphFormat paragraphFormat = builder.ParagraphFormat;
paragraphFormat.Alignment = ParagraphAlignment.Center;
paragraphFormat.LeftIndent = 50;
paragraphFormat.RightIndent = 50;
paragraphFormat.SpaceAfter = 25;
// Output text
builder.Writeln("I'm a very nice formatted paragraph. I'm intended to demonstrate how the left and right indents affect word wrapping.");
builder.Writeln("I'm another nice formatted paragraph. I'm intended to demonstrate how the space after paragraph looks like.");
dataDir = dataDir + "DocumentBuilderSetParagraphFormatting_out.doc";
doc.Save(dataDir);

段落スタイルを適用する

FontParagraphFormat などの一部の書式設定オブジェクトはスタイルをサポートしています。 1 つの組み込みスタイルまたはユーザー定義スタイルは、名前、基本スタイル、フォント、スタイル段落書式設定などの適切なスタイル プロパティを含む Style オブジェクトによって表されます。

さらに、Style オブジェクトは、StyleIdentifier 列挙値で表されるロケールに依存しないスタイル識別子を返す StyleIdentifier プロパティを公開します。実際、Microsoft Word の組み込みスタイルの名前はさまざまな言語にローカライズされています。スタイル識別子を使用すると、ドキュメントの言語に関係なく正しいスタイルを見つけることができます。列挙値は、NormalHeading 1Heading 2 などの組み込み Microsoft Word スタイルに対応します。すべてのユーザー定義スタイルは、StyleIdentifier.User 列挙値に設定されます。

次のコード例は、段落スタイルを適用する方法を示しています。

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
// Set paragraph style
builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Title;
builder.Write("Hello");
dataDir = dataDir + "DocumentBuilderApplyParagraphStyle_out.doc";
doc.Save(dataDir);

スタイル区切り文字を挿入して異なる段落スタイルを配置する

Microsoft Word のキーボード ショートカット Ctrl+Alt+Enter を使用して、スタイル区切り文字を段落の末尾に追加できます。この機能を使用すると、同じ論理印刷段落内で 2 つの異なる段落スタイルを使用できます。特定の見出しの先頭の一部のテキストを目次に表示したいが、見出し全体を目次に表示したくない場合は、この機能を使用できます。

次のコード例は、さまざまな段落スタイルに対応するためにスタイル区切り文字を挿入する方法を示しています。

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
Style paraStyle = builder.Document.Styles.Add(StyleType.Paragraph, "MyParaStyle");
paraStyle.Font.Bold = false;
paraStyle.Font.Size = 8;
paraStyle.Font.Name = "Arial";
// Append text with "Heading 1" style.
builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Heading1;
builder.Write("Heading 1");
builder.InsertStyleSeparator();
// Append text with another style.
builder.ParagraphFormat.StyleName = paraStyle.Name;
builder.Write("This is text with some other formatting ");
dataDir = dataDir + "InsertStyleSeparator_out.doc";
// Save the document to disk.
doc.Save(dataDir);

段落スタイル区切り文字の識別

Aspose.Words は、次の例に示すように、Paragraph クラスの BreakIsStyleSeparator パブリック プロパティを公開して、スタイル区切り記号を使用して段落を識別します。

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
// The path to the documents directory.
string dataDir = RunExamples.GetDataDir_RenderingAndPrinting();
// Initialize document.
string fileName = "TestFile.doc";
Document doc = new Document(dataDir + fileName);
foreach (Paragraph paragraph in doc.GetChildNodes(NodeType.Paragraph, true))
{
if (paragraph.BreakIsStyleSeparator)
{
Console.WriteLine("Separator Found!");
}
}

段落に枠線と網掛けを適用する

Aspose.Words のボーダーは BorderCollection クラスによって表されます。これは、インデックスまたはボーダー タイプによってアクセスされる Border オブジェクトのコレクションです。境界線の種類は、BorderType 列挙によって表されます。一部の列挙値は、複数または 1 つの文書要素にのみ適用されます。たとえば、BorderType.Bottom は段落または表のセルに適用されますが、BorderType.DiagonalDown は表のセルにのみ対角線の境界線を指定します。

境界線コレクションと個別の境界線はどちらも、色、線のスタイル、線の幅、テキストからの距離、オプションの影などの同様の属性を持っています。それらは同じ名前のプロパティによって表されます。プロパティ値を組み合わせることで、さまざまな境界線のタイプを取得できます。さらに、BorderCollection オブジェクトと Border オブジェクトを使用すると、ClearFormatting メソッドを呼び出してこれらの値をデフォルト値にリセットできます。

Aspose.Words には、ドキュメント要素のシェーディング属性を含む Shading クラスもあります。 TextureIndex 列挙値を使用して、要素の背景と前景に適用される希望のシェーディング テクスチャと色を設定できます。 TextureIndex では、Shading オブジェクトにさまざまなパターンを適用することもできます。たとえば、ドキュメント要素の背景色を設定するには、TextureIndex.TextureSolid 値を使用し、前景色のシェーディング色を適切に設定します。

次のコード例は、段落に境界線と網掛けを適用する方法を示しています。

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
// Set paragraph borders
BorderCollection borders = builder.ParagraphFormat.Borders;
borders.DistanceFromText = 20;
borders[BorderType.Left].LineStyle = LineStyle.Double;
borders[BorderType.Right].LineStyle = LineStyle.Double;
borders[BorderType.Top].LineStyle = LineStyle.Double;
borders[BorderType.Bottom].LineStyle = LineStyle.Double;
// Set paragraph shading
Shading shading = builder.ParagraphFormat.Shading;
shading.Texture = TextureIndex.TextureDiagonalCross;
shading.BackgroundPatternColor = System.Drawing.Color.LightCoral;
shading.ForegroundPatternColor = System.Drawing.Color.LightSalmon;
builder.Write("I'm a formatted paragraph with double border and nice shading.");
dataDir = dataDir + "DocumentBuilderApplyBordersAndShadingToParagraph_out.doc";
doc.Save(dataDir);

段落の行数を数える

Word 文書の段落内の行数をカウントする場合は、次のコード サンプルを使用できます。

// The path to the documents directory.
string dataDir = RunExamples.GetDataDir_WorkingWithDocument();
string fileName = "Properties.doc";
Document document = new Document(dataDir + fileName);
var collector = new LayoutCollector(document);
var it = new LayoutEnumerator(document);
foreach (Paragraph paragraph in document.GetChildNodes(NodeType.Paragraph, true))
{
var paraBreak = collector.GetEntity(paragraph);
object stop = null;
var prevItem = paragraph.PreviousSibling;
if (prevItem != null)
{
var prevBreak = collector.GetEntity(prevItem);
if (prevItem is Paragraph)
{
it.Current = collector.GetEntity(prevItem); // para break
it.MoveParent(); // last line
stop = it.Current;
}
else if (prevItem is Table)
{
var table = (Table)prevItem;
it.Current = collector.GetEntity(table.LastRow.LastCell.LastParagraph); // cell break
it.MoveParent(); // cell
it.MoveParent(); // row
stop = it.Current;
}
else
{
throw new Exception();
}
}
it.Current = paraBreak;
it.MoveParent();
// We move from line to line in a paragraph.
// When paragraph spans multiple pages the we will follow across them.
var count = 1;
while (it.Current != stop)
{
if (!it.MovePreviousLogical())
break;
count++;
}
const int MAX_CHARS = 16;
var paraText = paragraph.GetText();
if (paraText.Length > MAX_CHARS)
paraText = $"{paraText.Substring(0, MAX_CHARS)}...";
Console.WriteLine($"Paragraph '{paraText}' has {count} line(-s).");
}