Bekerja dengan Paragraf
Paragraf adalah sekumpulan karakter yang digabungkan menjadi blok logis dan diakhiri dengan karakter khusus – pemutusan paragraf. Di Aspose.Words, sebuah paragraf diwakili oleh kelas Paragraph.
Sisipkan Paragraf
Untuk menyisipkan paragraf baru ke dalam dokumen, sebenarnya Anda perlu memasukkan karakter pemisah paragraf ke dalamnya. DocumentBuilder.Writeln tidak hanya menyisipkan serangkaian teks ke dalam dokumen, tetapi juga menambahkan jeda paragraf.
Pemformatan font saat ini juga ditentukan oleh properti Font, dan pemformatan paragraf saat ini ditentukan oleh properti ParagraphFormat. Di bagian selanjutnya, kita akan membahas lebih detail tentang pemformatan paragraf.
Contoh kode berikut menunjukkan cara menyisipkan paragraf ke dalam dokumen:
// 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); |
Format Paragraf
Pemformatan paragraf saat ini diwakili oleh objek ParagraphFormat yang dikembalikan oleh properti ParagraphFormat. Objek ini merangkum berbagai properti pemformatan paragraf yang tersedia dalam Microsoft Word. Anda dapat dengan mudah mengatur ulang pemformatan paragraf ke default – Gaya normal, rata kiri, tanpa lekukan, tanpa spasi, tanpa batas, tanpa bayangan – dengan memanggil ClearFormatting.
Contoh kode berikut menunjukkan cara mengatur pemformatan paragraf:
// 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); |
Terapkan Gaya Paragraf
Beberapa objek pemformatan, seperti Font atau ParagraphFormat, mendukung gaya. Satu gaya bawaan atau yang ditentukan pengguna diwakili oleh objek Style, yang berisi properti gaya yang sesuai seperti nama, gaya dasar, font, format paragraf gaya, dan sebagainya.
Selain itu, objek Style memperlihatkan properti StyleIdentifier, yang mengembalikan pengidentifikasi gaya lokal-independen yang diwakili oleh nilai enumerasi StyleIdentifier. Faktanya adalah nama gaya bawaan di Microsoft Word dilokalkan untuk bahasa berbeda. Dengan menggunakan pengidentifikasi gaya, Anda dapat menemukan gaya yang benar apa pun bahasa dokumennya. Nilai enumerasi sesuai dengan gaya Microsoft Word bawaan seperti Normal, Heading 1, Heading 2 dan seterusnya. Semua gaya yang ditentukan pengguna diatur ke nilai enumerasi StyleIdentifier.User.
Contoh kode berikut menunjukkan cara menerapkan gaya paragraf:
// 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); |
Sisipkan Pemisah Gaya untuk Menempatkan Gaya Paragraf Berbeda
Pemisah gaya dapat ditambahkan ke akhir paragraf menggunakan pintasan keyboard Ctrl+Alt+Enter di Microsoft Word. Fitur ini memungkinkan Anda menggunakan dua gaya paragraf berbeda dalam paragraf cetak logis yang sama. Jika Anda ingin beberapa teks dari awal judul tertentu muncul di daftar isi, namun tidak ingin keseluruhan judul ditampilkan di daftar isi, Anda dapat menggunakan fungsi ini.
Contoh kode berikut menunjukkan cara menyisipkan pemisah gaya untuk mengakomodasi gaya paragraf yang berbeda:
// 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); |
Identifikasi Pemisah Gaya Paragraf
Aspose.Words mengekspos properti publik BreakIsStyleSeparator pada kelas Paragraph
untuk mengidentifikasi paragraf dengan pemisah gaya, seperti yang ditunjukkan pada contoh di bawah ini:
// 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!"); | |
} | |
} |
Menerapkan Batas dan Bayangan pada Paragraf
Perbatasan di Aspose.Words diwakili oleh kelas BorderCollection – ini adalah kumpulan objek Border yang diakses berdasarkan indeks atau tipe perbatasan. Tipe perbatasan pada gilirannya diwakili oleh enumerasi BorderType. Beberapa nilai enumerasi berlaku untuk beberapa atau hanya satu elemen dokumen. Misalnya, BorderType.Bottom berlaku untuk sel paragraf atau tabel, sedangkan BorderType.DiagonalDown menentukan batas diagonal di sel tabel saja.
Koleksi perbatasan dan masing-masing perbatasan terpisah memiliki atribut serupa seperti warna, gaya garis, lebar garis, jarak dari teks, dan bayangan opsional. Mereka diwakili oleh properti dengan nama yang sama. Anda bisa mendapatkan tipe perbatasan yang berbeda dengan menggabungkan nilai properti. Selain itu, objek BorderCollection dan Border memungkinkan Anda menyetel ulang nilai ini ke nilai defaultnya dengan memanggil metode ClearFormatting.
Aspose.Words juga memiliki kelas Shading yang berisi atribut shading untuk elemen dokumen. Anda dapat mengatur tekstur dan warna bayangan yang diinginkan yang diterapkan pada latar belakang dan latar depan suatu elemen menggunakan nilai enumerasi TextureIndex. TextureIndex juga memungkinkan Anda menerapkan pola berbeda pada objek Shading. Misalnya, untuk mengatur warna latar belakang elemen dokumen, gunakan nilai TextureIndex.TextureSolid dan atur warna bayangan latar depan sesuai kebutuhan.
Contoh kode berikut menunjukkan cara menerapkan batas dan bayangan pada paragraf:
// 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); |
Hitung Baris Paragraf
Jika Anda ingin menghitung jumlah baris dalam paragraf untuk dokumen Word apa pun, contoh kode berikut dapat digunakan:
// 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)."); | |
} |