Forum OpenACS Development: JODconverter vs. OpenOffice/LibreOffice Command Line

Request notifications

Hi!

I know that Quest and Cognovis both use JODconverter in order to convert some file formats back and forth. Brian told me once about this option and Malte actually wrote a package being used in ]project-open[ V4.0.

However, using the "ooffice" command line allows for exactly the same results, but:

- doesn't need an open office server running in the background consuming memory
- doesn't need an extra package to capsulate the IPC and error conditions
- can run multiple threads in parallel, while JODconverted needs to do queuing or similar(?)

The entire conversion is reduced to a single exec line:

exec ooffice --headless --convert-to pdf --outdir /tmp/ $odt

Where is my mistake? :-)

Frank

Collapse
Posted by Antonio Pisano on
I second your choice. Running OpenOffice/LibreOffice from the command line is a very powerful way to convert from one format to another.

One thing I do, for example, is to create a print template as a flat odt (.fodt), then use it as a lean and mean adp template in my page, to be filled with data. Once I have produced the fodt, I can convert it to whathever formats OpenOffice/LibreOffice supports. I have struggled a lot with prints in the past, and I find this just wonderful, as most of the stupid formatting is handled by the office suite itself!

I don't know JODconverter, but back in the days when direct calls were not possible I remember using unoconv in a somewhat similar way. No need to say that requiring one software is easier than requiring two.

Ciao

Collapse
Posted by Malte Sussdorff on
Hi Antonio,

How do you call libreoffice? If I try to call libreoffice directly using exec, I have a problem with the PATH missing.

[Java framework] Error in function createSettingsDocument (elements.cxx).
javaldx failed!
Warning: failed to read path from javaldx
while executing
"exec /usr/bin/libreoffice --headless --convert-to pdf --outdir /var/lib/aolserver/ ..."
invoked from within
"ns_proxy eval $handle "exec $call""

Curious how you call it and if you might have a wrapper function for it. I tried:

exec /usr/bin/libreoffice --headless --convert-to $convert_to --outdir $outdir $oo_file

Collapse
Posted by Malte Sussdorff on
Solved my own problem using google and looking for a PHP solution instead of TCL, which taught me that the HOME env was missing....

exec -- /usr/bin/env HOME=[acs_root_dir] /usr/bin/libreoffice --headless --convert-to $convert_to --outdir $outdir $oo_file

Collapse
Posted by Antonio Pisano on
Yep, more or less the same thing I came up with. The problem is Libreoffice needs to write stuff in its home directory, therefore this must be set to something you have write permissions into.

Kudos for solving! :-)

Collapse
Posted by Frank Bergmann on
We've got the oofice call in /packages/intranet-invoices/www/view.tcl, for example. That looks like this:

set result [im_exec bash -l -c "export HOME=~\$\{whoami\}; ooffice --headless --convert-to pdf --outdir /tmp/ $odt_zip"]

Cheers,
Frank

Collapse
Posted by Malte Sussdorff on
Well, over six years ago when this was developed, ooffice did not have that option, thats why jodconverter and later pyod converter came into being.

If it works for you, perfect, I actually changed my intranet-openoffice package to use pyodconvert

set status [catch {ns_proxy eval $handle "exec -- /usr/bin/python3 [acs_package_root_dir intranet-openoffice]/pyodconverter/main.py $oo_file $output_file" 5000} result]

I personally will keep the intranet-openoffice package, but maybe exchange the phython call above with a direct exec on libreoffice.

Collapse
Posted by Frank Bergmann on
Hi Malte,

Just for curiosity: Why would you use pyodconverter and not ooffice directly?

Cheers,
Frank

Collapse
Posted by Malte Sussdorff on
Hi Frank,

are lack of knowledge and never change a running system good answers?

Other than that I second Brian in thanking you for pointing this out and look forward to experimenting with flat ODT.

Best wishes
Malte

Collapse
Posted by Brian Fenton on
Hi Frank

as Malte said, that option didn't exist at the time. We use Pyodconverter, and there are some options available that it's not clear to me if you have available with the oofice --convert-to command.

For example, scaling options, over-riding e.g. FooterIsDynamicHeight

But I must thank you for raising the subject, as it's great to have options.

Brian