This project provides a Python interface for Cloud Office Print.


To install the Cloud Office Print Python package, you can type in your terminal:
pip install cloudofficeprint


  1. Create a template (docx, xlsx, pptx, HTML, md, txt, csv), for the possible tags, click here.
  2. Create the input data with this Python SDK
  3. Send template and data to a Cloud Office Print server and save the response to a file with this Python SDK

To see the JSON-data that is sent to the Cloud Office Print server, you can turn on verbose-mode by setting the argument cop_verbose to True when creating a PrintJob.

Quickstart: Hello World example

Template (docx)


The data can be generated by the Python SDK:

import cloudofficeprint as cop

# Main object that holds the data
collection = cop.elements.ElementCollection()

# Create the title element and add it to the element collection
title = cop.elements.Property(
    value='Hello World!'

# Create the text element and add it to the element collection
text = cop.elements.Property(
    value='This is an example created with the Cloud Office Print Python SDK'

Cloud Office Print server

The template and the data need to be sent to a Cloud Office Print server that merges both. This can be done by setting up the configuration for a Cloud Office Print server and passing it to the print job instance. You can get your API key by signing up at

API_KEY = "YOUR_API_KEY"  # Replace by your own API key

# Add server
server = cop.config.Server(

# Create print job
printjob = cop.PrintJob(

# Execute print job and save response to file
response = printjob.execute()

where PATH_TO_TEMPLATE_FILE is the (relative) path to your template file (e.g. ./data/template.docx) and PATH_OF_OUTPUT_FILE is the (relative) path where you want the output file to be stored (e.g. ./output/output_file).


Other examples

Going through the other examples is also recommended as this gives you a good idea on how to use the SDK. The current examples are:

  • (the most extensive example)

The examples can be found in the parent directory of the project on Github. Each example also has its own folder containing the used templates, the generated output files and a markdown file with explanation.


The documentation for this SDK can be found inside the docs/cloudofficeprint/ folder on Github. Open the index.html file in a browser.

The documentation for Cloud Office Print can be found at the Cloud Office Print docs.



To generate the documentation, you can run the following command (after installing pdoc: pip install pdoc3) in the project directory:

pdoc --html --force --output-dir docs/ cloudofficeprint/

pdoc is used for documentation generation.
Things to keep in mind when writing docs (some of these are non-standard):

  • Docstrings are inherited from super().
  • Instance variables (attributes) can have docstrings, start the docstring on the line underneath the attribute
  • For @property properties, the setter’s documentation is ignored. Make sure everything is in the getter.
  • You can use markdown in the docstrings, along with the generated google-style docs.
    • Doing something like `ClassName` (with backticks, which are generally for inline code) makes pdoc look for the reference and try to hyperlink it in the generated docs.
      This works with any object, useful methods or instance variables of a class too.


There are tests for all classes and methods. The tests check if the JSON that needs to be sent to the server is as expected. To run the tests:

  1. Open a terminal in the parent directory of this project, which can be found on Github.
  2. Type in the terminal:
  3. The tests succeeded if nothing is printed to the terminal

Useful Visual Studio Code extensions

  • njpwerner.autodocstring: Python docstring generator, uses Google-style docs by default.


To publish this project to PyPI, follow these steps:

  1. Create an account on PyPI.
  2. Install the Twine utility by typing in your terminal:
    pip install twine
  3. In the parent directory, type in your terminal:
    python sdist bdist_wheel
  4. Check if the building succeeded (PASSED):
    twine check dist/*
  5. Upload to PyPI:
    twine upload dist/*

More information can be found here.


View Github