近期項目中使用了word轉pdf的功能,其中借助了遠程服務的jodconverter來處理。
<dependency><groupId>org.jodconverter</groupId><artifactId>jodconverter-remote</artifactId><version>4.4.2</version>
</dependency>
jodconverter官網鏈接
https://jodconverter.github.io/jodconverter/4.4.11/
其中提供了docker-image-jodconverter-examples這個項目來生成鏡像,提供對外服務
https://github.com/jodconverter/docker-image-jodconverter-examples
目前官網有rest版和gui版,rest版只是外部網絡調用,gui版提供頁面傳入文件然后下載(對中文支持不友好)。
底層庫通過libreoffice來進行轉換(還有apache的openoffice,但是這個版本更新慢)。
鏡像版本介紹
https://github.com/jodconverter/docker-image-jodconverter-examples/pkgs/container/jodconverter-examples
鏡像發布情況
https://github.com/jodconverter/docker-image-jodconverter-examples/releases
項目中使用發現,截止到2025.09.05,鏡像底層使用的libreoffice未及時更新,還是7.x版本。對應如下介紹
https://github.com/jodconverter/docker-image-jodconverter-runtime
由于7.x版本中針對word轉pdf時刪除線渲染有問題,升級到新版本后此問題消失,所以需要升級libreoffice的版本。
鑒于jodconverter鏡像的特殊性,考慮到了使用docker鏡像掛載宿主機的libreoffice來處理。不然的話需要將官方的鏡像重新打包處理,這個相對宿主機而言麻煩一些。后續可以考慮使用鏡像來處理。
libreoffice官網下載
https://downloadarchive.documentfoundation.org/libreoffice/old/
libreoffice具體版本下載
https://mirror1.cs-georgetown.net/tdf/libreoffice/stable/25.8.1/deb/x86_64/LibreOffice_25.8.1_Linux_x86-64_deb.tar.gz
下載下來文件后將文件進行解壓。
安裝前檢查一下是否安裝過libreoffice,如果存在需要刪除,防止出現問題。
目前機器操作系統使用了ubuntu,使用如下命令
# 1. 確認是否安裝
dpkg -l | grep openoffice# 2. 徹底刪除
sudo apt purge 軟件包名稱# 3. 清理殘留依賴
sudo apt autoremove
后面再逐個安裝軟件包,依賴情況如下
軟件包名 | 依賴軟件包名 |
libobasis25.8-core_25.8.1.1-1_amd64.deb | libreoffice25.8-ure_25.8.1.1-1_amd64.deb libobasis25.8-ooofonts_25.8.1.1-1_amd64.deb |
libreoffice25.8_25.8.1.1-1_amd64.deb | libobasis25.8-images_25.8.1.1-1_amd64.deb |
libreoffice25.8-calc_25.8.1.1-1_amd64.deb | libobasis25.8-calc |
libreoffice25.8-draw_25.8.1.1-1_amd64.deb | libobasis25.8-draw |
libreoffice25.8-en-us_25.8.1.1-1_amd64.deb | libobasis25.8-en-us_25.8.1.1-1_amd64.deb |
libreoffice25.8-impress_25.8.1.1-1_amd64.deb | libobasis25.8-impress |
libreoffice25.8-math_25.8.1.1-1_amd64.deb | libobasis25.8-math_25.8.1.1-1_amd64.deb |
libreoffice25.8-writer_25.8.1.1-1_amd64.deb | libobasis25.8-writer_25.8.1.1-1_amd64.deb |
libobasis25.8-librelogo_25.8.1.1-1_amd64.deb | libobasis25.8-pyuno |
其他軟件包無依賴,安裝中如果遇到問題需要具體排查處理。
如下命令安裝即可
sudo dpkg -i 軟件包名
安裝錯誤以及對應軟件包
錯誤名 | 執行命令 |
---|---|
error while loading shared libraries: libXinerama.so.1: cannot open shared object file: No such file or directory | sudo apt install libxinerama1 |
error while loading shared libraries: libsmime3.so: cannot open shared object file: No such file or directory | sudo apt install libnss3 |
error while loading shared libraries: libcairo.so.2: cannot open shared object file: No such file or directory | sudo apt install libcairo2 |
error while loading shared libraries: libcups.so.2: cannot open shared object file: No such file or directory | sudo apt install libcups2 libx11-xcb1 |
安裝完libreoffice后默認安裝在如下位置
/opt/libreoffice版本號
字體安裝
查看安裝源
root@VM-8-7-debian:~# cat /etc/apt/sources.list
deb http://mirrors.tencentyun.com/debian bookworm main contrib non-free non-free-firmware
#deb-src http://mirrors.tencentyun.com/debian bookworm main contrib non-free non-free-firmware
deb http://mirrors.tencentyun.com/debian bookworm-updates main contrib non-free non-free-firmware
#deb-src http://mirrors.tencentyun.com/debian bookworm-updates main contrib non-free non-free-firmware
deb http://mirrors.tencentyun.com/debian-security/ bookworm-security main contrib non-free-firmware
#deb-src http://mirrors.tencentyun.com/debian-security/ bookworm-security main contrib non-free-firmware
確保返回的數據中main后有對應的數據,不然字體會下載不下來。
字體安裝
sudo apt install fonts-noto-cjk fonts-noto-core fonts-dejavu fonts-liberation fonts-wqy-zenhei fonts-wqy-microhei
sudo apt install ttf-mscorefonts-installer
進入jodconverter鏡像得知,libreoffice實際在如下位置
/usr/lib/libreoffice
最終docker命令如下
docker run -v /usr/share/fonts:/usr/share/fonts:ro -v /opt/libreoffice24.8:/usr/lib/libreoffice -d --memory 512m -p 8100:8080 ghcr.io/jodconverter/jodconverter-examples:rest
-
宿主機字體對應docker的字體目錄
-
宿主機libreoffice對應docker的libreoffice目錄
-
宿主機8100端口對應docker的8080,內部是一個java web項目,通過8080調用libreoffice進行文件格式轉換處理。