PageLayoutEvent

PageLayoutEvent enumeration

رمز الحدث الذي تم رفعه أثناء إنشاء نموذج تخطيط الصفحة وعرضه.

يتم إنشاء نموذج تخطيط الصفحة في خطوتين. أولاً، “خطوة التحويل”، وذلك عندما يقوم تخطيط الصفحة بسحب محتوى المستند وإنشاء رسم بياني للكائن. ثانيًا، “خطوة إعادة التدفق”، وذلك عندما يتم تقسيم الهياكل ودمجها وترتيبها في الصفحات.

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

public enum PageLayoutEvent

قيم

اسمقيمةوصف
None0القيمة الافتراضية
WatchDog1يتوافق مع نقطة التحقق في الكود التي تتم زيارتها غالبًا والتي تكون مناسبة لإلغاء العملية.
BuildStarted2بدأ إنشاء تخطيط الصفحة. تم إطلاقه مرة واحدة. هذا هو الحدث الأول الذي يحدث عندماUpdatePageLayout يسمى.
BuildFinished3تم الانتهاء من بناء تخطيط الصفحة. تم إطلاقه مرة واحدة. هذا هو الحدث الأخير الذي يحدث عندماUpdatePageLayout يسمى.
ConversionStarted4بدأ تحويل نموذج المستند إلى تخطيط الصفحة. تم التشغيل مرة واحدة. يحدث هذا عندما يبدأ نموذج التخطيط في سحب محتوى المستند.
ConversionFinished5تم الانتهاء من تحويل نموذج المستند إلى تخطيط الصفحة. تم التشغيل مرة واحدة. ويحدث هذا عندما يتوقف نموذج التخطيط عن سحب محتوى المستند.
ReflowStarted6بدأ إعادة تدفق تخطيط الصفحة. تم التشغيل مرة واحدة. يحدث هذا عندما يبدأ نموذج التخطيط في إعادة تدفق محتوى المستند.
ReflowFinished7تم الانتهاء من إعادة تدفق تخطيط الصفحة. تم التشغيل مرة واحدة. يحدث هذا عندما يتوقف نموذج التخطيط عن إعادة تدفق محتوى المستند.
PartReflowStarted8بدأ إعادة التدفق للصفحة. لاحظ أن الصفحة قد تتم إعادة التدفق عدة مرات وقد يتم إعادة تشغيل إعادة التدفق قبل الانتهاء.
PartReflowFinished9انتهت عملية إعادة التدفق للصفحة. لاحظ أن الصفحة قد تتم إعادة التدفق عدة مرات وقد يتم إعادة تشغيل عملية إعادة التدفق هذه قبل الانتهاء.
PartRenderingStarted10بدأ عرض الصفحة. يتم إطلاق هذا مرة واحدة لكل صفحة.
PartRenderingFinished11انتهى عرض الصفحة. يتم إطلاق هذا مرة واحدة لكل صفحة.

أمثلة

يوضح كيفية تتبع تغييرات التخطيط من خلال رد اتصال التخطيط.

public void PageLayoutCallback()
{
    Document doc = new Document();
    doc.BuiltInDocumentProperties.Title = "My Document";

    DocumentBuilder builder = new DocumentBuilder(doc);
    builder.Writeln("Hello world!");

    doc.LayoutOptions.Callback = new RenderPageLayoutCallback();
    doc.UpdatePageLayout();

    doc.Save(ArtifactsDir + "Layout.PageLayoutCallback.pdf");
}

/// <summary>
/// يخطرنا عندما نحفظ المستند بتنسيق صفحة ثابت
/// ويعرض الصفحة التي نقوم بإعادة تدفق الصفحة عليها إلى صورة في نظام الملفات المحلي.
/// </summary>
private class RenderPageLayoutCallback : IPageLayoutCallback
{
    public void Notify(PageLayoutCallbackArgs a)
    {
        switch (a.Event)
        {
            case PageLayoutEvent.PartReflowFinished:
                NotifyPartFinished(a);
                break;
            case PageLayoutEvent.ConversionFinished:
                NotifyConversionFinished(a);
                break;
        }
    }

    private void NotifyPartFinished(PageLayoutCallbackArgs a)
    {
        Console.WriteLine($"Part at page {a.PageIndex + 1} reflow.");
        RenderPage(a, a.PageIndex);
    }

    private void NotifyConversionFinished(PageLayoutCallbackArgs a)
    {
        Console.WriteLine($"Document \"{a.Document.BuiltInDocumentProperties.Title}\" converted to page format.");
    }

    private void RenderPage(PageLayoutCallbackArgs a, int pageIndex)
    {
        ImageSaveOptions saveOptions = new ImageSaveOptions(SaveFormat.Png) { PageSet = new PageSet(pageIndex) };

        using (FileStream stream =
            new FileStream(ArtifactsDir + $@"PageLayoutCallback.page-{pageIndex + 1} {++mNum}.png",
                FileMode.Create))
            a.Document.Save(stream, saveOptions);
    }

    private int mNum;
}

أنظر أيضا