Định dạng văn bản trình chiếu trong .NET
Tổng quan
Bài viết này trình bày cách định dạng văn bản trong các bản trình chiếu PowerPoint và OpenDocument bằng Aspose.Slides cho .NET. Nó bao gồm màu nền, độ trong suốt, khoảng cách ký tự, thuộc tính phông chữ, xoay, khoảng cách đoạn, hành vi tự động vừa, neo văn bản, dấu tab và cài đặt ngôn ngữ.
Trừ khi có ghi chú khác, các ví dụ sử dụng sample.pptx. Hình dạng đầu tiên trên slide đầu tiên là một hộp văn bản, và đoạn văn đầu tiên của nó chứa văn bản được hiển thị dưới đây. Cả chỉ số slide và hình dạng đều bắt đầu từ 0. Các ví dụ chọn các phần in đậm sử dụng định dạng có hiệu lực, bao gồm cả định dạng in đậm được kế thừa:

Để tìm và tô sáng văn bản nguyên mẫu hoặc các kết quả khớp biểu thức chính quy, xem Tìm và Thay Thế Văn Bản.
Đặt Màu Nền Văn Bản
Sử dụng IParagraphFormat.DefaultPortionFormat để đặt màu tô sáng mặc định cho một đoạn, hoặc sử dụng IBasePortionFormat.HighlightColor cho các phần văn bản riêng lẻ.
Ví dụ dưới đây đặt màu tô sáng xám nhạt làm mặc định cho đoạn đầu tiên. Màu tô sáng rõ ràng trên các phần riêng lẻ sẽ có ưu tiên cao hơn mặc định này:
using System.Drawing;
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation("sample.pptx");
var slide = presentation.Slides[0];
var autoShape = (IAutoShape)slide.Shapes[0];
var paragraph = autoShape.TextFrame.Paragraphs[0];
// Đặt màu tô sáng cho toàn bộ đoạn.
paragraph.ParagraphFormat.DefaultPortionFormat.HighlightColor.Color = Color.LightGray;
presentation.Save("gray_paragraph.pptx", SaveFormat.Pptx);
Kết quả:

Ví dụ mã dưới đây cho thấy cách đặt màu nền cho các phần văn bản có phông chữ in đậm:
using System.Drawing;
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation("sample.pptx");
var slide = presentation.Slides[0];
var autoShape = (IAutoShape)slide.Shapes[0];
var paragraph = autoShape.TextFrame.Paragraphs[0];
foreach (var portion in paragraph.Portions)
{
if (portion.PortionFormat.GetEffective().FontBold)
{
// Đặt màu tô sáng cho phần văn bản.
portion.PortionFormat.HighlightColor.Color = Color.LightGray;
}
}
presentation.Save("gray_text_portions.pptx", SaveFormat.Pptx);
Kết quả:

Căn Đoạn Văn Bản
Sử dụng IParagraphFormat.Alignment để đặt căn đoạn trong một khung văn bản. Giá trị có thể là căn giữa, căn trái, căn phải, căn đều, v.v.
Ví dụ mã dưới đây cho thấy cách căn đoạn về giữa:
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation("sample.pptx");
var slide = presentation.Slides[0];
var autoShape = (IAutoShape)slide.Shapes[0];
var paragraph = autoShape.TextFrame.Paragraphs[0];
// Đặt căn chỉnh của đoạn văn thành trung tâm.
paragraph.ParagraphFormat.Alignment = TextAlignment.Center;
presentation.Save("aligned_paragraph.pptx", SaveFormat.Pptx);
Kết quả:

Căn Phông Chữ Trong Một Dòng
Sử dụng IParagraphFormat.FontAlignment để căn dọc các phần văn bản có kích thước phông khác nhau trong một dòng. Cài đặt này áp dụng cho toàn bộ đoạn và kiểm soát căn trong mỗi dòng của nó.
Ví dụ tự chứa dưới đây tạo bốn hộp văn bản có nhãn trên một slide. Mỗi đoạn chứa cùng một văn bản ở kích thước 18, 36 và 54 điểm, với một kiểu căn phông chữ khác nhau. Nó sử dụng Arial, tắt tự động vừa và ngắt dòng, và giữ khung văn bản đủ lớn cho một dòng duy nhất.
using System.Drawing;
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation();
var slide = presentation.Slides[0];
var alignments = new[] { FontAlignment.Baseline, FontAlignment.Top, FontAlignment.Center, FontAlignment.Bottom };
var fontSizes = new[] { 18f, 36f, 54f };
for (var i = 0; i < alignments.Length; i++)
{
var shape = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 30, 20 + i * 130, 660, 120);
shape.FillFormat.FillType = FillType.NoFill;
shape.LineFormat.FillFormat.FillType = FillType.NoFill;
var textFrame = shape.TextFrame;
textFrame.TextFrameFormat.AnchoringType = TextAnchorType.Top;
textFrame.TextFrameFormat.AutofitType = TextAutofitType.None;
textFrame.TextFrameFormat.WrapText = NullableBool.False;
var label = textFrame.Paragraphs[0];
label.Text = alignments[i].ToString();
label.ParagraphFormat.Alignment = TextAlignment.Left;
label.ParagraphFormat.DefaultPortionFormat.FontHeight = 14;
label.ParagraphFormat.DefaultPortionFormat.LatinFont = new FontData("Arial");
label.ParagraphFormat.DefaultPortionFormat.FillFormat.FillType = FillType.Solid;
label.ParagraphFormat.DefaultPortionFormat.FillFormat.SolidFillColor.Color = Color.Gray;
var paragraph = new Paragraph();
paragraph.ParagraphFormat.FontAlignment = alignments[i];
paragraph.ParagraphFormat.Alignment = TextAlignment.Left;
paragraph.ParagraphFormat.DefaultPortionFormat.LatinFont = new FontData("Arial");
paragraph.ParagraphFormat.DefaultPortionFormat.FillFormat.FillType = FillType.Solid;
paragraph.ParagraphFormat.DefaultPortionFormat.FillFormat.SolidFillColor.Color = Color.Black;
foreach (var fontSize in fontSizes)
{
var portion = new Portion("Ag ");
portion.PortionFormat.FontHeight = fontSize;
paragraph.Portions.Add(portion);
}
textFrame.Paragraphs.Add(paragraph);
}
presentation.Save("font_alignment.pptx", SaveFormat.Pptx);
Kết quả:

Căn phông chữ sử dụng các chỉ số của phông, vì vậy các cạnh hiển thị của từng ký tự không nhất thiết phải thẳng hàng hoàn toàn. Ví dụ bao gồm cả một chữ hoa và một ký tự có phần xuống (descender) để giúp hiển thị sự khác biệt giữa căn cơ sở và căn dưới. Độ khả dụng và thay thế phông chữ, các ký tự được sử dụng, và sự khác nhau về kích thước phông đều ảnh hưởng tới kết quả. Kích thước khung, lề, khoảng cách dòng, ngắt dòng và tự động vừa cũng ảnh hưởng tới bố cục; hãy sử dụng cùng một phông và cài đặt bố cục khi so sánh các chế độ.
Thiết lập này khác với IParagraphFormat.Alignment, kiểm soát căn ngang của đoạn, và ITextFrameFormat.AnchoringType, định vị khối văn bản theo chiều dọc trong hình dạng. Định dạng chỉ số trên và chỉ số dưới thông qua IBasePortionFormat.Escapement dịch chuyển các phần riêng lẻ so với cơ sở thay vì đặt căn phông cho các dòng của đoạn.
Đặt Độ Trong Suốt cho Văn Bản
Độ trong suốt của văn bản được kiểm soát qua thành phần alpha của màu được gán cho IBasePortionFormat.FillFormat. Trong các ví dụ dưới đây, alpha = 50 là giá trị kênh alpha ARGB trên thang 0–255, không phải là phần trăm độ trong suốt.
Ví dụ mã dưới đây cho thấy cách áp dụng độ trong suốt cho toàn bộ đoạn:
using System.Drawing;
using Aspose.Slides;
using Aspose.Slides.Export;
var alpha = 50;
using var presentation = new Presentation("sample.pptx");
var slide = presentation.Slides[0];
var autoShape = (IAutoShape)slide.Shapes[0];
var paragraph = autoShape.TextFrame.Paragraphs[0];
// Đặt nền đen bán trong suốt cho văn bản.
paragraph.ParagraphFormat.DefaultPortionFormat.FillFormat.FillType = FillType.Solid;
paragraph.ParagraphFormat.DefaultPortionFormat.FillFormat.SolidFillColor.Color = Color.FromArgb(alpha, Color.Black);
presentation.Save("transparent_paragraph.pptx", SaveFormat.Pptx);
Kết quả:

Ví dụ sau đây cho thấy cách áp dụng độ trong suốt cho các phần văn bản có phông chữ in đậm:
using System.Drawing;
using Aspose.Slides;
using Aspose.Slides.Export;
var alpha = 50;
using var presentation = new Presentation("sample.pptx");
var slide = presentation.Slides[0];
var autoShape = (IAutoShape)slide.Shapes[0];
var paragraph = autoShape.TextFrame.Paragraphs[0];
foreach (var portion in paragraph.Portions)
{
if (portion.PortionFormat.GetEffective().FontBold)
{
// Đặt độ trong suốt cho phần văn bản.
portion.PortionFormat.FillFormat.FillType = FillType.Solid;
portion.PortionFormat.FillFormat.SolidFillColor.Color = Color.FromArgb(alpha, Color.Black);
}
}
presentation.Save("transparent_text_portions.pptx", SaveFormat.Pptx);
Kết quả:

Đặt Khoảng Cách Ký Tự cho Văn Bản
Sử dụng IBasePortionFormat.Spacing để mở rộng hoặc thu hẹp khoảng cách giữa các ký tự trong một hộp văn bản. Các ví dụ thêm 3 điểm khoảng cách; giá trị âm sẽ thu hẹp văn bản.
Ví dụ C# dưới đây cho thấy cách mở rộng khoảng cách ký tự trong toàn bộ đoạn:
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation("sample.pptx");
var slide = presentation.Slides[0];
var autoShape = (IAutoShape)slide.Shapes[0];
var paragraph = autoShape.TextFrame.Paragraphs[0];
// Lưu ý: Sử dụng giá trị âm để nén khoảng cách ký tự.
paragraph.ParagraphFormat.DefaultPortionFormat.Spacing = 3; // Mở rộng khoảng cách ký tự.
presentation.Save("character_spacing_in_paragraph.pptx", SaveFormat.Pptx);
Kết quả:

Ví dụ mã dưới đây cho thấy cách mở rộng khoảng cách ký tự trong các phần văn bản có phông chữ in đậm:
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation("sample.pptx");
var slide = presentation.Slides[0];
var autoShape = (IAutoShape)slide.Shapes[0];
var paragraph = autoShape.TextFrame.Paragraphs[0];
foreach (var portion in paragraph.Portions)
{
if (portion.PortionFormat.GetEffective().FontBold)
{
// Lưu ý: Sử dụng giá trị âm để nén khoảng cách ký tự.
portion.PortionFormat.Spacing = 3; // Mở rộng khoảng cách ký tự.
}
}
presentation.Save("character_spacing_in_text_portions.pptx", SaveFormat.Pptx);
Kết quả:

Vô Hiệu Hóa Kerning cho Các Phông Cụ Thể
Trong một số trường hợp, văn bản do Aspose.Slides tạo ra có thể trông hơi chặt hơn so với cùng một văn bản trong PowerPoint. Điều này có thể xảy ra vì PowerPoint có thể bỏ qua dữ liệu kerning cho một số phông, ngay cả khi phông chứa thông tin kerning hợp lệ và kerning được bật trong cài đặt PowerPoint.
Để làm cho đầu ra được render gần với PowerPoint hơn trong các trường hợp như vậy, bạn có thể vô hiệu hóa kerning cho các phần văn bản sử dụng phông bị ảnh hưởng. Đặt IBasePortionFormat.KerningMinimalSize thành một giá trị lớn hơn kích thước thực tế của phông. Ví dụ này yêu cầu “presentation.pptx” với một hộp văn bản là hình dạng đầu tiên trên slide đầu tiên. Nó kiểm tra tên phông hiệu lực, bao gồm cả các phông kế thừa, và đặt ngưỡng 100 điểm cho các phần sử dụng Roboto. Điều này vô hiệu hóa kerning cho các phần phù hợp có kích thước phông dưới 100 điểm:
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation("presentation.pptx");
var slide = presentation.Slides[0];
var autoShape = (IAutoShape)slide.Shapes[0];
var targetFont = "Roboto";
foreach (var paragraph in autoShape.TextFrame.Paragraphs)
{
foreach (var portion in paragraph.Portions)
{
var textFormat = portion.PortionFormat.GetEffective();
var usesTargetFont = textFormat.LatinFont?.FontName == targetFont ||
textFormat.EastAsianFont?.FontName == targetFont ||
textFormat.ComplexScriptFont?.FontName == targetFont;
if (usesTargetFont)
{
portion.PortionFormat.KerningMinimalSize = 100;
}
}
}
presentation.Save("output.pptx", SaveFormat.Pptx);
Đối với văn bản phù hợp dưới ngưỡng, cài đặt này ngăn kerning và có thể giúp đồng bộ hóa việc render của Aspose.Slides với kết quả hiển thị của PowerPoint cho các phông bị ảnh hưởng bởi hành vi riêng của PowerPoint này.
Quản Lý Thuộc Tính Phông Chữ Văn Bản
Thuộc tính phông chữ có thể được đặt ở mức đoạn thông qua IParagraphFormat.DefaultPortionFormat hoặc trên các phần riêng lẻ thông qua IPortionFormat.
Ví dụ dưới đây đặt phông mặc định cho đoạn đầu tiên là Times New Roman 12 điểm với in đậm, in nghiêng và gạch dưới dạng chấm. Định dạng rõ ràng trên các phần riêng lẻ sẽ có ưu tiên cao hơn các mặc định này:
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation("sample.pptx");
var slide = presentation.Slides[0];
var autoShape = (IAutoShape)slide.Shapes[0];
var paragraph = autoShape.TextFrame.Paragraphs[0];
// Đặt thuộc tính phông chữ cho đoạn văn.
var portionFormat = paragraph.ParagraphFormat.DefaultPortionFormat;
portionFormat.FontHeight = 12;
portionFormat.FontBold = NullableBool.True;
portionFormat.FontItalic = NullableBool.True;
portionFormat.FontUnderline = TextUnderlineType.Dotted;
portionFormat.LatinFont = new FontData("Times New Roman");
presentation.Save("font_properties_for_paragraph.pptx", SaveFormat.Pptx);
Kết quả:

Ví dụ sau đây áp dụng Times New Roman 13 điểm, định dạng italic và gạch dưới dạng chấm cho các phần mà định dạng hiệu lực là in đậm:
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation("sample.pptx");
var slide = presentation.Slides[0];
var autoShape = (IAutoShape)slide.Shapes[0];
var paragraph = autoShape.TextFrame.Paragraphs[0];
foreach (var portion in paragraph.Portions)
{
if (portion.PortionFormat.GetEffective().FontBold)
{
// Đặt thuộc tính phông chữ cho phần văn bản.
portion.PortionFormat.FontHeight = 13;
portion.PortionFormat.FontItalic = NullableBool.True;
portion.PortionFormat.FontUnderline = TextUnderlineType.Dotted;
portion.PortionFormat.LatinFont = new FontData("Times New Roman");
}
}
presentation.Save("font_properties_for_text_portions.pptx", SaveFormat.Pptx);
Kết quả:

Kiểm Soát Chuẩn Hoá Độ Cao Văn Bản
Sử dụng IBasePortionFormat.NormaliseHeight khi tái tạo kiểu chữ mẫu hoặc điều tra sự khác nhau về chiều cao ký tự. Trong PowerPoint, bật chuẩn hoá sẽ kéo dài hoặc nén các ký tự riêng lẻ theo chiều dọc để chúng có chiều cao hiển thị đồng nhất trong phần văn bản. Nó không bảo đảm độ cao văn bản bằng nhau giữa các phông chữ khác nhau.
Đặt thuộc tính này thành NullableBool.True or False để bật hoặc tắt chuẩn hoá một cách rõ ràng. NullableBool.NotDefined để lại cài đặt cục bộ không được đặt, cho phép phần kế thừa giá trị, ví dụ từ DefaultPortionFormat của đoạn. Nó không có nghĩa là False. Sử dụng IPortionFormat.GetEffective và đọc IBasePortionFormatEffectiveData.NormaliseHeight để lấy giá trị Boolean đã giải quyết.
Ví dụ tự chứa dưới đây yêu cầu Arial được cài đặt. Nó tạo hai khối văn bản chứa cùng các chữ hoa, chữ thường, ký tự có phần xuống và ký tự có dấu ở kích thước 54 điểm. Cả hai đoạn đều bật chuẩn hoá theo mặc định. Phần trên tắt chuẩn hoá một cách rõ ràng; phần dưới kế thừa nó. Kích thước khung, lề và khoảng cách đoạn đều giống nhau, với ngắt dòng và tự động vừa bị tắt để duy trì so sánh nhất quán. Ví dụ in ra False: False và NotDefined: True, sau đó lưu “text_height_normalization.pptx”.
using System;
using System.Drawing;
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation();
var slide = presentation.Slides[0];
var settings = new[] { NullableBool.False, NullableBool.NotDefined };
for (var i = 0; i < settings.Length; i++)
{
var shape = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 30, 60 + i * 200, 660, 150);
shape.FillFormat.FillType = FillType.NoFill;
shape.LineFormat.FillFormat.FillType = FillType.NoFill;
var textFrame = shape.TextFrame;
textFrame.Text = "Hxgjpq ÅÉ 0123";
textFrame.TextFrameFormat.AutofitType = TextAutofitType.None;
textFrame.TextFrameFormat.WrapText = NullableBool.False;
textFrame.TextFrameFormat.AnchoringType = TextAnchorType.Top;
textFrame.TextFrameFormat.MarginTop = 0;
textFrame.TextFrameFormat.MarginLeft = 0;
var paragraph = textFrame.Paragraphs[0];
paragraph.ParagraphFormat.Alignment = TextAlignment.Left;
paragraph.ParagraphFormat.SpaceBefore = 0;
paragraph.ParagraphFormat.SpaceAfter = 0;
paragraph.ParagraphFormat.SpaceWithin = 100;
paragraph.ParagraphFormat.DefaultPortionFormat.NormaliseHeight = NullableBool.True;
var portion = paragraph.Portions[0];
portion.PortionFormat.LatinFont = new FontData("Arial");
portion.PortionFormat.FontHeight = 54;
portion.PortionFormat.FillFormat.FillType = FillType.Solid;
portion.PortionFormat.FillFormat.SolidFillColor.Color = Color.Black;
portion.PortionFormat.NormaliseHeight = settings[i];
Console.WriteLine($"{settings[i]}: {portion.PortionFormat.GetEffective().NormaliseHeight}");
}
presentation.Save("text_height_normalization.pptx", SaveFormat.Pptx);
So sánh dưới đây được xuất từ bản trình chiếu đã lưu. Hàng trên có chuẩn hoá bị tắt (False); hàng dưới kế thừa cài đặt bật (NotDefined → True). Giữ Arial được cài đặt để tái tạo giao diện này.

Chuẩn hoá thay đổi chiều cao ký tự mà không thay đổi giá trị FontHeight được gán, giá trị này chỉ định kích thước phông bằng điểm. SpaceWithin của đoạn kiểm soát khoảng cách dòng, trong khi AutofitType của khung văn bản kiểm soát cách văn bản hoặc khung chứa điều chỉnh để vừa. Các cài đặt này có mục đích khác nhau và có thể ảnh hưởng đến bố cục tổng thể một cách độc lập. Để tìm hiểu thêm về định dạng đoạn và kế thừa, xem Quản Lý Đoạn.
Áp Dụng và Xóa Gạch Đường Gạch Chéo
Sử dụng IBasePortionFormat.StrikethroughType trên một phần văn bản để hiển thị các chỉnh sửa, từ bị hủy hoặc giá trước mà không xóa bỏ văn bản gốc. Đặt nó thành TextStrikethroughType.Single or Double cho một hoặc hai đường gạch chéo qua văn bản.
Để xóa gạch chéo, gán TextStrikethroughType.None. Điều này tắt hiệu ứng một cách rõ ràng, ngay cả khi định dạng bao quanh chỉ định gạch chéo. Ngược lại, TextStrikethroughType.NotDefined để lại cài đặt cục bộ không xác định, cho phép phần kế thừa định dạng, ví dụ từ đoạn. Nó không đảm bảo gạch chéo bị xóa. Sử dụng IPortionFormat.GetEffective để đọc định dạng kết quả, bao gồm các giá trị kế thừa.
Ví dụ tự chứa dưới đây tạo ba so sánh giá. Mỗi đoạn có các phần riêng cho nhãn, giá trước và giá hiện tại, vì vậy chỉ giá trước bị ảnh hưởng. Hàng trên áp dụng và sau đó xóa gạch chéo; các hàng khác giữ gạch chéo đơn và gạch chéo đôi. Thay đổi thuộc tính này giữ nguyên văn bản và các định dạng khác, bao gồm giá trước được in đậm.
using System.Drawing;
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation();
var slide = presentation.Slides[0];
var shape = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 50, 50, 620, 220);
shape.FillFormat.FillType = FillType.NoFill;
shape.LineFormat.FillFormat.FillType = FillType.NoFill;
shape.TextFrame.Paragraphs.Clear();
var labels = new[] { "None: ", "Single: ", "Double: " };
foreach (var label in labels)
{
var paragraph = new Paragraph();
paragraph.ParagraphFormat.Alignment = TextAlignment.Left;
paragraph.ParagraphFormat.SpaceAfter = 20;
var format = paragraph.ParagraphFormat.DefaultPortionFormat;
format.FontHeight = 28;
format.LatinFont = new FontData("Arial");
format.FillFormat.FillType = FillType.Solid;
format.FillFormat.SolidFillColor.Color = Color.Black;
paragraph.Portions.Add(new Portion(label));
var previousPrice = new Portion("$100");
previousPrice.PortionFormat.FontBold = NullableBool.True;
paragraph.Portions.Add(previousPrice);
paragraph.Portions.Add(new Portion(" → $80"));
shape.TextFrame.Paragraphs.Add(paragraph);
}
var paragraphs = shape.TextFrame.Paragraphs;
// Áp dụng gạch ngang, sau đó xóa rõ ràng nó khỏi giá trước đầu tiên.
paragraphs[0].Portions[1].PortionFormat.StrikethroughType = TextStrikethroughType.Single;
paragraphs[0].Portions[1].PortionFormat.StrikethroughType = TextStrikethroughType.None;
paragraphs[1].Portions[1].PortionFormat.StrikethroughType = TextStrikethroughType.Single;
paragraphs[2].Portions[1].PortionFormat.StrikethroughType = TextStrikethroughType.Double;
presentation.Save("strikethrough.pptx", SaveFormat.Pptx);
Kết quả, từ trên xuống dưới: không gạch chéo, gạch chéo đơn, và gạch chéo đôi.

Đặt Xoay Văn Bản
Sử dụng ITextFrameFormat.TextVerticalType để đặt một hướng văn bản được định trước trong một hình dạng.
Ví dụ mã dưới đây đặt hướng văn bản trong hình dạng thành TextVerticalType.Vertical270, khiến văn bản 90 độ ngược chiều kim đồng hồ:
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation("sample.pptx");
var slide = presentation.Slides[0];
var autoShape = (IAutoShape)slide.Shapes[0];
autoShape.TextFrame.TextFrameFormat.TextVerticalType = TextVerticalType.Vertical270;
presentation.Save("text_rotation.pptx", SaveFormat.Pptx);
Kết quả:

Đặt Xoay Tùy Chỉnh cho Khung Văn Bản
Sử dụng ITextFrameFormat.RotationAngle để đặt góc xoay tùy chỉnh cho một ITextFrame.
Ví dụ mã dưới đây xoay khung văn bản 3 độ theo chiều kim đồng hồ trong hình dạng:
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation("sample.pptx");
var slide = presentation.Slides[0];
var autoShape = (IAutoShape)slide.Shapes[0];
autoShape.TextFrame.TextFrameFormat.RotationAngle = 3;
presentation.Save("custom_text_rotation.pptx", SaveFormat.Pptx);
Kết quả:

Đặt Khoảng Cách Dòng cho Đoạn
Aspose.Slides cung cấp IParagraphFormat.SpaceAfter, IParagraphFormat.SpaceBefore và IParagraphFormat.SpaceWithin để kiểm soát khoảng cách đoạn. Các thuộc tính này được sử dụng như sau:
- Sử dụng giá trị dương để chỉ định khoảng cách dòng dưới dạng phần trăm của chiều cao dòng.
- Sử dụng giá trị âm để chỉ định khoảng cách dòng bằng điểm.
Ví dụ sau đặt khoảng cách trong đoạn đầu tiên là 200% chiều cao dòng (gấp đôi khoảng cách):
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation("sample.pptx");
var slide = presentation.Slides[0];
var autoShape = (IAutoShape)slide.Shapes[0];
var paragraph = autoShape.TextFrame.Paragraphs[0];
paragraph.ParagraphFormat.SpaceWithin = 200;
presentation.Save("line_spacing.pptx", SaveFormat.Pptx);
Kết quả:

Kiểm Soát Ngắt Dòng
Các quy tắc ngắt dòng của đoạn hữu ích trong các khối văn bản hẹp và các bản trình chiếu trộn lẫn văn bản Latin và Đông Á. Các thuộc tính sau thuộc về IParagraphFormat, vì vậy chúng áp dụng cho toàn bộ đoạn:
- LatinLineBreak kiểm soát quy tắc ngắt dòng Latin. Trong văn bản hỗn hợp, việc thay đổi nó cũng có thể thay đổi vị trí mà văn bản và dấu câu Đông Á liền kề ngắt.
- EastAsianLineBreak kiểm soát quy tắc ngắt dòng Đông Á, bao gồm các hạn chế về ký tự ở đầu và cuối dòng.
Các quy tắc này không thay thế ITextFrameFormat.WrapText, cho phép tự động ngắt trong khung văn bản. Chúng ảnh hưởng đến bố cục khi ngắt xảy ra; chúng không chèn ký tự ngắt dòng. Một ngắt dòng rõ ràng buộc một dòng mới trong đoạn mà không phụ thuộc vào độ rộng có sẵn.
Ví dụ tự chứa dưới đây tạo một khối văn bản hẹp chứa tiếng Trung và Latin. Nó đặt cả hai thuộc tính ngắt dòng một cách rõ ràng và lưu “line_breaking.pptx”. Để thử nghiệm với bất kỳ quy tắc nào, thay đổi giá trị của thuộc tính đó trong khi giữ các cài đặt khác cố định. Ví dụ sử dụng Arial 24 điểm và SimSun với độ rộng khung 160 điểm và lề ngang khung văn bản bằng 0. ITextFrameFormat.AutofitType được đặt thành TextAutofitType.None để kích thước văn bản và kích thước khung không thay đổi.
using System.Drawing;
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation();
var slide = presentation.Slides[0];
var shape = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 50, 50, 160, 300);
shape.FillFormat.FillType = FillType.NoFill;
var textFrame = shape.TextFrame;
textFrame.TextFrameFormat.WrapText = NullableBool.True;
textFrame.TextFrameFormat.AutofitType = TextAutofitType.None;
textFrame.TextFrameFormat.MarginLeft = 0;
textFrame.TextFrameFormat.MarginRight = 0;
var paragraph = textFrame.Paragraphs[0];
paragraph.Text = "中文排版测试,PowerPoint 中文演示。";
var format = paragraph.ParagraphFormat;
format.Alignment = TextAlignment.Left;
format.DefaultPortionFormat.FontHeight = 24;
format.DefaultPortionFormat.LatinFont = new FontData("Arial");
format.DefaultPortionFormat.EastAsianFont = new FontData("SimSun");
format.DefaultPortionFormat.FillFormat.FillType = FillType.Solid;
format.DefaultPortionFormat.FillFormat.SolidFillColor.Color = Color.Black;
format.LatinLineBreak = NullableBool.False;
format.EastAsianLineBreak = NullableBool.True;
presentation.Save("line_breaking.pptx", SaveFormat.Pptx);
Kiểm Soát Dấu Câu Treo
IParagraphFormat.HangingPunctuation cho phép các dấu câu đủ tiêu chuẩn mở rộng ra ngoài cạnh phải của dòng văn bản thay vì chiếm dòng tiếp theo. Nó áp dụng cho toàn bộ đoạn và khác với thụt lề treo.
Ví dụ tự chứa dưới đây bật dấu câu treo trong khung văn bản rộng 100 điểm và lưu “hanging_punctuation.pptx”. Với Arial 24 điểm và lề ngang khung văn bản bằng 0, dấu chấm cuối cùng ở sau “sentence” và mở rộng ra ngoài cạnh phải của văn bản. Đặt thuộc tính thành NullableBool.False để so sánh: với các cài đặt này, dấu chấm chiếm một dòng riêng. Ngắt dòng được bật và tự động vừa bị tắt để giữ độ rộng có sẵn cố định.
using System.Drawing;
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation();
var slide = presentation.Slides[0];
var shape = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 50, 50, 100, 200);
shape.FillFormat.FillType = FillType.NoFill;
var textFrame = shape.TextFrame;
textFrame.TextFrameFormat.WrapText = NullableBool.True;
textFrame.TextFrameFormat.AutofitType = TextAutofitType.None;
textFrame.TextFrameFormat.MarginLeft = 0;
textFrame.TextFrameFormat.MarginRight = 0;
var paragraph = textFrame.Paragraphs[0];
paragraph.Text = "Simple text, next sentence.";
var format = paragraph.ParagraphFormat;
format.Alignment = TextAlignment.Left;
format.DefaultPortionFormat.FontHeight = 24;
format.DefaultPortionFormat.LatinFont = new FontData("Arial");
format.DefaultPortionFormat.FillFormat.FillType = FillType.Solid;
format.DefaultPortionFormat.FillFormat.SolidFillColor.Color = Color.Black;
format.HangingPunctuation = NullableBool.True;
presentation.Save("hanging_punctuation.pptx", SaveFormat.Pptx);
Không phải mọi dấu câu đều có thể treo. Các điều kiện phông và bố cục được mô tả ở trên cũng áp dụng cho so sánh này: thay đổi phông, độ rộng có sẵn, lề hoặc cài đặt tự động vừa có thể loại bỏ sự khác biệt nhìn thấy được.
Đặt Kiểu Tự Động Vừa cho Khung Văn Bản
ITextFrameFormat.AutofitType quyết định cách văn bản phản ứng khi vượt quá giới hạn của vùng chứa. Sử dụng nó để kiểm soát việc văn bản co lại, tràn ra hoặc tự động thay đổi kích thước hình dạng. Ví dụ sau cấu hình hình dạng để thay đổi kích thước phù hợp với văn bản và lưu kết quả thành “autofit_type.pptx”.
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation("sample.pptx");
var slide = presentation.Slides[0];
var autoShape = (IAutoShape)slide.Shapes[0];
autoShape.TextFrame.TextFrameFormat.AutofitType = TextAutofitType.Shape;
presentation.Save("autofit_type.pptx", SaveFormat.Pptx);
Để đếm dòng sau khi tự động ngắt và xem cách kích thước văn bản hoặc hình dạng thay đổi kết quả, xem Đếm Dòng Đã Render. Số lượng dòng một mình không cho biết liệu văn bản có tràn khỏi vùng chứa hay không.
Đặt Neo cho Khung Văn Bản
ITextFrameFormat.AnchoringType xác định cách văn bản được đặt vị trí theo chiều dọc bên trong một hình dạng, ví dụ ở trên, giữa hoặc dưới. Ví dụ sau neo văn bản vào đáy của hình dạng đầu tiên và lưu kết quả thành “text_anchor.pptx”.
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation("sample.pptx");
var slide = presentation.Slides[0];
var autoShape = (IAutoShape)slide.Shapes[0];
autoShape.TextFrame.TextFrameFormat.AnchoringType = TextAnchorType.Bottom;
presentation.Save("text_anchor.pptx", SaveFormat.Pptx);
Đặt Tab Văn Bản
Sử dụng IParagraphFormat.DefaultTabSize và IParagraphFormat.Tabs để cấu hình các điểm dừng tab trong một đoạn. Ví dụ sau đặt khoảng cách tab mặc định là 100 điểm và thêm một điểm dừng tab căn trái tại 30 điểm. Các cài đặt này ảnh hưởng đến văn bản có chứa ký tự tab.
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation("sample.pptx");
var slide = presentation.Slides[0];
var autoShape = (IAutoShape)slide.Shapes[0];
var paragraph = autoShape.TextFrame.Paragraphs[0];
paragraph.ParagraphFormat.DefaultTabSize = 100;
paragraph.ParagraphFormat.Tabs.Add(30, TabAlignment.Left);
presentation.Save("paragraph_tabs.pptx", SaveFormat.Pptx);
Kết quả:

Đặt Ngôn Ngữ Kiểm Tra Chính Tả
Aspose.Slides cung cấp IBasePortionFormat.LanguageId, cho phép bạn đặt ngôn ngữ kiểm tra chính tả cho một phần văn bản. Ngôn ngữ kiểm tra quyết định ngôn ngữ được sử dụng cho kiểm tra chính tả và ngữ pháp trong PowerPoint.
Ví dụ sau yêu cầu “presentation.pptx” với một hộp văn bản là hình dạng đầu tiên trên slide đầu tiên và ít nhất một đoạn. Nó thay thế nội dung của đoạn đầu tiên bằng “1。”, đặt SimSun làm phông và gán ngôn ngữ kiểm tra Simplified Chinese (zh-CN). Sau đó lưu kết quả thành “proofing_language.pptx”:
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation("presentation.pptx");
var slide = presentation.Slides[0];
var autoShape = (IAutoShape)slide.Shapes[0];
var paragraph = autoShape.TextFrame.Paragraphs[0];
paragraph.Portions.Clear();
var font = new FontData("SimSun");
var textPortion = new Portion();
textPortion.PortionFormat.ComplexScriptFont = font;
textPortion.PortionFormat.EastAsianFont = font;
textPortion.PortionFormat.LatinFont = font;
// Đặt ngôn ngữ kiểm tra chính tả thành tiếng Trung giản thể.
textPortion.PortionFormat.LanguageId = "zh-CN";
textPortion.Text = "1。";
paragraph.Portions.Add(textPortion);
presentation.Save("proofing_language.pptx", SaveFormat.Pptx);
Đặt Ngôn Ngữ Mặc Định
Sử dụng LoadOptions.DefaultTextLanguage để định nghĩa ngôn ngữ mặc định cho văn bản được tạo khi tải hoặc tạo một bản trình chiếu. Ví dụ sau tạo một bản trình chiếu với tiếng Anh Mỹ làm ngôn ngữ văn bản mặc định, thêm một hộp văn bản và in ra en-US cho phần văn bản đầu tiên.
using System;
using Aspose.Slides;
var loadOptions = new LoadOptions();
loadOptions.DefaultTextLanguage = "en-US";
using var presentation = new Presentation(loadOptions);
var slide = presentation.Slides[0];
// Thêm một hình chữ nhật mới có văn bản.
var shape = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 20, 20, 150, 50);
shape.TextFrame.Text = "Sample text";
// Kiểm tra ngôn ngữ của phần đầu tiên.
var portion = shape.TextFrame.Paragraphs[0].Portions[0];
Console.WriteLine(portion.PortionFormat.LanguageId);
Đặt Kiểu Văn Bản Mặc Định
Để áp dụng định dạng văn bản mặc định ở cấp độ bản trình chiếu, sử dụng IPresentation.DefaultTextStyle.
Ví dụ sau đặt phông chữ in đậm 14 điểm làm mặc định cho các đoạn cấp cao trong một bản trình chiếu mới và lưu thành “default_text_style.pptx”. Văn bản có thể kế thừa các mặc định này trừ khi định dạng cụ thể hơn ghi đè.
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation();
// Get the top level paragraph format.
var paragraphFormat = presentation.DefaultTextStyle.GetLevel(0);
if (paragraphFormat != null)
{
paragraphFormat.DefaultPortionFormat.FontHeight = 14;
paragraphFormat.DefaultPortionFormat.FontBold = NullableBool.True;
}
presentation.Save("default_text_style.pptx", SaveFormat.Pptx);
Trích Xuất Văn Bản với Hiệu Ứng All-Caps
Trong PowerPoint, áp dụng hiệu ứng All Caps làm cho văn bản hiển thị dưới dạng chữ hoa trên slide ngay cả khi nó được gõ bằng chữ thường. Khi bạn lấy phần văn bản như vậy bằng Aspose.Slides, thư viện trả về văn bản đúng như khi nhập. Để khớp với văn bản hiển thị, kiểm tra TextCapType và chuyển chuỗi trả về thành chữ hoa khi giá trị là All.
Ví dụ này yêu cầu “sample2.pptx” với một hộp văn bản là hình dạng đầu tiên trên slide đầu tiên. Phần đầu tiên của đoạn đầu tiên chứa “Hello, Aspose!” với hiệu ứng All Caps được áp dụng, như hình dưới.

Ví dụ mã dưới đây cho thấy cách trích xuất văn bản với hiệu ứng All Caps được áp dụng:
using System;
using Aspose.Slides;
using var presentation = new Presentation("sample2.pptx");
var slide = presentation.Slides[0];
var autoShape = (IAutoShape)slide.Shapes[0];
var textPortion = autoShape.TextFrame.Paragraphs[0].Portions[0];
Console.WriteLine($"Original text: {textPortion.Text}");
var textFormat = textPortion.PortionFormat.GetEffective();
if (textFormat.TextCapType == TextCapType.All)
{
var text = textPortion.Text.ToUpper();
Console.WriteLine($"All-Caps effect: {text}");
}
Đầu ra:
Original text: Hello, Aspose!
All-Caps effect: HELLO, ASPOSE!
FAQ
Làm thế nào để tôi chỉnh sửa văn bản trong một bảng trên slide?
Để chỉnh sửa văn bản trong một bảng trên slide, sử dụng ITable. Duyệt qua các ô và cập nhật mỗi ô thông qua ICell.TextFrame và định dạng đoạn qua IParagraph.ParagraphFormat.
Làm thế nào để tôi áp dụng màu gradient cho văn bản trên slide PowerPoint?
Để áp dụng màu gradient cho văn bản, sử dụng IBasePortionFormat.FillFormat. Đặt IFillFormat.FillType thành FillType.Gradient và cấu hình các điểm dừng gradient, hướng và độ trong suốt.
Liên quan tới tính năng: Định dạng văn bản trong slide.