制作Unoconv项目的Docker镜像

制作Unoconv项目的Docker镜像

1 介绍

1.1 Unoconv

在Linux下将Office转换为pdf的很多包仅支持Windows,Unoconv是一个用LibreOffice转化文档的项目,已经归档(2025-3-31)。迁移后的新版本是unoserver,unoserver不太好用,我没安装成功,推荐使用Unoconv。

参考地址

# 归档版本
https://github.com/unoconv/unoconv

# 新版本
https://github.com/unoconv/unoserver

1.2 LinuxServer.io

LinuxServer.io是一个借助docker将开源项目封装为镜像的组织团队。他们封装了很多有用的镜像。本文借助linuxserver封装的LibreOffice进行二次封装镜像。

参考地址

# linuxserver官网地址
https://www.linuxserver.io/

# Github地址
https://github.com/linuxserver/

1.3 LibreOffice

LibreOffice是一个功能强大的免费、开源的办公软件套件。由于LibreOffice官网没有见到封装docker镜像。所以本文使用LinuxServer.io封装的LibreOffice。

参考地址

# LibreOffice官网
https://www.libreoffice.org/

# Github上linuxserver封装的LibreOffice地址
https://github.com/linuxserver/docker-libreoffice

1.4 KasmVNC

KasmVNC是一款开源的、基于Web 的 VNC 服务器,用户可以直接通过浏览器访问远程桌面,无需安装任何客户端。 lscr.io/linuxserver/libreoffice:7.6.7使用这个开源项目借助浏览器访问LibreOffice系统。

参考地址

# 官网
https://www.kasmweb.com/kasmvnc

# Github上linuxserver封装的KasmVNC地址
https://github.com/linuxserver/docker-baseimage-kasmvnc

2 构建Unoconv镜像

2.1 下载linuxserver/libreoffice镜像

下载镜像

# lscr.io/linuxserver/libreoffice和linuxserver/libreoffice是同一个镜像

# 下载linuxserver/libreoffice
docker pull linuxserver/libreoffice:7.6.7

# 下载lscr.io/linuxserver/libreoffice
docker pull lscr.io/linuxserver/libreoffice:7.6.7

创建容器

docker run -itd --name pyunoconv linuxserver/libreoffice:7.6.7

在宿主机内将data.docx复制到unoserver容器中,用于文档转换测试。

docker cp data.docx pyunoconv:/home/

2.2 封装pyunoconv容器

(1)进入容器

# 进入容器
docker exec -it pyunoconv /bin/bash

(2)创建虚拟环境

⚠️ 注意:在linuxserver/libreoffice中自带Python,它是为linuxserver/libreoffice系统提供可视化支撑的(系统的Python环境),所以不能作为用户研发环境。如果使用系统的Python会出现下面错误。

error: externally-managed-environment

× This environment is externally managed

Python虚拟环境

# 进入容器中的home目录
cd /home

# 在home中创建虚拟环境
python -m venv pyunoconv

# 激活虚拟环境
source ./pyunoconv/bin/activate

Python安装unoserver依赖

pip install --upgrade setuptools wheel
pip install unoconv

⚠️下面的报错需要执行 pip install --upgrade setuptools wheel

ERROR: Could not find a version that satisfies the requirement distutils (from versions: none)
ERROR: No matching distribution found for distutils

(3)测试unoserver

使用python时可使用subprocess包通过命令行的形式调用即可。

# 在将测试的office转化为pdf
unoconv -f pdf data.docx

执行结果

在这里插入图片描述

2.3 解决中文乱码

没安装中文字体会出现转换时都是空,无法转中文。解决方法将Windows下的C:\Windows\Fonts的字体全部打包为”Fonts.zip“,复制到容器中的/usr/share/fonts/

在宿主机中将"Fonts.zip"复制到容器中。

docker cp Fonts.zip pyunoconv:/home/

在pyunoconv容器中解压和移动字体

# 进入容器
docker exec -it pyunoconv /bin/bash

# 进入目录
cd /home

# 进入容器解压字体包
unzip Fonts

# 将字体移动到字体目录下
mv Fonts/* /usr/share/fonts/

3 Web访问LibreOffice

基于Docker使用linuxserver/libreoffice:7.6.7镜像实现在线预览LibreOffice。由于linuxserver/libreoffice内置了KasmVNC,所以可以使用浏览器使用LibreOffice。

使用Docker创建镜像

docker run -d \
  --name=libreoffice \
  --security-opt seccomp=unconfined `#optional` \
  -e PUID=1000 \
  -e PGID=1000 \
  -e TZ=Etc/UTC \
  -p 3000:3000 \
  -p 3001:3001 \
  -v /path/to/config:/config \
  --restart unless-stopped \
  lscr.io/linuxserver/libreoffice:7.6.7

访问地址

端口3000是http的访问地址,端口3001是https是https的访问地址。

http://192.168.108.146:3000/

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值