รับขอบเขตย่อหน้าจากงานนำเสนอใน .NET

ภาพรวม

บทความนี้อธิบายวิธีการรับขอบเขต ขนาด และพิกัดของย่อหน้าใน Aspose.Slides มันแสดงวิธีดึงสี่เหลี่ยมผืนภายใต้ย่อหน้าจาก ITextFrame โดยใช้ IParagraph.GetRect, วิธีรับพิกัดย่อหน้าใน text frame ของเซลล์ตาราง, และเน้นรายละเอียดสำคัญเช่นหน่วยการวัด ผลของการตัดบรรทัดต่อขอบเขต การแปลงเป็นพิกเซล และค่าการจัดรูปแบบย่อหน้าที่มีผล

รับพิกัดสี่เหลี่ยมของย่อหน้า

ใช้ IParagraph.GetRect เพื่อรับสี่เหลี่ยมขอบเขตของย่อหน้า

using var presentation = new Presentation("Shapes.pptx");
var slide = presentation.Slides[0];
var shape = (IAutoShape)slide.Shapes[0];
var paragraph = shape.TextFrame.Paragraphs[0];
var rectangle = paragraph.GetRect();

รับขนาดของย่อหน้าภายใน TextFrame ของเซลล์ตาราง

เพื่อรับขนาดและพิกัดของ IParagraph ใน text frame ของเซลล์ตาราง ให้ใช้ IParagraph.GetRect สี่เหลี่ยมที่คืนค่าจะอ้างอิงถึง text frame ของเซลล์ตาราง ดังนั้นให้เพิ่มตำแหน่งตารางและออฟเซตของเซลล์เมื่อคุณต้องการพิกัดระดับสไลด์

ตัวอย่างต่อไปนี้รับขอบเขตของย่อหน้าในเซลล์ตารางและวาดสี่เหลี่ยมบนสไลด์เพื่อแสดงขอบเขตเหล่านั้น:

using var presentation = new Presentation("source.pptx");
var slide = presentation.Slides[0];
var table = (ITable)slide.Shapes[0];
var cell = table.Rows[1][1];

var cellX = table.X + cell.OffsetX;
var cellY = table.Y + cell.OffsetY;

foreach (var paragraph in cell.TextFrame.Paragraphs)
{
    if (string.IsNullOrEmpty(paragraph.Text))
        continue;

    var paragraphRectangle = paragraph.GetRect();
    var paragraphRectangleX = paragraphRectangle.X + (float)cellX;
    var paragraphRectangleY = paragraphRectangle.Y + (float)cellY;

    var paragraphBoundsShape = presentation.Slides[0].Shapes.AddAutoShape(
        ShapeType.Rectangle,
        paragraphRectangleX,
        paragraphRectangleY,
        paragraphRectangle.Width,
        paragraphRectangle.Height);

    paragraphBoundsShape.FillFormat.FillType = FillType.NoFill;
    paragraphBoundsShape.LineFormat.FillFormat.SolidFillColor.Color = Color.Yellow;
    paragraphBoundsShape.LineFormat.FillFormat.FillType = FillType.Solid;
}

presentation.Save("output.pptx", SaveFormat.Pptx);

FAQ

พิกัดของย่อหน้าถูกวัดเป็นหน่วยอะไร?

พวกมันวัดเป็นหน่วยจุด (points) โดยที่ 1 นิ้วเท่ากับ 72 จุด ซึ่งใช้กับพิกัดและขนาดทั้งหมดบนสไลด์

การตัดบรรทัดอัตโนมัติมีผลต่อขอบเขตของย่อหน้าหรือไม่?

ใช่ หาก TextFrameFormat.WrapText ถูกเปิดใช้สำหรับ ITextFrame ข้อความจะตัดบรรทัดให้พอดีกับความกว้างของพื้นที่ ซึ่งจะทำให้ขอบเขตจริงของย่อหน้าเปลี่ยนแปลง

พิกัดของย่อหน้าสามารถแมปเป็นพิกเซลในภาพที่ส่งออกได้อย่างน่าเชื่อถือหรือไม่?

ได้ ใช้สูตรต่อไปนี้เพื่อแปลงจุดเป็นพิกเซล: pixels = points × (DPI / 72) ผลลัพธ์จะขึ้นอยู่กับค่า DPI ที่เลือกสำหรับการเรนเดอร์หรือการส่งออก

ฉันจะรับพารามิเตอร์การจัดรูปแบบย่อหน้าแบบ “effective” ที่คำนึงถึงการสืบทอดสไตล์ได้อย่างไร?

ใช้ effective paragraph formatting data structure ซึ่งจะส่งคืนค่าที่สรุปขั้นสุดท้ายสำหรับการเยื้อง การเว้นระยะ การตัดบรรทัด การจัดข้อความจากขวาไปซ้าย (RTL) และอื่น ๆ