#1143523 unoconv: Doesn't work with LibreOffice 26.2 because of a change in pyuno API

#1143523#5
Date:
2026-08-03 13:51:24 UTC
From:
To:
Dear Maintainer,

pyuno in LibreOffice 26.2 has removed unohelper.absolutize in favor of
uno.absolutize to avoid duplication.
https://opengrok.libreoffice.org/history/core/pyuno/source/module/unohelper.py

unoconv makes use of unohelper.absolutize, which leads to a crash with

File "/usr/bin/unoconv", line 1003, in convert
        inputurl = unohelper.absolutize(self.cwd, unohelper.systemPathToFileUrl(inputfn))
                   ^^^^^^^^^^^^^^^^^^^^
    AttributeError: module 'unohelper' has no attribute 'absolutize'

This bug is also discussed here:
https://ask.libreoffice.org/t/is-this-unoconv-issue-a-regression-in-libreoffice/131807

Patch against unoconv 0.9.0 (not currently in Debian):

Description: Use uno.absolutize instead of unohelper.absolutize
 pyuno in LibreOffice 26.2 dropped unohelp.absolutize in favor of uno.absolutize
 to avoid duplication.
Author: Sergey Romanov <schragge@gmail.com>
Forwarded: not-needed
Last-Update: 2026-08-03
---
This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
--- a/unoconv
+++ b/unoconv
@@ -1000,7 +1000,7 @@
                 inputurl = 'private:stream'
             else:
                 if os.path.exists(inputfn):
-                    inputurl = unohelper.absolutize(self.cwd, unohelper.systemPathToFileUrl(inputfn))
+                    inputurl = uno.absolutize(self.cwd, unohelper.systemPathToFileUrl(inputfn))
                 else:
                     inputurl = inputfn
             document = self.desktop.loadComponentFromURL( inputurl , "_blank", 0, inputprops )
@@ -1014,7 +1014,7 @@
                 if os.path.exists(op.template):
                     info(1, "Template file: %s" % op.template)
                     templateprops = UnoProps(OverwriteStyles=True)
-                    templateurl = unohelper.absolutize(self.cwd, unohelper.systemPathToFileUrl(op.template))
+                    templateurl = uno.absolutize(self.cwd, unohelper.systemPathToFileUrl(op.template))
                     document.StyleFamilies.loadStylesFromURL(templateurl, templateprops)
                 else:
                     print('unoconv: template file `%s\' does not exist.' % op.template, file=sys.stderr)
@@ -1157,7 +1157,7 @@
                 else:
                     outputfn = realpath(inbase + os.extsep + outputfmt.extension)

-                outputurl = unohelper.absolutize( self.cwd, unohelper.systemPathToFileUrl(outputfn) )
+                outputurl = uno.absolutize( self.cwd, unohelper.systemPathToFileUrl(outputfn) )

             info(1, "Output file: %s" % outputurl)

I've uploaded patched unoconv 0.9.0 source Debian package I'm currently using
here:
https://app.box.com/s/r34cbeunbnr3b9he71x0ogjbj9xb3isv

That version includes diverse changes apart from this patch, see
debian/changelog there.

BTW, unoconv is deprecated upstream in favor of unoserver:
https://github.com/unoconv/unoconv/commit/36f1435e8becf29e94b21e90339c32238ccb090b


I've made a preliminary package of unoserver as well. It can be found here:
https://app.box.com/s/mlmgk0w3wl7rxwfb8hn59kcfzym2u75f

However, unoserver doesn't provide all the features of unoconv as of yet.
Besides, they are quite different.

HTH,

Sergey Romanov

#1143523#10
Date:
2026-08-03 15:20:32 UTC
From:
To:
Attaching the patch against unoconv 0.7-2.1 currently in sid