Py2Docx is a python module to write .docx documents (>= Microsoft Word 2007).
- Image have two optional arguments: width and height;
- FIX: Image read and write problems.
$ pip install py2docx
# coding: utf-8
from py2docx.docx import Docx
from py2docx.elements import Block
from py2docx.elements.text import InlineText, Break, BlockText
from py2docx.elements.image import Image
from py2docx.elements.table import Table, Cell
doc = Docx()
t1 = InlineText("An Inline Text", bold=True, italic=True,
underline={'style': 'solid', 'color': '#4433ff'},
color="#FF0000")
bl = Block()
bl.append(t1)
bl2 = Block(align='center')
bl2.append(t1)
t = Table(width="100%", padding='5pt', border={'left': {'style': 'dashed'}})
c1 = Cell()
c1.append(bl)
c2 = Cell([bl])
c3 = Cell(bl2, valign='top', border={'left': {'size': '1pt', 'color': '#33ddff'}})
t.add_row([c1, c2])
t.add_row([c1, c3])
bl3 = Block([InlineText("Inline Text "),
InlineText("Bold Here", bold=True)])
i = Image("Pictures/into_the_wild.jpg", document=doc,
align='center', width='50%', height='50%')
doc.append(bl)
doc.append(t)
doc.append(Block(Break()))
doc.append(i)
doc.append(BlockText("This is a Block Text"))
doc.append(Block(InlineText("This is a Block Text")))
doc.append(bl3)
doc.append(BlockText(u"Arial Test", font='Arial', size=20))
doc.save("./py2docx.docx")
from py2docx.docx import Docx
Create a document
Parameter | Description |
---|---|
elem | An Image, Block or Table to put in the document. |
doc = Docx()
bl = Block()
doc.append(bl)
Parameter | Description |
---|---|
path | The path that the document are going to be saved. |
doc = Docx()
doc.save("./example.docx")
from py2docx.docx.elements import Block
Block elements is almost the same like "<div>" HTML element.
Parameter | Description |
---|---|
initial | One element or a list of elements to put inside the block. |
align | Horizontal align. Options are: 'left', 'right', 'center' or 'justify'. |
text = InlineText("Hello World!")
block = Block(text, align='center')
text = InlineText("Hello World!")
block = Block()
block.append(text)
Parameter | Description |
---|---|
elem | Any element to put inside the block. |
from py2docx.elements.image import Image
The accepted types are: png, jpg, gif, jpeg.
Parameters | Description |
---|---|
path | A string with the image's path. |
document | The instance of the document (Docx()) |
align | Horizontal Align. Values should be: 'left', 'center' or 'right' |
width | Width in percentage (string format: '90%'). |
height | Heigth in percentage (string format: '50%'). |
doc = Docx()
Image("/Pictures/image.png", document=doc,
align='right', width='80%', heigth='40%')
from py2docx.elements.table import Table
Parameters | Description |
---|---|
padding | Padding for all cells. Should be in one of these units: cm (centimeters), in (inches) or pt (points). The numbers should be in the W3C CSS Format. |
width | Width of the table. Should be in one of these units: % (percentage), cm (centimeters), in (inches) or pt (points). |
border | A dict with the specifications. Should be in this format: {'[SIDE]': {'color': '#[HEX]', 'size': '[INT]pt', 'style': '[dotted,dashed,solid,double]'}. The maximum size of the border is 12pt, minimum is 0.5pt. |
Table(width='100%', padding='2cm', border={'left': {'color': '#FF0000', 'size': '2pt', 'style': 'dotted'},
'bottom': {'color': '#FF0000', 'size': '2pt',' style': 'dashed'},
'top': {'color': '#FFFFFF', 'size': '3pt', 'style': 'solid'},
'right': {'color': '#000000', 'size': '3pt', 'style': 'double'}})
Parameters | Description |
---|---|
cells | A list of Cells to put on a row. |
t = Table(width='100%')
t.add_row([Cell(), Cell()])
from py2docx.elements.table import Cell
init(initial=None, bgcolor=None, padding=None, width=None, valign=None, nowrap=None, border=None, colspan=1)
Parameters | Description |
---|---|
initial | One element or a list of elements to put inside the cell. |
bgcolor | Background color of the cell, in hexadecimal '#00FF66'. |
padding | Padding for cell. Should be in one of these units: cm (centimeters), in (inches) or pt (points). The numbers should be in the W3C CSS Format. |
width | Width of the cell. Should be in one of these units: % (percentage), cm (centimeters), in (inches) or pt (points). |
valign | Vertical Align. Options are: 'top', 'center', 'bottom'. |
nowrap | True or False. It does not work with width. |
border | A dict with the specifications. Should be in this format: {'[SIDE]': {'color': '#[HEX]', 'size': '[INT]pt', 'style': '[dotted,dashed,solid,double]'}. The maximum size of the border is 12pt, minimum is 0.5pt. |
colspan | An int with the number of cells. |
Cell([Image("path/filename.ext"), BlockText("Hello World!")], bgcolor='#3377FF', padding='5cm 10cm',
width='5cm', valign='center', border={'bottom': {'color': '#FF0000', 'size': '2pt', 'style': 'dashed'}, colspan=2)
text = InlineText("Hello World!")
c = Cell()
c.append(text)
Parameter | Description |
---|---|
elem | A Cell, Block, BlockText or Image, to put inside the cell. |
from py2docx.elements.text import InlineText
You should put this in a Block. This is like a "<span>" HTML element.
init(text, bold=None, italic=None, underline=None, uppercase=None, color=None, font=None, size=None)
Parameters | Description |
---|---|
text | A string with words. |
bold | True or False. |
italic | True or False. |
underline | A dict with properties: {'style': '[dotted/dashed/solid/double]', 'color': '#[HEX]'}. |
uppercase | True or False. |
color | Hexadecimal color. |
font | Should be 'Cambria', 'Times New Roman', 'Arial' or 'Calibri'. |
size | An INT of font's size in point. |
InlineText("Hello World!", bold=True, italic=True,
underline={'style': 'solid', 'color': '#4433ff'},
uppercase=True, color="#FF0000", font="Times New Roman",
size=14)
from py2docx.elements.text import Break
The same as "<br\ >" HTML element.
hello = InlineText("Hello")
world = InlineText("World", bold=True)
Block([hello, Break(), world])
from py2docx.elements.text import BlockText
The same thing as:
Block(InlineText("Hello World"))
init(text, bold=None, italic=None, underline=None, uppercase=None, color=None, font=None, size=None)
Parameters | Description |
---|---|
text | A string with words. |
bold | True or False. |
italic | True or False. |
underline | A dict with properties: {'style': '[dotted/dashed/solid/double]', 'color': '#[HEX]'}. |
uppercase | True or False. |
color | Hexadecimal color. |
font | Should be 'Cambria', 'Times New Roman', 'Arial' or 'Calibri'. |
size | An INT of font's size in point. |
BlockText("Hello World!", bold=True, italic=True,
underline={'style': 'solid', 'color': '#4433ff'},
uppercase=True, color="#FF0000", font="Times New Roman",
size=14)