How to use LibreOffice and unoserver to convert docx to pdf in Ubuntu/Debian

  1. Install LibreOffice and unoserver with the following commands:
    apt install libreoffice python3 python3-pip
    pip install unoserver
  2. Make sure the environment is ok:
    wget -O find_uno.py https://gist.githubusercontent.com/regebro/036da022dc7d5241a0ee97efdf1458eb/raw/find_uno.py
    python3 find_uno.py
  3. Start unoserver and take a conversion in diffrerent command line prompt:
    python3 -m unoserver.server
    python3 -m unoserver.converter --convert-to pdf my.docx my.pdf
  4. If you encounter the font problem, you should add windows fonts to Linux with the following steps.
    1. Copy all fonts files under C:\Windows\Fonts
    2. Remove the .fon files
    3. Copy the font files to Linux and paste the files in /usr/share/fonts/win/. and you should create win directory by yourself.
    4. Update the font cache with the following commands in /usr/share/fonts/win/ :
      mkfontscale
      mkfontdir
      fc-cache

      If you cannot find the commands, run

      apt-get install xfonts-utils
    5. You can also check the font status via fc-list
  5. Create a system service for unoserver in /etc/systemd/system/unoserver.service:
    [Unit]
    Description=unoserver
    After=network.target
    
    [Install]
    WantedBy=multi-user.target
    
    [Service]
    Type=simple
    User=root
    Group=root
    ExecStart=/usr/local/bin/unoserver
    Environment=PYTHONUNBUFFERED=true
    Restart=on-failure
    RestartSec=3

    You should also use systemctl daemon-reload to take effect. And if you want to make the service on startup, run systemctl enable daemon-reload

2 Comments

  • Hii,
    After unoserver installation I have start unoserver, and it's done but after convert file that raised error. I have given details below that how I have performed commands and which error raised :

    This is using in docker because my project has docker configuration.

    #python3 -m unoserver.converter --convert-to pdf my.docx my.pdf
    Traceback (most recent call last):
    File "/usr/lib/python3.8/site-packages/unoserver/converter.py", line 2, in
    import uno
    ModuleNotFoundError: No module named 'uno'

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
    File "/usr/bin/unoconvert", line 5, in
    from unoserver.converter import main
    File "/usr/lib/python3.8/site-packages/unoserver/converter.py", line 4, in
    raise ImportError(
    ImportError: Could not find the 'uno' library. This package must be installed with a Python installation that has a 'uno' library. This typically means you should install it with the same Python executable as your Libreoffice installation uses.

    Please help me and solve this out, if solved it is big thing for me.
    Thank you

Comments are read-only on this static edition of the site.