当前位置: 首页 > news >正文

制作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/

在这里插入图片描述

相关文章:

  • 部署若依前后端分离
  • 详细讲解一下Java中的Enum
  • vue常见错误
  • 用idea配置springboot+mybatis连接postersql数据库
  • 从GPT到Gemini 大模型进化史
  • CSS的复合选择器
  • Python与图像处理:从基础操作到智能应用的全面解析
  • 《理解 Java 泛型中的通配符:extends 与 super 的使用场景》
  • 电力变压器油的<油质气象色谱>指标分析
  • 链式数据存储系统
  • 【数据结构】线性表( List)和 顺序表(ArrayList)
  • Python自学第2天:条件语句,循环语句
  • RestSharp和Newtonsoft.Json结合发送和解析http
  • 协同推荐算法实现的智能商品推荐系统 - [基于springboot +vue]
  • 矢量网络分析仪(VNA)能测什么?5大核心功能与典型应用场景详解
  • 高性能实现手机号模糊查询
  • IDEA2024 pom.xml依赖文件包报红解决
  • EM储能网关ZWS智慧储能云应用(9) — 远程OTA升级
  • RISC-V简介
  • 规范化与反规范化策略白皮书
  • 四部门:到2025年底,全国行政村5G通达率超过90%
  • 优化营商环境,服务上海“五个中心”建设,北外滩有何举措?
  • 沈阳卫健委通报“健康证”办理乱象:涉事医院已被立案查处
  • 云南威信麟凤镇通报“有人穿‘警察’字样雨衣参与丧事”:已立案查处
  • 张笑宇:物质极大丰富之后,我们该怎么办?
  • 10名“鬼火少年”凌晨结队在城区飙车,警方:涉非法改装,正处理