PageLayoutEvent

PageLayoutEvent enumeration

Un code d’événement déclenché lors de la création et du rendu du modèle de mise en page.

Le modèle de mise en page est construit en deux étapes. Premièrement, “l’étape de conversion”, c’est à ce moment-là que la mise en page extrait le contenu du document et crée un graphique d’objets. Deuxièmement, “l’étape de redistribution”, c’est lorsque les structures sont divisées, fusionnées et organisées. en pages.

En fonction de l’opération qui a déclenché la construction, le modèle de mise en page peut ou non être rendu dans un format de page fixe. Par exemple, le calcul du nombre de pages dans le document ou la mise à jour des champs ne nécessitent pas de rendu, contrairement à l’exportation au format PDF.

public enum PageLayoutEvent

Valeurs

NomÉvaluerLa description
None0Valeur par défaut
WatchDog1Correspond à un point de contrôle dans le code qui est souvent visité et qui permet d’abandonner le processus.
BuildStarted2La construction de la mise en page a commencé. Lancé une fois. Il s’agit du premier événement qui se produit lorsqueUpdatePageLayout s’appelle.
BuildFinished3La construction de la mise en page est terminée. Lancé une fois. Il s’agit du dernier événement qui se produit lorsqueUpdatePageLayout s’appelle.
ConversionStarted4La conversion du modèle de document en mise en page a commencé. Lancé une fois. Cela se produit lorsque le modèle de mise en page commence à extraire le contenu du document.
ConversionFinished5La conversion du modèle de document en mise en page est terminée. Lancé une fois. Cela se produit lorsque le modèle de mise en page arrête d’extraire le contenu du document.
ReflowStarted6La redistribution de la mise en page a commencé. Lancé une fois. Cela se produit lorsque le modèle de mise en page commence à redistribuer le contenu du document.
ReflowFinished7La redistribution de la mise en page est terminée. Lancé une fois. Cela se produit lorsque le modèle de mise en page arrête de redistribuer le contenu du document.
PartReflowStarted8La redistribution de la page a commencé. Notez que la page peut être redistribuée plusieurs fois et que la redistribution peut redémarrer avant qu’elle ne soit terminée.
PartReflowFinished9La redistribution de la page est terminée. Notez que la page peut être redistribuée plusieurs fois et que la redistribution peut redémarrer avant qu’elle ne soit terminée.
PartRenderingStarted10Le rendu de la page a commencé. Ceci est déclenché une fois par page.
PartRenderingFinished11Le rendu de la page est terminé. Ceci est déclenché une fois par page.

Exemples

Montre comment suivre les modifications de mise en page avec un rappel de mise en page.

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>
/// Nous avertit lorsque nous enregistrons le document dans un format de page fixe
/// et restitue une page sur laquelle nous effectuons une redistribution de page sur une image dans le système de fichiers local.
/// </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;
}

Voir également