要件一览
- 开源工具:libreoffice
- sh脚本
- 字体
- docker & docker-compose
编写Dockerfile.openoffice
FROM ubuntu:20.04
# 安装依赖
RUN apt-get update && apt-get install -y --no-install-recommends \
libreoffice \
inotify-tools \
default-jre \
libreoffice-java-common \
fonts-wqy-zenhei \
fonts-noto-cjk \
fontconfig \
openjdk-11-jdk && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# 设置 JAVA_HOME 环境变量
ENV JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
ENV PATH=$JAVA_HOME/bin:$PATH
# 拷贝宋体和仿宋字体文件
COPY ./fonts/SimSun.ttf /usr/share/fonts/truetype/
COPY ./fonts/FangSong.ttf /usr/share/fonts/truetype/
# 更新字体缓存
RUN fc-cache -fv
# 设置工作目录
WORKDIR /usr/src/app/
# 创建 logs 目录
RUN mkdir -p /usr/src/app/logs
# 复制监测脚本文件
COPY monitor.sh /usr/src/app/monitor.sh
RUN chmod +x /usr/src/app/monitor.sh
# 启动 LibreOffice 并运行监测脚本
CMD ["bash", "-c", "libreoffice --headless --accept='socket,host=0.0.0.0,port=8100,tcpNoDelay=1;http;StarOffice.ServiceManager' --nofirststartwizard & /usr/src/app/monitor.sh & tail -f /usr/src/app/logs/monitor.log"]
字体
Windows11中的 仿宋 常规(simfang.ttf)
sh脚本
#!/bin/bash
LOG_FILE="/usr/src/app/logs/monitor.log" # 定义日志文件路径
MONITOR_DIR="/usr/src/app/files" # 定义监视的目录
echo "开始监控脚本" >> "$LOG_FILE" # 开始脚本并记录日志
while true; do
for FILE in "$MONITOR_DIR"/*.docx; do
if [[ -f "$FILE" ]]; then # 如果找到 .docx 文件
echo "检测到文件: $FILE" >> "$LOG_FILE" # 记录检测到的文件
echo "转换 $FILE 为PDF并保留原始字体设置" >> "$LOG_FILE" # 记录转换开始的信息
libreoffice --headless --convert-to pdf --outdir "$MONITOR_DIR" "$FILE" # 转换文件为 PDF
if [[ $? -eq 0 ]]; then # 如果转换成功
echo "转换成功,删除 $FILE" >> "$LOG_FILE" # 记录成功信息并删除原文件
rm "$FILE"
else
echo "转换失败 $FILE" >> "$LOG_FILE" # 如果转换失败,记录失败信息
fi
fi
done
sleep 1 # 每1秒检查一次
done
echo "监控脚本结束" >> "$LOG_FILE" # 结束脚本并记录日志
DockerCompose
#version : '3.8'
services:
libreoffice:
build:
context: .
dockerfile: Dockerfile.openoffice
ports:
- "8100:8100"
volumes:
- type: bind
source: ../emissionsCertificate
target: /usr/src/app/files
- type: bind
source: ../huayu_docker_data/logs
target: /usr/src/app/logs
environment:
- TZ=Asia/Shanghai
stdin_open: true
tty: true