Package: openxmllib-py3
openxmllib-py3This is a fork of [openxmllib](https://github.com/glenfant/openxmllib)
with Python3 support.openxmllib is a set of tools that deals with the new ECMA 376 office file
formats known as OpenXML.http://www.ecma-international.org/publications/standards/Ecma-376.htmOpenXML format is used by Microsoft Office 2007 and later. Apple iWork
and OpenOffice have filters to use this format too, starting from iWork’08
and OO version 2.2.FeaturesTested featuresExtract words from a document for indexing purpose.Get metadata from a documentAdd OpenXml mimetypes to standardmimetypesmodule.Extract cover thumbnail image, if the document contains itPlanned featuresTransform a document to HTMLPublic APIThese examples say all:>>> import openxmllib
>>> doc = openxmllib.openXmlDocument(path='office.docx')
>>> # Raises a ValueError on not supported office files.
>>> doc.mimeType
'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
>>> doc.coreProperties # Keys may depend on application
{'title': u'blah...', u'creator': u'John Doe', ...}
>>> doc.extendedProperties # Keys may depend on application
{'Words': u'312', 'Application': u'Your favorite word processor', ...}
>>> doc.customProperties # May return an empty mapping
{'My property': u'My value', ...}
>>> doc.allProperties # Merges core+extended+custom properties (see above)
{...}
>>> doc.indexableText(include_properties=False)
u'all the words of that document body'
>>> doc.indexableText(include_properties=True)
u'all the words of that document body and all properties values'
>>> doc.documentCover()
('jpg', <open file '/var/folders/.../docProps/thumbnail.jpeg', mode 'rb' at 0x1af300>)Standardmimetypespackage extensions>>> import mimetypes
>>> mimetypes.guess_type('somedoc.docx')
('application/vnd.openxmlformats-officedocument.wordprocessingml.document', None)
>>> mimetypes.guess_type('somecalc.xlsx')
('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', None)
>>> mimetypes.guess_type('someslides.pptx')
('application/vnd.openxmlformats-officedocument.presentationml.presentation', None)Document factory signatures:>>> # We have the path for the office file
>>> doc = openxmllib.openXmlDocument(path='office.docx')
>>> # We have a file object for the office file
>>> fh = open('office.docx', 'rb')
>>> doc = openxmllib.openXmlDocument(file_='office.docx')
>>> # We have the URL for the office file
>>> doc = openxmllib.openXmlDocument(url='http://domain.tld/office.docx')
>>> # Xe have the raw data of the office file
>>> import mimetypes
>>> docx_mimetype = mimetypes.guess_type('office.docx')
>>> body = open('office.docx', 'rb').read()
>>> doc = open(data=body, mime_type=docx_mimetype)Note that if you’re not running a Python application, you may get the indexable
text from a document with theopenxmlinfo.pyconsole utility. Just type:$ openxmlinfo --helpCopying and LicenseCopyright (c) 2008 Gilles LenfantThis software is subject to the provisions of the GNU General Public
License, Version 2.0 (GPL).  A copy of the GPL should accompany this
distribution.  THIS SOFTWARE IS PROVIDED “AS IS” AND ANY AND ALL
EXPRESS OR IMPLIED WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY,
AGAINST INFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSEMore details in theCOPYINGfile included in this package.StatusStarting from version 2.0, this package is tested using Python 3.8.x on Linux.
If dependencies can be met, it will most likely work on other environments as well.InstallationUsing the usual setuptools command:$ pip install openxmllib-py3Note that this will install the excellentlxmlegg too if not already done.From now you can “import openxmllib” in your Python apps and use the
“openxmlinfo” command line utility.GotchasBe aware that most text data coming from the various openxmllib
services might be us-ascii or Unicode. This is a side effect of lxml
(bug or feature ?). It’s up to your application to convert these texts
to the appropriate charset.We do not actually handle exceptions due to malformed XML or various
unexpected structures. You should handle the various (potential)
problems in a try (…) except (…) block in your application.Developing and testingYou should grab openxmllib from its repository athttps://github.com/wilbertom/openxmllib-py3.Then:$ cd /where/you/installed/openxmllib
$ python setup.py developNote that testing does not require the installation:$ cd tests
$ python runalltests.pySupportUse the issue tracker provided from theproject site.CreditsGilles Lenfant [gilles.lenfant] <gilles dot lenfant at gmail dot com>Kevin Deldycke [kevin.deldycke] <kevin at deldycke dot com>Hugo Lopes Tavares [hltbra] <hltbra at gmail dot com>Petri Savolainen [petri] <petri dot savolainen at koodaamo dot fi>Eric Wohnlich [ewohnlich] <https://github.com/ewohnlich>Wilberto Morales [wilbertom] <https://github.com/wilbertom/>Future features and bugfixesFeaturesRemove downloaded temporary fileWhen data is coming from HTTP (…) URL, it’s stored in a temporary file that’s
not deleted after processing.Support for standard mimetypes moduleAdd our mime types to standard Python module.Human readable plain text conversion>>>fromopenxmllibimportopenXmlDocument>>>doc=openXmlDocument(...)>>>doc.textDocument(target_directory)(this may be not possible for spreadsheets)HTML conversions>>>fromopenxmllibimportopenXmlDocument>>>doc=openXmlDocument(...)>>>doc.htmlDocument(target_directory)This requires to find open source XSLT stylesheets.Document generationFIXME: more to say hereBugfixes…Waiting for feedback ;o)HistoryIssues # xxxSeehttps://github.com/glenfant/openxmllib/issues1.1.1Fix text extraction from Word template (.dotx) documents
[pdpotter]1.1New feature: document cover image extraction (when present)
[petri]Remove old pointers in README etc. pointing to old google code repo
[petri]Update lxml dependency (require >= 3.4.0 now)
[petri]1.0.7Fixed setup.py that imports indirectly lxml. Raises failure in buildout.
Issue # 11
[gilles.lenfant]unit tests temporary http server did not work
[gilles.lenfant]1.0.6The bug of mid word style change is still not fixed in presentation and
spreadsheets :/ Anyway, we needed an API sanitazation.
[gilles.lenfant]Factory API changed for a safer and faster document object construction.
[gilles.lenfant]Added support for new mime types that are not in the standard mimetypes
module.
[gilles.lenfant]1.0.5Optims on large documents.
[gilles.lenfant]CamelCased functions and method names in consistency with applied rules.
[gilles.lenfant]Version reset to 1.0.5
[gilles.lenfant]Support for urllib compatible URLs
[gilles.lenfant]New: Support for URLs
[hltbra]Fixed implementation to that old tests pass (the “midword”/”metadata” case,
bold + normal style was not ok)
[hltbra]1.0.4Compliance with python 2.5 and lxml 2.2
Still works with python 2.4 and lxml 1.3.6
[gilles.lenfant]Automate package and version definitionBump version to 1.0.4
2008-12-11 [kevin.deldycke]1.0.3Conforming XPath constructor signature.
[gilles.lenfant]New test files built with Mac Office 2008
[gilles.lenfant]1.0.2Fix bad “egging”.
[kevin.deldycke]1.0.1Egg-ification.
[kevin.deldycke]1.0.0First public version.
[gilles.lenfant]