说一下,之前的时候做上传word文档转pdf的项目时候, 通过安装open office 连接服务组件, 遇到种种问题, 例如上传的word文档版本,, word文档中编辑的样式复杂会出现转pdf失败抛出异常错误等等,

windows 服务器安装 Microsoft Office 2010 , 安装之后.

php开启dcom扩展

打开php.ini,查找php_com_dotnet和php_com_dotnet

把前面的分号去掉

extension=php_com_dotnet.dll

改为true

com.allow_dcom = true

注意:我先说一下,我Windows安装的是 Microsoft Office 2010哈

打开Windows 服务器按快捷键 win键+R, 输入 comexp.msc -32

打开之后

展开:组件服务->计算机->我的电脑->DCOM配置

寻找安装office办公的组件服务  Microfost Word 97 - 2003文档(如果找不到那就 win键+R输入:dcomcnfg)

找到之后点击属性打开窗口, 点击安全,设置成这样如图

启动和激活权限 和 访问权限 都使用自定义配置

第一:添加 Everyone 用户组,记得确认前先检查名称

第二:点击确定后给Everyone配置此权限

下面

访问权限也是如上面步骤配置权限

配置完成点击Microfost Office - 2003 文档属性顶部的标识菜单

如果是远程桌面连接的服务器你就点击单选: 下列用户然后输入用户名和密码  (为啥呢? 因为如果你单选交互式用户的话, 只有你远程连接服务器的时候才能使用此组件服务,断开远程桌面服务器就会抛出异常错误,所有远程桌面连接服务器的用户, 一定要单选[下列用户]:然后输入连接远程桌面的管理员账号和密码 )

如果是本地的就选择单选: 交互式用户

此时配置完成组件服务了,

接下来就是php代码

public function doword_pdf($source=""D:\www\demo.docx,$export="D:\www\demo.pdf")
{ //连接Microfoset Office服务组件
$word = new COM("Word.Application") or die ("Could not initialise Object.");
if(!$word ){
  die ("Word.Application 服务已停止");
}
$word->Visible = 0;
// 建议设置为0,禁用警报,如“你想要MS Word是默认的…等"
$word->DisplayAlerts = 0;
// 打开Word文档,2007-2013 //要处理的word文件 , 这个是绝对文件路径
$word->Documents->Open($source); // save it as word 2003
// convert word 2007-2013 to PDF //要转出的pdf文件 绝对路径
$word->ActiveDocument->ExportAsFixedFormat($export, 17, false, 0, 0, 0, 0, 7, true, true, 2, true, true, false);
// quit the Word process
$word->Quit(false);
// clean up
unset($word);
return $export;
} 获取pdf页数 public function pdf_pagenum($path)
{
$stream = fopen($path, "r");
$content = fread ($stream, filesize($path)); if(!$stream || !$content)
return 0; $count = 0;
// Regular Expressions found by Googling (all linked to SO answers):
$regex = "/\/Count\s+(\d+)/";
$regex2 = "/\/Page\W*(\d+)/";
$regex3 = "/\/N\s+(\d+)/"; if(preg_match_all($regex, $content, $matches))
$count = max($matches); return $count;
}

php 上传word文件 Word文件转 PDF的更多相关文章

  1. .Net neatupload上传控件实现文件上传的进度条

    1. 引入bin文件 (可以到neatupload官网下载,也可以到教育厅申报系统中找) 2. 将控件加入到工具栏,在工具栏中点鼠标右键,如图: 3. 加入neatuplaod这个文件夹(可以到nea ...

  2. input上传指定类型的文件

    1. 谷歌–上传文件夹 添加属性webkitdirectory <input type = "file" webkitdirectory> 2. 上传文件–限制类型 添 ...

  3. PHP上传(单个)文件示例

    通过 PHP,可以把文件上传到服务器. 创建一个文件上传表单 允许用户从表单上传文件是非常有用的. 请看下面这个供上传文件的 HTML 表单: <html> <body> &l ...

  4. SharePoint 2010 ——自定义上传页面与多文件上传解决方案

    最近项目遇到一个很麻烦的问题,原以为很容易解决,结果搞了那么久,先开个头,再慢慢写 SharePoint 2010 ——自定义上传页面与多文件上传解决方案 1.创建Sharepoint空白项目,创建应 ...

  5. echo "不允许上传该类型的文件

    <?php教程 // 上传设置 $maxsize=10002400;            //最大允许上传的文件大小 $alltype=array(".php"," ...

  6. php 文件上传后缀名与文件类型对照表(几乎涵盖所有文件)

    网上有很多php文件上传的类,文件上传处理是php的一个特色(至少手册上是将此作为php特点来展示的,个人认为php在数组方面的优异功能更有特 色),学php的人都知道文件上传怎么做,但很多人在编程中 ...

  7. ASP无惧上传类不能上传中文双引号文件及ASP函数InStr存在bug

    ASP无惧上传类不能上传中文双引号文件及ASP函数InStr存在bug 近日发现eWebEditor V2.8 asp 版本上传文件文件名不能包含中文双引号,发现eWebEditor使用ASP“无惧上 ...

  8. Python 一键上传下载&一键提交文件到SVN入基线工具

    一键上传下载&一键提交文件到SVN入基线工具   by:授客 QQ:1033553122 实现功能 1 测试环境 1 使用说明 1   注: 根据我司项目规则订制的一套工具,集成以下功能,源码 ...

  9. django设置并获取cookie/session,文件上传,ajax接收文件,post/get请求及跨域请求等的方法

    django设置并获取cookie/session,文件上传,ajax接收文件等的方法: views.py文件: from django.shortcuts import render,HttpRes ...

  10. phpmyadmin-您可能正在上传很大的文件,请参考文档来寻找解决方法

    phpmyadmin-您可能正在上传很大的文件,请参考文档来寻找解决方法   实这个很简单的只要更改php.ini里三个配置即可.(见下面加粗部分,改成你自己的需求即可) ; Maximum allo ...

随机推荐

  1. WPF中查看PDF文件 - 基于开源的MoonPdfPanel (无需安装任何PDF阅读器)问题汇总

    致敬Yang-Fei—有一个简单的用法示例: http://www.cnblogs.com/yang-fei/p/4885570.html. 写MoonPdfPanel的哥们关于这个开源软件的实现介绍 ...

  2. 随笔编号-01 如何比较日期类型的String 大小浅谈.

    有三种解决方法: 第一种直接用字符串类的compareTo方法: String t1="20160707"; String t2="20160708"; int ...

  3. 怒改springMVC项目为springBoot项目

    背景:公司最近在做项目升级,融合所有项目,但是目前使用的一个系统还是最原始的框架 springMVC+spring+mybatis ,前端还是jsp,easyui(技术老的掉牙),终于出手了,结果.. ...

  4. Python 03 整型、字符串

    1. 整型和布尔值 1.1 整型——数字(int) 用于比较和运算.  整型32位:-2**31 ~ -2**31-1 整型64位:-2**63 ~ -2**63-1 python2 :整型 int ...

  5. C#开发BIMFACE系列12 服务端API之文件转换

    系列目录     [已更新最新开发文章,点击查看详细] 在代表模型的源文件上传到BIMFACE后,一般会进行三种API调用操作: 发起模型转换 查询转换状态 如转换成功,获取模型转换后的BIM数据 在 ...

  6. openSession 与 getCurrentSession的区别

    1.openSession 每一次获得的是一个全新的session对象,而getCurrentSession获得的是与当前线程绑定的session对象 package cn.kiwifly.view; ...

  7. Features Track 2018徐州icpc网络赛 思维

    Morgana is learning computer vision, and he likes cats, too. One day he wants to find the cat moveme ...

  8. 棋盘问题 POJ - 1321 [kuangbin带你飞]专题一 简单搜索

    在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C. ...

  9. react-router url参数更新 但是页面不更新的解决办法

    今天发现, 当使用react-router(v4.2.2)时,路由需要传入参数, 但是如果路由跳转时,url仅仅改变的是参数部分,如从hello/1跳转到hello/2,此时虽然参数更新了,但是页面是 ...

  10. Swift从入门到精通第八篇 - 方法 初识

    方法(学习笔记) 环境Xcode 11.0 beta4 swift 5.1 方法 结构体.枚举.类都可以定义方法(实例方法.类型方法) 实例方法(Instance Methods) 实例方法只能用实例 ...