内容简介:使用docker来实现libreoffice并发转换docx文件为pdf
由于libreoffice的soffice不支持多进程,只允许同时有一个进程来转换docx文件为pdf文件,因此无法多线程并发执行转换操作。
为实现并发转换操作,有两种方案:
方案一:将转换代码部署到不同的服务器上,此种方案需要单独服务器,对资源要求较高,部署也麻烦;
方案二:利用 docker 对资源的隔离特性,把libreoffice 放到docker中,然后启用多个libreoffice容器,java代码调用不同容器的soffice命令来并发转换docx文件。
1、安装docker相关程序
CentOS7已经缺省支持docker
yum install docker
service docker start
chkconfig docker on
简单的安装使用可以参考 https://linux.cn/article-4340-1.html
2、把缺省的docker镜像仓库换成国内的网易镜像
echo "DOCKER_OPTS=\"\$DOCKER_OPTS –registry-mirror=http://hub-mirror.c.163.com\"" >> /etc/default/docker
service docker restart
3、下载centos docker镜像
docker pull centos
4、启动centos的docker镜像
docker run -it centos /bin/bash
5、进入docker容器
docker run -it centos -v /root/install:/root/install /bin/bash
由于生产镜像时候,可能需要与宿主主机共享一些文件,例如中文ttf文件,因此在run 时候使用了-v参数,用于宿主主机与docker container之间的共享目录。
假设docker 容器与宿主机的共享目录为/root/install 。
Docker容器和主机之间共享数据,可以参考 https://www.howtoing.com/how-to-share-data-between-the-docker-container-and-the-host/
6、安装libreoffice、中文字体库等所需的软件
yum install libreoffice-writer.x86_64
yum groupinstall "Fonts"
yum groupinstall "Input Methods"
7、生成安装了libreoffice、中文字体等软件的docker 镜像
docker commit CONTAINER_ID liang/libreoffice1
其中:
CONTAINER_ID是docker ps -a得到了容器id docker ps -a|grep "centos"|awk ‘{print $1}’
liang/libreoffice1 是我们生成的docker镜像
8、停掉刚才启动的centos容器
docker stop CONTAINER_ID
9、启动我们新生成的docker 镜像
根据并发转换docx为pdf文件的需要,基于我们自己生成的docker镜像,启动多个docker的容器,利用docker容器对资源的隔离,调用不同容器中的soffice来并发处理不同的pdf文件
docker run –name office1 -it -d -v /root/pdf1:/root/pdf1 liang/libreoffice1
docker run –name office2 -it -d -v /root/pdf1:/root/pdf1 liang/libreoffice1
镜像文件与宿主机的共享目录为/root/pdf1和/root/pdf2,在共享目录中放入要转换的docx文件
docker exec -it office1 /bin/bash
10、调用soffice命令行,将docx转为pdf
docker exec -it office1 /bin/soffice –headless –invisible –norestore –nodefault –nolockcheck –nofirststartwizard –convert-to pdf:writer_pdf_Export –outdir /root/pdf1 /root/pdf1/liang1.docx
docker exec -it office2 /bin/soffice –headless –invisible –norestore –nodefault –nolockcheck –nofirststartwizard –convert-to pdf:writer_pdf_Export –outdir /root/pdf2 /root/pdf2/liang2.docx
以上命令行放到 java 代码中,同时可以在多个线程中并发调用。
以上所述就是小编给大家介绍的《使用docker来实现libreoffice并发转换docx文件为pdf》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- JavaScript进阶系列-类型转换、隐式类型转换
- Android 多国语言转换 Excel 和 Excel 转换为 string
- [SSL证书转换(一)]关于JKS 转换成 CRT 和 KEY
- c++中几种常见的类型转换。int与string的转换,float与string的转换以及string和long类型之间的相互...
- Protocol Buffer使用转换工具将proto文件转换成Java文件流程及使用
- 开源 | Alita:一套把 React Native 代码转换成微信小程序代码的转换引擎工具
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
随机密码生成器
多种字符组合密码
RGB CMYK 转换工具
RGB CMYK 互转工具