com.aspose.words

Interface IPageLayoutCallback

  • public interface IPageLayoutCallback 

Implement this interface if you want to have your own custom method called during build and rendering of page layout model.
The primary use for this interface is to allow application code to abort build process.

It is possible to build page layout model for only a few pages at start of the document then abort process and render only what has been built already.

Note, however, that rendering results may not match what would be rendered for each page if process would have finished.

This technique may not work for every document or may fail completely.

Example:

Shows how to track layout changes with a layout callback.
@Test
public void pageLayoutCallback() throws Exception {
    Document doc = new Document();
    doc.getBuiltInDocumentProperties().setTitle("My Document");

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

    doc.getLayoutOptions().setCallback(new RenderPageLayoutCallback());
    doc.updatePageLayout();

    doc.save(getArtifactsDir() + "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 static class RenderPageLayoutCallback implements IPageLayoutCallback {
    public void notify(PageLayoutCallbackArgs a) throws Exception {
        switch (a.getEvent()) {
            case PageLayoutEvent.PART_REFLOW_FINISHED:
                notifyPartFinished(a);
                break;
            case PageLayoutEvent.CONVERSION_FINISHED:
                notifyConversionFinished(a);
                break;
        }
    }

    private void notifyPartFinished(PageLayoutCallbackArgs a) throws Exception {
        System.out.println(MessageFormat.format("Part at page {0} reflow.", a.getPageIndex() + 1));
        renderPage(a, a.getPageIndex());
    }

    private void notifyConversionFinished(PageLayoutCallbackArgs a) {
        System.out.println(MessageFormat.format("Document \"{0}\" converted to page format.", a.getDocument().getBuiltInDocumentProperties().getTitle()));
    }

    private void renderPage(PageLayoutCallbackArgs a, int pageIndex) throws Exception {
        ImageSaveOptions saveOptions = new ImageSaveOptions(SaveFormat.PNG);
        {
            saveOptions.setPageSet(new PageSet(pageIndex));
        }

        try (FileOutputStream stream = new FileOutputStream(getArtifactsDir() + MessageFormat.format("PageLayoutCallback.page-{0} {1}.png", pageIndex + 1, ++mNum))) {
            a.getDocument().save(stream, saveOptions);
        }
    }

    private int mNum;
}
See Also:
LayoutOptions.Callback

Method Summary
abstract voidnotify(PageLayoutCallbackArgs args)
This is called to notify of layout build and rendering progress.
 

    • Method Detail

      • notify

        public abstract void notify(PageLayoutCallbackArgs args)
                                 throws java.lang.Exception
        This is called to notify of layout build and rendering progress. Exception when thrown by implementation aborts layout build process.

        Parameters:
        args - An argument of the event.

        Example:

        Shows how to track layout changes with a layout callback.
        @Test
        public void pageLayoutCallback() throws Exception {
            Document doc = new Document();
            doc.getBuiltInDocumentProperties().setTitle("My Document");
        
            DocumentBuilder builder = new DocumentBuilder(doc);
            builder.writeln("Hello world!");
        
            doc.getLayoutOptions().setCallback(new RenderPageLayoutCallback());
            doc.updatePageLayout();
        
            doc.save(getArtifactsDir() + "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 static class RenderPageLayoutCallback implements IPageLayoutCallback {
            public void notify(PageLayoutCallbackArgs a) throws Exception {
                switch (a.getEvent()) {
                    case PageLayoutEvent.PART_REFLOW_FINISHED:
                        notifyPartFinished(a);
                        break;
                    case PageLayoutEvent.CONVERSION_FINISHED:
                        notifyConversionFinished(a);
                        break;
                }
            }
        
            private void notifyPartFinished(PageLayoutCallbackArgs a) throws Exception {
                System.out.println(MessageFormat.format("Part at page {0} reflow.", a.getPageIndex() + 1));
                renderPage(a, a.getPageIndex());
            }
        
            private void notifyConversionFinished(PageLayoutCallbackArgs a) {
                System.out.println(MessageFormat.format("Document \"{0}\" converted to page format.", a.getDocument().getBuiltInDocumentProperties().getTitle()));
            }
        
            private void renderPage(PageLayoutCallbackArgs a, int pageIndex) throws Exception {
                ImageSaveOptions saveOptions = new ImageSaveOptions(SaveFormat.PNG);
                {
                    saveOptions.setPageSet(new PageSet(pageIndex));
                }
        
                try (FileOutputStream stream = new FileOutputStream(getArtifactsDir() + MessageFormat.format("PageLayoutCallback.page-{0} {1}.png", pageIndex + 1, ++mNum))) {
                    a.getDocument().save(stream, saveOptions);
                }
            }
        
            private int mNum;
        }