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;
}

أنظر أيضا