Working with Outer Document Insertion

Note
The example reads the shop data described in The Business Layer.

Inserting Documents Dynamically

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.

<<doc [document_expression]>>
Warning
A doc tag can be used almost anywhere in a template document except text-boxes and charts.

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

  • A byte array containing document data
  • A Stream instance able to read document data
  • An instance of the Document class
  • A string containing a document URI
Warning
If an expression declared within a doc tag returns a stream object, then the stream is closed by the engine as soon as a corresponding document is loaded.

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 engine treats a document being inserted as a template that can access the following data available at the scope of a corresponding doc tag:

Tip
For detailed technical information about syntax, expressions and report generation by the engine, please visit: Working with GroupDocs.Assembly Engine

Working with Outer Document Insertion

Download Templates

Get designed and outer templates from here.

The Code

import json

from groupdocs.assembly import DataSourceInfo, DocumentAssembler

with open("customer.json", encoding="utf-8") as f:
    customer = json.load(f)

assembler = DocumentAssembler()
assembler.assemble_document("inserting-document.odt", "inserting-document-report.odt", [
    DataSourceInfo(customer, "customer"),
    DataSourceInfo("outer-document.docx", "document_expression"),
])

The following sample file is used in this example: inserting-document.odt

The following sample file is used in this example: customer.json

The following sample file is used in this example: outer-document.docx

The following sample files are used in this example: quayside-bistro.png, lantern-street-cafe.png, saltmarsh-deli.png, pier-nine-kitchen.png

Binary file (ODT, 11 KB)

Download full output

Outer Document Insertion in Word Processing Formats

Download Templates

Get designed and outer templates from here.

The Code

import json

from groupdocs.assembly import DataSourceInfo, DocumentAssembler

with open("customer.json", encoding="utf-8") as f:
    customer = json.load(f)

assembler = DocumentAssembler()
assembler.assemble_document("nested-external-document.docx", "nested-external-document-report.docx", DataSourceInfo(customer, "customer"))

The following sample file is used in this example: nested-external-document.docx

The following sample file is used in this example: customer.json

The following sample file is used in this example: outer-document.docx

The following sample files are used in this example: quayside-bistro.png, lantern-street-cafe.png, saltmarsh-deli.png, pier-nine-kitchen.png

Binary file (DOCX, 16 KB)

Download full output

Outer Document Insertion in Email Formats

Download Templates

Get designed and outer templates from here.

The Code

import json
from datetime import datetime

from groupdocs.assembly import DataSourceInfo, DocumentAssembler

def parse_dates(item):
    # JSON has no dates: turn the order dates into datetime objects for the template
    for key in ("OrderDate", "ShippingDate"):
        if key in item:
            item[key] = datetime.strptime(item[key], "%Y-%m-%dT%H:%M:%S")
    return item

with open("customer.json", encoding="utf-8") as f:
    customer = json.load(f, object_hook=parse_dates)

assembler = DocumentAssembler()
assembler.assemble_document("nested-external-document.msg", "nested-external-document-report.msg", [
    DataSourceInfo(customer, "customer"),
    DataSourceInfo("Harbor Lane Provisions <orders@harborlane.example>", "sender"),
    DataSourceInfo(["Quayside Bistro <orders@quaysidebistro.example>", "jonas.weber@harborlane.example"], "recipients"),
    DataSourceInfo("amara.osei@harborlane.example", "cc"),
    DataSourceInfo("Nested external document", "subject"),
])

The following sample file is used in this example: nested-external-document.msg

The following sample file is used in this example: customer.json

The following sample file is used in this example: outer-document.docx

The following sample files are used in this example: quayside-bistro.png, lantern-street-cafe.png, saltmarsh-deli.png, pier-nine-kitchen.png

Binary file (MSG, 36 KB)

Download full output

Close
Loading

Analyzing your prompt, please hold on...

An error occurred while retrieving the results. Please refresh the page and try again.