← Back to Skills Marketplace
killgfat

Docxtpl

by KGTAF · GitHub ↗ · v0.0.1 · MIT-0
cross-platform ⚠ suspicious
33
Downloads
0
Stars
0
Active Installs
1
Versions
Install in OpenClaw
/install docxtpl
Description
Generate Word (.docx) documents from Jinja2 templates. Uses python-docx (read/write) + Jinja2 (template engine). Design templates in Microsoft Word, then pop...
README (SKILL.md)

docxtpl Skill

Use a .docx file as a Jinja2 template, then fill it with Python data at runtime.

Installation

pip install docxtpl
# For subdocuments support:
pip install "docxtpl[subdoc]"

Quick Start

from docxtpl import DocxTemplate

doc = DocxTemplate("my_template.docx")
context = {"name": "Alice", "department": "Cardiology"}
doc.render(context)
doc.save("output.docx")

Workflow:

  1. Design a .docx in Word with Jinja2 tags ({{ var }}, {%p if ... %})
  2. Load the template with DocxTemplate(path)
  3. Build a Python context dict
  4. Call doc.render(context) then doc.save(path)

Tag Reference

Tag Scope Purpose
{{ var }} inline string Display a variable
{{r var }} inline styled Display a RichText object
{%p ... %} paragraph Control full paragraphs (if/for)
{%tr ... %} table row Control table rows
{%tc ... %} table column Control table columns
{%r ... %} run Control styled runs
{%p if cond %} / {%p endif %} paragraph Conditional paragraph
{%p for x in list %} / {%p endfor %} paragraph Loop over paragraphs
{% colspan N %} table cell Horizontal cell spanning
{% hm %} table cell Horizontal merge in for-loop
{% vm %} table cell Vertical merge in for-loop
{% cellbg color %} table cell Set cell background color
{ #p comment #} paragraph Comment
{%- -%} text merge Merge split lines
{ _%, %_ }, { _{, }_ } escape Display literal {%, %}, {{, }}

Important: Always put spaces around delimiters: {{ var }} not {{var}}.

CLI Usage

python -m docxtpl template.docx data.json output.docx
python -m docxtpl -o template.docx data.json output.docx  # overwrite

Key Classes

  • DocxTemplate(path) — Load a .docx template. Methods: .render(context), .save(path), .get_undeclared_template_variables(context=None)
  • RichText(text, ...) / R(text) — Styled text with .add() for multi-style concatenation
  • InlineImage(tpl, img_path, width, height) — Dynamic image insertion (use Mm(), Inches(), or Pt() for dimensions)
  • Listing(text) — Escaped text preserving \ /\a/\f without losing style
  • RichTextParagraph() / RP() — Paragraph-level properties (use with {{p var }})
  • Subdoctpl.new_subdoc(path) to merge existing .docx files

Media Replacement

For headers/footers where dynamic tags aren't supported:

tpl.replace_pic("dummy.jpg", "real.jpg")      # pictures
tpl.replace_media("dummy.mp3", "real.mp3")     # any media
tpl.replace_embedded("dummy.docx", "real.docx") # embedded docs
tpl.replace_zipname("path/in/zip.xlsx", "real.xlsx") # raw zip entry

Escaping

By default, no auto-escaping. Use one of:

  • RichText for safe content
  • {{ var|e }} in template
  • escape("text") in Python context
  • tpl.render(context, autoescape=True)

Tips

  • \ → newline, \a → new paragraph, → tab, \f → page break (in strings and RichText)
  • To render a template multiple times, call tpl.reset_replacements() before each render() if using media replacements
  • Pass a custom jinja_env to render() for custom Jinja2 filters
  • Preview get_undeclared_template_variables() to warn about missing keys

📖 Full API reference: references/official-docs.md

CLI Scripts

Convenience scripts in scripts/ (use {baseDir}/scripts/ path):

# Render with inline key=value pairs
python scripts/docxtpl-render.py template.docx out.docx name="Alice" age="30"

# Render from JSON file
python scripts/docxtpl-render-json.py template.docx data.json out.docx

# Render from JSON string
python scripts/docxtpl-render.py template.docx out.docx --json '{"name":"Bob"}'

# List missing template variables
python scripts/docxtpl-list-vars.py template.docx

# Batch render from CSV (one .docx per row, named by id column)
python scripts/docxtpl-render-batch.py patients.csv ./reports/ template.docx \
  --id-column patient_id --suffix _report --summary
Usage Guidance
Install only if you are comfortable with a local docx templating tool that reads templates/data and writes output files. Be especially careful with the batch CSV renderer: use trusted CSV files, avoid ID values containing slashes or '..', and prefer reviewing or fixing the script so generated files cannot escape the chosen output directory.
Capability Analysis
Type: OpenClaw Skill Name: docxtpl Version: 0.0.1 The docxtpl skill bundle is a legitimate wrapper for the python-docx-template library, providing tools to generate Word documents from Jinja2 templates. The included Python scripts (e.g., docxtpl-render.py, docxtpl-render-batch.py) and documentation (SKILL.md) are well-structured, follow standard practices for CLI utilities, and show no signs of malicious intent, data exfiltration, or prompt injection.
Capability Assessment
Purpose & Capability
The skill coherently provides docx templating helpers using docxtpl/Jinja2 and local file reads/writes, which matches the stated purpose.
Instruction Scope
The instructions disclose Jinja2 rendering and the lack of default auto-escaping; users should treat templates and input data as document-generation logic, not plain text.
Install Mechanism
The skill tells users to install the external PyPI package docxtpl, which is expected for this purpose, but the install is unpinned and there is no separate install spec.
Credentials
The batch renderer writes files based on a CSV column without constraining the resulting path to the requested output directory.
Persistence & Privilege
No credentials, background services, persistent agents, or elevated privileges are shown; persistence is limited to user-requested output .docx files.
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install docxtpl
  3. After installation, invoke the skill by name or use /docxtpl
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v0.0.1
Initial release of docxtpl skill. - Generate Word (.docx) documents from Jinja2 templates using Python. - Supports dynamic variable rendering, conditional logic, loops, and styling in Word templates. - Provides CLI tools and Python API for rendering documents with data from Python, JSON, or CSV. - Includes utilities for image/media substitution and listing missing template variables. - Full tag and class reference provided for template design and advanced use cases.
Metadata
Slug docxtpl
Version 0.0.1
License MIT-0
All-time Installs 0
Active Installs 0
Total Versions 1
Frequently Asked Questions

What is Docxtpl?

Generate Word (.docx) documents from Jinja2 templates. Uses python-docx (read/write) + Jinja2 (template engine). Design templates in Microsoft Word, then pop... It is an AI Agent Skill for Claude Code / OpenClaw, with 33 downloads so far.

How do I install Docxtpl?

Run "/install docxtpl" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.

Is Docxtpl free?

Yes, Docxtpl is completely free, licensed under MIT-0. You can download, install and use it at no cost.

Which platforms does Docxtpl support?

Docxtpl is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).

Who created Docxtpl?

It is built and maintained by KGTAF (@killgfat); the current version is v0.0.1.

💬 Comments