PageLayoutCallbackArgs.PageIndex property

Gets 0-based index of the page in the document this event relates to. Returns negative value if there is no associated page, or if page was removed during reflow.

public int PageIndex { get; }


Shows how to track layout changes with a layout callback.

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.Save(ArtifactsDir + "Layout.PageLayoutCallback.pdf");

/// <summary>
/// Notifies us when we save the document to a fixed page format
/// and renders a page that we perform a page reflow on to an image in the local file system.
/// </summary>
private class RenderPageLayoutCallback : IPageLayoutCallback
    public void Notify(PageLayoutCallbackArgs a)
        switch (a.Event)
            case PageLayoutEvent.PartReflowFinished:
            case PageLayoutEvent.ConversionFinished:

    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 + $@"{pageIndex + 1} {++mNum}.png",
            a.Document.Save(stream, saveOptions);

    private int mNum;

See Also