{ "info": { "author": "Jamie Hardt", "author_email": "", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Console", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3.7", "Topic :: Office/Business", "Topic :: Printing" ], "description": "# zipreport\nVery lightweight module for creating PDF reports with Python\n\n## Motivation\n\nThis library is meant to be a drop-in replacement for report generation I was doing with Filemaker Pro and\noperates under about the same principles as print layout on Filemaker Pro. You, the client, have a list of\nordered records, which can be any subscriptable thing but in my example are `dicts`, and these are fed into\na `Document` object you create and customize which establishes how fields in each record are formatted and \nlaid out on the page, the formatting of page headers and footers, and summary headers and footers.\n\n## Example\n\nIn the [example](test/test_functional.py) you can see how a basic report is customized. All formatting is \ncontained in a `Document` object, draws `Part` objects in various parts of the document based on certain \nconditions. The `page_header` and `page_footer` parts are drawn at the top and bottom of each page.\n\nEach record to be printed is displayed in a `content_part`:\n\n```python\ncontent_part = Part(\n elements=[Element(x=0.,\n y=0.,\n width=72.,\n height=18.,\n content=FormattedText(\"N:$name\", font_family='Futura', font_size=9.)),\n\n Element(x=96.,\n y=0,\n width=72.*4.,\n height=4.*72.,\n can_shrink=True,\n content=FormattedText(\"$comment\", font_family='Futura', font_size=9.)),\n Element(x=72. * 6, y=0., width=36, height=18,\n content=FormattedText(\"$rn\", font_family='Futura', font_size=9.,\n alignment='r'))],\n minimum_height=72.\n)\n```\n\nA `Part` contains a list of `Element` objects which define a rectangle (positioned relative to the origin, \nthe upper-left corner of the parent `Part`), and each element has a corresponding `Content`. `Content` \nobjects contain specific style and content. The `FormattedText` content has a format string which can \nsubstitute values from a content object. For example above, the first element reades the 'name' key from\nthe content object and substitutes it into the format string.\n\n\n## Under Contruction\n\nThis project is still under contruction but functions on a basic level.\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/iluvcapra/zipreport", "keywords": "reports pdf cairo pango", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "zipreport", "package_url": "https://pypi.org/project/zipreport/", "platform": "", "project_url": "https://pypi.org/project/zipreport/", "project_urls": { "Homepage": "https://github.com/iluvcapra/zipreport", "Issues": "https://github.com/iluvcapra/zipreport/issues", "Source": "https://github.com/iluvcapra/zipreport" }, "release_url": "https://pypi.org/project/zipreport/0.1/", "requires_dist": [ "pangocffi", "cairocffi", "pangocairocffi" ], "requires_python": "", "summary": "Very lightweight PDF report generation", "version": "0.1" }, "last_serial": 5997456, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "dec918f78d15ea81bdcf1df230a27fc9", "sha256": "004c2eedb091a68591ff22e84a790dd0e035007350c5058c70a215c8109fc65f" }, "downloads": -1, "filename": "zipreport-0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "dec918f78d15ea81bdcf1df230a27fc9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6358, "upload_time": "2019-10-18T20:47:06", "url": "https://files.pythonhosted.org/packages/e9/0a/4f20f9477d2127d743f41e229841848402588f589aef0cbba5900abbc732/zipreport-0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "08881a7a9dd59c734df4d7ad4827a2b7", "sha256": "a1be1f9446613e0a1c9747328ed65eee62e2f94b182c2110e5823938913e8fb8" }, "downloads": -1, "filename": "zipreport-0.1.tar.gz", "has_sig": false, "md5_digest": "08881a7a9dd59c734df4d7ad4827a2b7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7117, "upload_time": "2019-10-18T20:47:09", "url": "https://files.pythonhosted.org/packages/8d/7f/ccd3b2e2e7a799678265aa3839a5a31e70ea9b54741fa4411ddd8e0a5514/zipreport-0.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "dec918f78d15ea81bdcf1df230a27fc9", "sha256": "004c2eedb091a68591ff22e84a790dd0e035007350c5058c70a215c8109fc65f" }, "downloads": -1, "filename": "zipreport-0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "dec918f78d15ea81bdcf1df230a27fc9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6358, "upload_time": "2019-10-18T20:47:06", "url": "https://files.pythonhosted.org/packages/e9/0a/4f20f9477d2127d743f41e229841848402588f589aef0cbba5900abbc732/zipreport-0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "08881a7a9dd59c734df4d7ad4827a2b7", "sha256": "a1be1f9446613e0a1c9747328ed65eee62e2f94b182c2110e5823938913e8fb8" }, "downloads": -1, "filename": "zipreport-0.1.tar.gz", "has_sig": false, "md5_digest": "08881a7a9dd59c734df4d7ad4827a2b7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7117, "upload_time": "2019-10-18T20:47:09", "url": "https://files.pythonhosted.org/packages/8d/7f/ccd3b2e2e7a799678265aa3839a5a31e70ea9b54741fa4411ddd8e0a5514/zipreport-0.1.tar.gz" } ] }