-
✓ Rendered into HTML
-
✓ Rendered into PDF
-
❏ Rendered into CSV
DSL for printable documents, that is responsible for arranging page graphical elements onto a static doc (typically a PDF, but other formats can be added in the future).
Printable Block Building Code Sample
Basic PDF
def p = new UiPrintableSpecifier().ui {
printableHeader "3.5cm", { (1)
show new UiShowSpecifier().ui {
fieldLabeled u.username_ (2)
}, BlockSpec.Width.THIRD
show new UiShowSpecifier().ui {
field """
<div style="text-align: center;">
<img style="height: 2.5cm;"
src="data:image/png;base64,${png}"/>
</div>
"""
}, BlockSpec.Width.THIRD
show new UiShowSpecifier().ui {
field 'Print Date', new Date().toString(),
Style.ALIGN_RIGHT
}, BlockSpec.Width.THIRD
}
printableBody { (3)
def a = book.author
show new UiShowSpecifier().ui {
field """<h1>${book.name}</h1>""",
Style.ALIGN_CENTER
fieldUnlabeled Style.MARKDOWN_BODY,
book.abstractTextHtml_
}, BlockSpec.Width.MAX
show new UiShowSpecifier().ui {
fieldLabeled book.isbn_
section 'Author', {
fieldLabeled book.author_, a.firstName_
fieldLabeled book.author_, a.lastName_
}
}, BlockSpec.Width.HALF
show new UiShowSpecifier().ui {
section 'Stock', {
fieldLabeled book.number_
fieldLabeled book.stock_
}
}, BlockSpec.Width.HALF
table bookstoreUiService.buildBorrowedBookTable(),
BlockSpec.Width.MAX (4)
}
printableFooter { (5)
}
}
-
printableHeader
allows to define a header that will be repeated on all pages, the height parameter is mandatory if you need a height different from 2cm. -
You can use regular show closures
-
printableBody
defines the content of the PDF on many pages. -
You can use regular table closures
-
printableFooter
allows to define the footer that will be repeated on all pages the size must not be greater than 2cm.
Printable Block DSL Symbols Hierarchy
Figure 1. Symbols hierachy diagram for Printable Block DSL