Inserting Documents Dynamically

Note
This feature is supported by version 20.3 or greater.
Note
The code uses some of the objects defined in The Business Layer.

Warning
Dynamic insertion of documents from Base64-encoded bytes is available for file formats where dynamic document insertion is available for Word Processing documents and emails with HTML and RTF bodies only.

You can insert contents of outer documents to your reports dynamically using doc tags. A doc tag denotes a placeholder within a template for a document to be inserted during run time.

Syntax of a doc tag is defined as follows:

<<doc [document_expression]>>

And simply call the assembler method to generate report like following code snippets:

Warning
A doc tag can be used almost anywhere in a template document except textboxes and charts.

An expression declared within a doc tag is used by the assembler to load a document to be inserted during runtime. The expression must return a value of one of the following types:

  • A byte array containing document data
  • An InputStream instance able to read document data
  • An instance of the Document class
  • A string containing a document URI, path, or Base64-encoded document data

While building a report, an expression declared within a doc tag is evaluated and its result is used to load a document which content replaces the doc tag then.

Warning
If an expression declared within a doc tag returns a stream object, then the stream is closed by the assembler as soon as a corresponding document is loaded.

By default, while inserting content of an outer document, the engine applies corresponding styles of a template document. This makes content of a result document look more consistent. However, you can keep source formatting for content being inserted by using a sourceStyles switch as shown in the following snippet:

<<doc [document_expression] -sourceStyles>>

By default, a document being inserted is not checked against template syntax and is not populated with data. However, you can enable this by using a build switch as follows.

<<doc [document_expression] -build>>

When a build switch is used, the assembler treats a document being inserted as a template that can access the following data available at the scope of a corresponding doc tag: