Search by

se7enxweb / ezodf-ls

7x

Documents in and out of Exponential: imports Word, OpenDocument, RTF, PDF, Markdown, HTML, spreadsheets and presentations (files, folders, ZIP archives, web addresses) and exports any item as DOCX, PDF, ODT, RTF, EPUB or text, with LibreOffice as the converter, installed and switched on from the adm

v7.0.0 2026-10-24 00:47 UTC

README

ezodf: documents in and out of Exponential
==========================================

ezodf imports documents into Exponential and exports items as documents: Word (DOCX, DOC), OpenDocument, RTF,
PDF, Markdown, HTML, spreadsheets, presentations and the formats of OpenOffice.org 1.x and StarOffice, with
LibreOffice as the converter.

Everything is done in the administration (no command line needed):

- Setup > System > Document converter: install LibreOffice with one click (the official build, checked against
  its checksum and signature, into var/, no root needed) or use the system's; a sandboxed conversion server;
  test conversions; limits; a remote unoserver or Gotenberg.
- Documents > Import documents: files, a whole folder (its tree becomes folders), ZIP archives and web addresses,
  converted and published by background jobs, with a live page per import and retry.
- Documents > Export documents: any item as DOCX, PDF, ODT, RTF, DOC, XHTML, EPUB or text; a folder as a ZIP.
- With 7x SQLI Import: document formats with mapping, dry run, undo and schedules (an upload or ZIP, web
  addresses, feeds, WebDAV/Nextcloud, Google Drive, OneDrive, mailboxes).

The manual is in doc/index.md (German: doc/ger-de/index.md) and in the help center of the administration.

Requirements
------------

- Exponential 6. The entries in the transfer registry (the "Which import or export tool do I need?" page, an
  item's Import/Export menu) need Exponential 6.0.15; older kernels ignore them.
- The extension expqueue (the job queue) is recommended for the background work, with the cron job every
  installation runs (runcronjobs.php expqueue, every minute); without it each job runs in a PHP process of its own.
- PHP 8.0 to 8.5 with zip and dom; curl to install LibreOffice from the administration and to read web addresses;
  proc_open allowed.
- For the converter: Linux; LibreOffice, either installed with one click from the administration (about 2 GB below
  var/, no root needed) or from the system packages; bubblewrap (bwrap) for the sandbox (doc/hosting.md).
  Without a converter, Word, spreadsheets, presentations, PDF, Markdown, HTML and text are still read by the
  built-in readers, and OpenDocument texts import and export as before.
- No tables of its own: ezodf needs nothing on the database, on a new installation or on an upgrade.

Installation
------------

    composer require se7enxweb/ezodf:^7.0

Activate ezodf in [ExtensionSettings] ActiveExtensions[] (the installation wizard activates it by default),
regenerate the autoloads (php bin/php/ezpgenerateautoloads.php -e) and clear the caches. Give editors the rights
ezodf/import and ezodf/export, and administrators ezodf/converter. Then open Setup > System > Document converter
to install LibreOffice or point to the system's.

Upgrading to 7.0
----------------

- Install 7.0 over 6.x, regenerate the autoloads and clear the caches; there is no update script and no schema
  change. Roles that should open the Document converter page need the new right ezodf/converter.
  Everything that changed: doc/changelogs/7.0/CHANGELOG-6.1.13-to-7.0.0.

- The 4.x conversion daemon (scripts/daemon.php, odf.ini [ODFImport] ConversionDaemon) is no longer needed.
  Sites that run it keep it by leaving ConversionDaemon=enabled; otherwise the new converter is used.
- odf.ini [DocumentType] ConvertTypes[] lists every format the converter takes; a site override of it keeps
  working (it narrows the formats).
- New right: ezodf/converter (the Document converter page). ezodf/import and ezodf/export keep their meaning.
- Settings changed on the Document converter page are kept in var/<site>/ezodf/settings.json, over odf.ini.
- The PHP zip extension (ext-zip) is required: uploaded documents are checked before anything is extracted.
- Tests: vendor/bin/phpunit --no-configuration --bootstrap extension/ezodf/tests/bootstrap.php extension/ezodf/tests/

Known limitations
-----------------

- Images in an imported document are created only after the import's create (or edit) check on the target node
  has passed, but the right to create image objects where they are placed is not checked separately.
- While exporting, images the user may not read are left out.
- Importing a document with odf.ini [ODFImport] PlaceImagesInMedia=true does not place its images properly.

Upgrading to 6.1.10
-------------------

- Uploaded OpenDocument files are checked and extracted with ZipArchive: every entry is checked before anything is
  written, only content.xml and Pictures/* are extracted, with real byte limits (64 MiB per entry, 256 MiB in all,
  10000 entries).
- The OpenOffice.org client package (ooPackage/) and the server views it needed (authenticate, upload_import,
  upload_export, which were already disabled) were removed.