{ "info": { "author": "Jason R. Coombs", "author_email": "jaraco@jaraco.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3" ], "description": ".. image:: https://img.shields.io/pypi/v/paradocx.svg\n :target: https://pypi.org/project/paradocx\n\n.. image:: https://img.shields.io/pypi/pyversions/paradocx.svg\n\n.. image:: https://img.shields.io/travis/yougov/paradocx/master.svg\n :target: https://travis-ci.org/yougov/paradocx\n\n.. image:: https://readthedocs.org/projects/paradocx/badge/?version=latest\n :target: https://paradocx.readthedocs.io/en/latest/?badge=latest\n\nStatus\n======\n\n``paradocx`` builds on the Open Office XML Spec provided by openpack to\nprovide interfaces for working with Microsoft Word documents in the\nOffice 2007 'docx' format.\n\n``paradocx`` is Copyright (c) 2010 by YouGov Plc.\n\nIntroduction\n============\n\nConstructing simple documents using Paradocx is fairly straightforward::\n\n >>> import paradocx\n >>> doc = paradocx.Document()\n >>> doc.paragraph('Things to do', style='Heading 1')\n \n >>> doc.paragraph('First, spend some time learning paradocx usage.')\n \n >>> doc.paragraph('Then, put together some examples')\n \n >>> doc.paragraph('Finally, put those examples in the paradocx documentation')\n \n >>> doc.save('mydoc.docx')\n\nUsing `part-edit` from `Openpack `_,\none can see the document that was constructed::\n\n > EDITOR=cat part-edit mydoc.docx/word/document.xml\n \n \n \n \n \n \n \n Things to do\n \n \n \n \n First, spend some time learning paradocx usage.\n \n \n \n \n Then, put together some examples\n \n \n \n \n Finally, put those examples in the paradocx documentation\n \n \n \n \n\n\nOne may also append tables to a document::\n\n >>> import paradocx\n >>> doc = paradocx.Document()\n >>> doc.table([['a', 'b', 'c'], ['1', '2', '3']])\n \n >>> doc.save('data.docx')\n\n\nObject Model and Advanced Usage\n===============================\n\nThe core object for a Word document is the `paradocx.package.WordPackage`. All\noperations involving constructing a Word document use some form of this class\n(the `paradocx.Document` subclasses `WordPackage`).\n\nSee `the source\n`_\nfor a trivial example of usage.\n\nEach `WordPackage` is a container of a number of related parts. The parts\nrepresent the various aspects of a document. The following example, adapted\nfrom real-world usage, shows how\none might construct a more complex structure from a series of XML templates\non the file system::\n\n import string\n\n def load_template(name, **params):\n with open(name) as f:\n template = string.Template(f.read())\n return template.substitute(params)\n\n doc = WordPackage()\n doc.start_part.data = load_template('document.xml', text=\"Hello world\")\n\n # styles\n styles = StylesPart(doc)\n doc.add(styles)\n styles.data = load_template('styles.xml')\n doc.start_part.relate(styles)\n\n title = \"My initial document\"\n\n # Header for cover page\n cover_header = HeaderPart(doc, '/word/cover-header.xml')\n doc.add(cover_header)\n cover_header.data = load_template('cover-header.xml', title=title)\n doc.start_part.relate(cover_header, 'PmxHdr0')\n\n # body header\n header = HeaderPart(doc)\n doc.add(header)\n header.data = load_template('header.xml', title=title)\n doc.start_part.relate(header, 'PmxHdr1')\n\n # body footer\n footer = FooterPart(doc)\n doc.add(footer)\n footer.data = load_template('footer.xml',\n date=unicode(datetime.datetime.now()))\n doc.start_part.relate(footer, 'PmxFtr1')\n\n # image1\n image1 = ImagePart(doc, '/word/media/logo.png')\n doc.add(image1, override=False)\n with open('my_logo.png', 'rb') as logo_data:\n image1.data = logo_data.read()\n doc.start_part.relate(image1, 'Logo1')\n header.relate(image1, 'Logo1')\n # cover page uses the logo, so relate it\n cover_header.relate(image1, 'Logo1')\n\n # settings\n settings = SettingsPart(doc)\n doc.add(settings)\n settings.data = load_template('settings.xml')\n doc.start_part.relate(settings)\n\n doc.save(...)\n\nFor more details on constructing the XML data for the underlying parts,\nconsider using a reference document and the OpenPack tools for inspecting\nthe document for the necessary elements, or consider reading some of the\nresources at the `Microsoft Dev Center\n`_\nor read up on the `standards developed around Office Open XML\n`_.\n\nTesting\n=======\n\nParadocx uses `tox `_ for\nrunning the tests. To test, simply invoke ``tox`` on the repo.\n\n\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/yougov/paradocx", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "paradocx", "package_url": "https://pypi.org/project/paradocx/", "platform": "", "project_url": "https://pypi.org/project/paradocx/", "project_urls": { "Homepage": "https://github.com/yougov/paradocx" }, "release_url": "https://pypi.org/project/paradocx/1.2.1/", "requires_dist": [ "openpack (<2dev,>=1.1)", "six", "sphinx; extra == 'docs'", "jaraco.packaging (>=3.2); extra == 'docs'", "rst.linker (>=1.9); extra == 'docs'", "pytest (>=2.8); extra == 'testing'", "pytest-sugar (>=0.9.1); extra == 'testing'", "collective.checkdocs; extra == 'testing'", "pytest-flake8; extra == 'testing'" ], "requires_python": ">=2.7", "summary": "paradocx", "version": "1.2.1" }, "last_serial": 3635439, "releases": { "0.3.1": [ { "comment_text": "", "digests": { "md5": "d2fb835a0c0a3cb1530b4e1f243fce77", "sha256": "34e7bff19893d9a4f2988289458aff4e74e81ca8b801f59fff467e42cfe50bb7" }, "downloads": -1, "filename": "paradocx-0.3.1.zip", "has_sig": false, "md5_digest": "d2fb835a0c0a3cb1530b4e1f243fce77", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22340, "upload_time": "2010-08-02T16:15:11", "url": "https://files.pythonhosted.org/packages/e6/2a/ff4a9f83fe53f65333dee0091a697d7241cf9c4b5d756300df8f1293630c/paradocx-0.3.1.zip" } ], "1.0": [ { "comment_text": "", "digests": { "md5": "ae4d82d68f4ad88cd935615037568aec", "sha256": "9d953bb8524f55ea8ac5f901a2ce2272a9307e17ded6b0e602c722c20e91ae66" }, "downloads": -1, "filename": "paradocx-1.0.zip", "has_sig": false, "md5_digest": "ae4d82d68f4ad88cd935615037568aec", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24432, "upload_time": "2011-09-23T22:30:20", "url": "https://files.pythonhosted.org/packages/cc/6e/01ab148c72d41ac3d1d045da94218ddbe3d382868aa75f8a1a3cb396f24e/paradocx-1.0.zip" } ], "1.1": [ { "comment_text": "", "digests": { "md5": "074d649721c341e487fa7ab2bbe2a7e0", "sha256": "4e5f179489624affae20d4dbbde2e0a35f72c8eed8e727c751e20039fb48d48c" }, "downloads": -1, "filename": "paradocx-1.1.zip", "has_sig": false, "md5_digest": "074d649721c341e487fa7ab2bbe2a7e0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30680, "upload_time": "2014-02-11T23:30:09", "url": "https://files.pythonhosted.org/packages/ee/2f/6fac4bef7bbeefabb641f556b587d8a23879114568d95df0a0c79ca8f0b7/paradocx-1.1.zip" } ], "1.2": [ { "comment_text": "", "digests": { "md5": "c5ebc4470e08a60ec0c5945984ac247f", "sha256": "86d61377947707d42ecee5910e6a905849a8cfda5cc42649b464373b807f3d7d" }, "downloads": -1, "filename": "paradocx-1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c5ebc4470e08a60ec0c5945984ac247f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 13817, "upload_time": "2018-03-03T18:34:59", "url": "https://files.pythonhosted.org/packages/b8/a5/33720e8482a17f7063c2547e7ff95b2b64c444f5ba0413e7c65ae168cca3/paradocx-1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b886bdfa87fc4fc95c0cb2e0a9aef6c2", "sha256": "bc315d4ad1fc3e9f005eac32a3cc90c64b2ffb2af8633877346ab1af31967824" }, "downloads": -1, "filename": "paradocx-1.2.tar.gz", "has_sig": false, "md5_digest": "b886bdfa87fc4fc95c0cb2e0a9aef6c2", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 27297, "upload_time": "2018-03-03T18:35:01", "url": "https://files.pythonhosted.org/packages/7b/4d/13addab8c31ef76d768364ae170a4f7bd74dd02751f1345c9c7a4bb22756/paradocx-1.2.tar.gz" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "f9f9828ba623fd9ea9dcc160bc44816c", "sha256": "e71b037e31d0ed350b52e43140f562cb1bb1f8869378b9a28735d1f954a03c81" }, "downloads": -1, "filename": "paradocx-1.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f9f9828ba623fd9ea9dcc160bc44816c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 13650, "upload_time": "2018-03-03T18:48:54", "url": "https://files.pythonhosted.org/packages/b2/b5/7912cfe4bb43cb29ca9e17c337fa63b6a6c55836d556b100224dd8254f6b/paradocx-1.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d29fb998b63d7f04b68dda044271020a", "sha256": "88819cb9d4a99f0b4b36caab7fe2cad0ea04686ef002170539b9915977b203cd" }, "downloads": -1, "filename": "paradocx-1.2.1.tar.gz", "has_sig": false, "md5_digest": "d29fb998b63d7f04b68dda044271020a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 27119, "upload_time": "2018-03-03T18:48:55", "url": "https://files.pythonhosted.org/packages/f8/64/d3a7b023feb409c9a19e47e96a18562a1cf069adf32838556ef615a260d2/paradocx-1.2.1.tar.gz" } ], "1.2b1": [ { "comment_text": "", "digests": { "md5": "e17136722df9c39e6392f16ad90c0530", "sha256": "564849487b8bc8a3869834d893f95f6a4fc51f224b9204f1ea697069467b00fb" }, "downloads": -1, "filename": "paradocx-1.2b1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e17136722df9c39e6392f16ad90c0530", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 13855, "upload_time": "2018-03-03T18:17:51", "url": "https://files.pythonhosted.org/packages/0f/ec/9c90d144531f411c84e90013eb81a8e8be7babf6d659f1fd6dea21831e35/paradocx-1.2b1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4d7055976d50e6290ce7fb0acf30e466", "sha256": "8642ad67e0415d8edd4b2d9b5fa3d6b9cd307b3149c5e1cb71160eb589557840" }, "downloads": -1, "filename": "paradocx-1.2b1.tar.gz", "has_sig": false, "md5_digest": "4d7055976d50e6290ce7fb0acf30e466", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 27338, "upload_time": "2018-03-03T18:17:52", "url": "https://files.pythonhosted.org/packages/9e/16/c86c986ff868350eaa3b56eca515c7176b831930eaa719c547262ede7f05/paradocx-1.2b1.tar.gz" } ], "1.2b2": [ { "comment_text": "", "digests": { "md5": "947152669e240b5cfcdc667e4cfc9120", "sha256": "32b8be15ef50ff6c01282fb5518e50430740c797875e4a745d7d85ff8622675c" }, "downloads": -1, "filename": "paradocx-1.2b2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "947152669e240b5cfcdc667e4cfc9120", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 13854, "upload_time": "2018-03-03T18:28:27", "url": "https://files.pythonhosted.org/packages/88/50/65556bb3a469f3807c5b1fbf999b8428f7f3f140cc5b4f18814ce61781e6/paradocx-1.2b2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d37da0b96e29c9eb305c4d655e2a9c16", "sha256": "d715001afb1d4cb2d7eb9988e58e242a7ebd4735316e9fc72e35784f164a36ba" }, "downloads": -1, "filename": "paradocx-1.2b2.tar.gz", "has_sig": false, "md5_digest": "d37da0b96e29c9eb305c4d655e2a9c16", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 27364, "upload_time": "2018-03-03T18:28:28", "url": "https://files.pythonhosted.org/packages/3c/13/f848456b8a28901c8ef7b42f4f07003081475999516ca7dcf1b14ef1bca4/paradocx-1.2b2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "f9f9828ba623fd9ea9dcc160bc44816c", "sha256": "e71b037e31d0ed350b52e43140f562cb1bb1f8869378b9a28735d1f954a03c81" }, "downloads": -1, "filename": "paradocx-1.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f9f9828ba623fd9ea9dcc160bc44816c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 13650, "upload_time": "2018-03-03T18:48:54", "url": "https://files.pythonhosted.org/packages/b2/b5/7912cfe4bb43cb29ca9e17c337fa63b6a6c55836d556b100224dd8254f6b/paradocx-1.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d29fb998b63d7f04b68dda044271020a", "sha256": "88819cb9d4a99f0b4b36caab7fe2cad0ea04686ef002170539b9915977b203cd" }, "downloads": -1, "filename": "paradocx-1.2.1.tar.gz", "has_sig": false, "md5_digest": "d29fb998b63d7f04b68dda044271020a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 27119, "upload_time": "2018-03-03T18:48:55", "url": "https://files.pythonhosted.org/packages/f8/64/d3a7b023feb409c9a19e47e96a18562a1cf069adf32838556ef615a260d2/paradocx-1.2.1.tar.gz" } ] }