在windows环境和linux环境下,word文档转换为pdf文档

php 同时被 2 个专栏收录
1 篇文章 0 订阅
1 篇文章 0 订阅


)

linux环境下的转换

1.安装环境

当前,我们采用docker技术,创建一个container来模拟服务器(linux + nginx + mysql + php)环境,
具体配置情况我已经把他打包成镜像包,大家可以随意使用,镜像名称在下面的docker-compose.yml文件中,
流程步骤如下:

  • 创建docker-compose.yml文件,写入以下配置内容:
version: "3"
services:
  nginx:
    image: myxxqy/nginx:1.0
    ports:
      - "${NGINX_HTTP_HOST_PORT}:80"
    volumes:
      - ${SOURCE_DIR}:/var/wwwroot/:rw
      - ${NGINX_CONFD_DIR}:/etc/nginx/conf.d/:rw
      - ${NGINX_CONF_FILE}:/etc/nginx/nginx.conf:ro
      - ${NGINX_LOG_DIR}:/var/log/nginx/:rw
    restart: always
    networks:
      - default
  php72:
    image: myxxqy/php:1.0
    volumes:
      - ${SOURCE_DIR}:/var/wwwroot/:rw
      - ${PHP72_PHP_CONF_FILE}:/usr/local/etc/php/php.ini:ro
      - ${PHP72_FPM_CONF_FILE}:/usr/local/etc/php-fpm.d/www.conf:rw
      - $PWD/fonts/:/usr/share/fonts
    restart: always
    cap_add:
      - SYS_PTRACE
    networks:
      - default
  mysql:
    image: myxxqy/mysql:1.0
    ports:
      - "${MYSQL_HOST_PORT}:3306"
    volumes:
      - ${MYSQL_CONF_FILE}:/etc/mysql/conf.d/mysql.cnf:ro
      - ${MYSQL_DATA_DIR}:/var/lib/mysql/:rw
    restart: always
    networks:
      - default
    environment:
      MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"
networks:
  default:

  • 打开命令行,进入到当前目录,执行docker-composer up -d
  • 服务启动成功,打开浏览器输入localhost/index.html进入demo页面
    如图所示:

2.操作说明

在linux环境下转换word文件采用的是开源软件libreOffice和小工具unoconv来实现的,主要的命令如下:

unoconv -f pdf -o your_pdf_path  your_word_path

至于中文乱码问题,这里把windows系统字体文件夹里所有的文件全部放在fonts文件夹里面,挂载到环境的/usr/share/fonts目录里即可自动转换。
– (*注意)这里fonts文件夹占用空间太大,请自行寻找fonts资源,放进去。

windows环境下的转换

1.环境安装

目前采用的是windows server 2012R2 的服务器,采用的是apache + php + mysql的环境,
具体配置过程这里就不介绍了,这里讲下开启php的dcom扩展:

  • 打开php配置文件php.ini,搜索php_com_dotnet
  • 找到extension=php_com_dotnet.dll,把前面的分号去掉
  • 找到com.allow_dcom = true,把等号后面的值改成true
  • 最后重启apache服务

2.服务器上安装office

因为项目中需要使用PHPOffice/PHPWord把文档中的变量转成需要的值,而这个库只支持docx
所以word的版本不能低于word2007,具体安装和激活office的过程这里我就不多说了,自己百度或google去。

3.服务器开启组件服务权限

具体转换的代码如下:

$word = new \COM("Word.Application") or die ("Could not initialise Object.");
$word->Documents->Open($this->createFile);
$word->ActiveDocument->ExportAsFixedFormat($this->createPdfFile, 17, false, 1, 0, 0, 0, 0, false, false, 0, false, false, false);
$word->Quit(false);

如果没有开启组件服务权限的话,使用COM扩展的话会报类似下面这样的错误:

Can't open Word doc with COM in PHP

这样我们需要开启组件服务相关的权限:

  • ctrl + R打开运行。
  • 输入mmc -32,然后回车,打开控制台1。
  • 点击文件-添加或删除管理单元,然后在左侧找到组件服务,点击添加,然后点击确定。
  • 然后在控制台1的界面就会看到控制台根节点下面有了组件服务,然后依次点击计算机-我的电脑-DCOM配置
  • 在里面找到Microsoft Office Word 97-2003,这里才是重点,右键属性
  • 常规的身份验证级别里面选择,然后在位置属性里面选择在数据所在的计算机运行应用程序(D)
  • 安全里面,把启动和激活权限访问权限配置权限都设置成自定义,在里面都添加Everyone用户,权限都勾上。
  • 标识属性里面(注意,这里最重要!!)选择下列用户,把远程登录的账户和密码写进去,然后点击应用确定,如图:

    然后运用业务代码,你会发现php的代码调用了系统组件服务的功能,打开了word文档,然后调用了微软的word文档相关接口进行另存为pdf。

原创地址

代码地址:https://github.com/zclucky/wordtopdf

喜欢的顺便start下,谢谢,如有疑问,请联系作者:myxxqy@gmail.com

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值