Postprocessors are called when Asciidoctor has converted the document to its target format and have the chance to modify the result. A Postprocessor could for example insert a custom copyright notice into the footer element of the resulting HTML document.

Postprocessors in AsciidoctorJ currently only supports String based target formats. That means it is not possible at the moment to write Postprocessors for binary formats like PDF or EPUB.

As example, a Postprocessor that adds a copyright notice would look like this:

A Postprocessor that inserts a copyright notice in the footer element
import org.asciidoctor.ast.Document;
import org.asciidoctor.extension.Postprocessor;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Element;

public class CopyrightFooterPostprocessor extends Postprocessor {    (1)

    static final String COPYRIGHT_NOTICE = "Copyright Acme, Inc.";

    public String process(Document document, String output) {

        org.jsoup.nodes.Document doc = Jsoup.parse(output, "UTF-8"); (2)

        Element contentElement = doc.getElementById("footer-text");  (3)
        if (contentElement != null) {
            contentElement.text(contentElement.ownText() + " | " + COPYRIGHT_NOTICE);
        output = doc.html();                                         (4)

        return output;
1 All Postprocessors must extend the class org.asciidoctor.extension.Postprocessor and implement the method process().
2 The processor parses the resulting HTML text using the Jsoup library. This returns the document as a data structure.
3 Find the element with the ID footer-text. This element contains the footer text, which usually contains the document generation timestamp. If this element is available its text is modified by appending the copyright notice.
4 Finally, convert the modified document back to the HTML string and let the processor return it.
Make sure header_footer option is not set to false, otherwise these will not be added to the document.