استخدام FloatingBox لتوليد النص

تعمل هذه الميزة أيضًا في مكتبة Aspose.PDF.Drawing .

أساسيات استخدام أداة FloatingBox

أداة Floating Box هي أداة خاصة لوضع النص والمحتوى الآخر على صفحة PDF. تتمثل ميزتها الرئيسية في قص النص عندما يتجاوز حجم FloatingBox.

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void CreateAndAddFloatingBox()
{
    // Create PDF document
    using (var document = new Aspose.Pdf.Document())
    {
        var page = document.Pages.Add();
        // Create and fill box
        var box = new Aspose.Pdf.FloatingBox(400, 30)
        {
            Border = new Aspose.Pdf.BorderInfo(Aspose.Pdf.BorderSide.All, 1.5f, Aspose.Pdf.Color.DarkGreen),
            IsNeedRepeating = false,
        };
        box.Paragraphs.Add(new Aspose.Pdf.Text.TextFragment("text example"));
        // Add box
        page.Paragraphs.Add(box);
    }
}

في المثال أعلاه، نقوم بإنشاء FloatingBox بعرض 400 نقطة وارتفاع 30 نقطة. أيضًا، في هذا المثال، تم إنشاء نص أكثر عمدًا مما يمكن أن يتناسب مع الحجم المحدد. نتيجة لذلك، تم قطع النص.

صورة 1

تحدد خاصية IsNeedRepeating بقيمة false النص بصفحة واحدة.

إذا قمنا بتعيين هذه الخاصية إلى true، سيتم إعادة تدفق النص إلى الصفحة التالية في نفس الموضع.

صورة 2

الميزات المتقدمة لـ FloatingBox

دعم الأعمدة المتعددة

تخطيط متعدد الأعمدة (حالة بسيطة)

يدعم FloatingBox تخطيط الأعمدة المتعددة. لإنشاء مثل هذا التخطيط، يجب عليك تحديد قيم خصائص ColumnInfo.

  • ColumnWidths هو سلسلة تحتوي على تعداد العرض بالنقاط.
  • ColumnSpacing هو سلسلة تحتوي على عرض الفجوة بين الأعمدة.
  • ColumnCount هو عدد الأعمدة.
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void MultiColumnLayout()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_Tooltip();

    // Create PDF document
    using (var document = new Aspose.Pdf.Document())
    {
        // Add page
        var page = document.Pages.Add();
        // Set margin settings
        page.PageInfo.Margin = new Aspose.Pdf.MarginInfo(36, 18, 36, 18);
        var columnCount = 3;
        var spacing = 10;
        var width = page.PageInfo.Width
            - page.PageInfo.Margin.Left
            - page.PageInfo.Margin.Right
            - (columnCount - 1) * spacing;
        var columnWidth = width / 3;
        // Create FloatingBox
        var box = new Aspose.Pdf.FloatingBox()
        {
            IsNeedRepeating = true
        };
        box.ColumnInfo.ColumnWidths = $"{columnWidth} {columnWidth} {columnWidth}";
        box.ColumnInfo.ColumnSpacing = $"{spacing}";
        box.ColumnInfo.ColumnCount = 3;

        var phrase = "text example";
        var paragraphs = new string[10]
        {
            phrase, phrase, phrase, phrase, phrase,
            phrase, phrase, phrase, phrase, phrase,
        };
        foreach (var paragraph in paragraphs)
        {
            box.Paragraphs.Add(new Aspose.Pdf.Text.TextFragment(paragraph));
        }
        // Add a box to a page
        page.Paragraphs.Add(box);
        // Save PDF document
        document.Save(dataDir + "MultiColumnLayout_out.pdf");
    }
}

استخدمنا المكتبة الإضافية LoremNET في المثال أعلاه وأنشأنا 20 فقرة. تم تقسيم هذه الفقرات إلى ثلاثة أعمدة وملأت الصفحات التالية حتى نفاد النص.

تخطيط متعدد الأعمدة مع بدء عمود قسري

سنقوم بنفس الشيء مع المثال التالي كما في السابق. الفرق هو أننا أنشأنا 3 فقرات. يمكننا إجبار FloatingBox على عرض كل فقرة في عمود جديد. للقيام بذلك، نحتاج إلى تعيين IsFirstParagraphInColumn عند إضافة نص إلى كائن FloatingBox.

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void MultiColumnLayout2()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_Tooltip();

    // Create PDF document
    using (var document = new Aspose.Pdf.Document())
    {
        // Add page
        var page = document.Pages.Add();
        // Set margin settings
        page.PageInfo.Margin = new Aspose.Pdf.MarginInfo(36, 18, 36, 18);
        var columnCount = 3;
        var spacing = 10;
        var width = page.PageInfo.Width
            - page.PageInfo.Margin.Left
            - page.PageInfo.Margin.Right
            - (columnCount - 1) * spacing;
        var columnWidth = width / 3;
        // Create the FloatingBox
        var box = new Aspose.Pdf.FloatingBox()
        {
            IsNeedRepeating = true
        };
        box.ColumnInfo.ColumnWidths = $"{columnWidth} {columnWidth} {columnWidth}";
        box.ColumnInfo.ColumnSpacing = $"{spacing}";
        box.ColumnInfo.ColumnCount = 3;

        var phrase = "text example";
        var paragraphs = new string[10]
        {
            phrase, phrase, phrase, phrase, phrase,
            phrase, phrase, phrase, phrase, phrase,
        };
        foreach (var paragraph in paragraphs)
        {
            var text = new Aspose.Pdf.Text.TextFragment(paragraph)
            {
                IsFirstParagraphInColumn = true
            };
            box.Paragraphs.Add(text);
        }

        // Add a box to a page
        page.Paragraphs.Add(box);
        // Save PDF document
        document.Save(dataDir + "MultiColumnLayout2_out.pdf");
    }
}

دعم الخلفية

يمكنك تعيين لون الخلفية المطلوب باستخدام خاصية BackgroundColor.

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void BackgroundSupport()
{
    // Create PDF document
    using (var document = new Aspose.Pdf.Document())
    {
        var page = document.Pages.Add();
        var box = new Aspose.Pdf.FloatingBox(400, 60)
        {
            IsNeedRepeating = false,
            BackgroundColor = Aspose.Pdf.Color.LightGreen,
        };
        var text = "text example";
        box.Paragraphs.Add(new Aspose.Pdf.Text.TextFragment(text));
        page.Paragraphs.Add(box);
    }
}

دعم التمركز

يتم تحديد موقع FloatingBox على الصفحة المولدة بواسطة خصائص PositioningMode و Left و Top. عندما تكون قيمة PositioningMode هي

  • ParagraphPositioningMode.Default (القيمة الافتراضية) يتم تحديد الموقع بواسطة العناصر الموضوعة مسبقًا. يتم أخذ إضافة عنصر في الاعتبار عند تحديد موقع العناصر اللاحقة. إذا كانت قيمة أي من خصائص Left أو Top ليست صفرًا، فسيتم أخذها أيضًا في الاعتبار، ولكن هذا يستخدم منطقًا ليس واضحًا تمامًا ومن الأفضل عدم استخدامه.

  • ParagraphPositioningMode.Absolute يتم تحديد الموقع بواسطة قيم Left و Top، ولا يعتمد على العناصر السابقة ولا يؤثر على موقع العناصر اللاحقة.

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void OffsetSupport()
{
    // Create PDF document
    using (var document = new Aspose.Pdf.Document())
    {
        // Add page
        var page = document.Pages.Add();
        // Create FloatingBox
        var box = new Aspose.Pdf.FloatingBox()
        {
            Top = 45,
            Left = 15,
            PositioningMode = Aspose.Pdf.ParagraphPositioningMode.Absolute
            Border = new Aspose.Pdf.BorderInfo(Aspose.Pdf.BorderSide.All, 1.5f, Aspose.Pdf.Color.DarkGreen)
        };
        box.Paragraphs.Add(new Aspose.Pdf.Text.TextFragment("text example 1"));

        page.Paragraphs.Add(new Aspose.Pdf.Text.TextFragment("text example 2"));
        // Add the box to the page
        page.Paragraphs.Add(box);
        page.Paragraphs.Add(new Aspose.Pdf.Text.TextFragment("text example 3"));
    }
}