近期做一个项目,须要将用户上传的word,excel文档转成PDF文档保存并打印。在网上找了非常多资料。并不全面,所以自己写了一份比較全面的教程来分享。

以下是操作步骤:

1、        安装免费的openOffice软件。请至openoffice.org下载最新版本号。

2、        JDK支持,请自行搜索下载最新版本号JDK。

3、        安装完openOffice后,在開始--执行中输入Dcomcnfg打开组件服务。在组件服务—计算机—我的电脑—DCOMP配置中,选择

在这两项上分别点击右键属性。打开属性面板例如以下图:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvanpoMjAwNA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

选择安全选项卡,分别在启动和激活权限和訪问权限两项上点自己定义。加入Everyone的权限。

选择标识选项卡。选择交互式用户。

4、        安装完openOffice后。请先打开一次确认能够正常执行软件,然后退出后用命令行执行下面命令。

先到安装文件夹下,比如:C:\Program Files\OpenOffice 4\program\

运行命令:

soffice -headless-accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard

成功后即在后台执行了该软件。

5、        假设是php5.4.5曾经版本号,须要在php.ini里把com.allow_dcom = true打开。即去掉前面的分号。假设是以后版本号,须要在php.ini 里添加一行扩展extension=php_com_dotnet.dll。然后检查php的ext文件夹中是否存在该dll文件。假设没有请自行下载相应版本号的dll。然后重新启动apache或IISserver。

6、        代码实现

  1. /**
  2. * office文档转换为PDF类
  3. * @author jinzhonghao <954299193@qq.com> created 2015-04-23
  4. */
  5.  
  6. class office2pdf
  7. {
  8. private $osm;
  9.  
  10. public function __construct()
  11. {
  12. $this->osm = new COM("com.sun.star.ServiceManager")or die ("Please be sure that OpenOffice.org is installed.n");
  13. }
  14.  
  15. public function MakePropertyValue($name,$value)
  16. {
  17. $oStruct = $this->osm->Bridge_GetStruct("com.sun.star.beans.PropertyValue");
  18. $oStruct->Name = $name;
  19. $oStruct->Value = $value;
  20. return $oStruct;
  21. }
  22.  
  23. public function transform($input_url, $output_url)
  24. {
  25. $args = array($this->MakePropertyValue("Hidden",true));
  26.  
  27. $oDesktop = $this->osm->createInstance("com.sun.star.frame.Desktop");
  28.  
  29. $oWriterDoc = $oDesktop->loadComponentFromURL($input_url,"_blank", 0, $args);
  30.  
  31. $export_args = array($this->MakePropertyValue("FilterName","writer_pdf_Export"));
  32.  
  33. $oWriterDoc->storeToURL($output_url,$export_args);
  34. $oWriterDoc->close(true);
  35. return $this->getPdfPages($output_url);
  36. }
  37.  
  38. public function run($input,$output)
  39. {
  40. $input = "file:///" . str_replace("\\","/",$input);
  41. $output = "file:///" . str_replace("\\","/",$output);
  42. return $this->transform($input, $output);
  43. }
  44.  
  45. /**
  46. * 获取PDF文件页数的函数获取
  47. * 文件应当对当前用户可读(linux下)
  48. * @param [string] $path [文件路径]
  49. * @return int
  50. */
  51. public function getPdfPages($path)
  52. {
  53. if(!file_exists($path)) return 0;
  54. if(!is_readable($path)) return 0;
  55. // 打开文件
  56. $fp=@fopen($path,"r");
  57. if (!$fp)
  58. {
  59. return 0;
  60. }
  61. else
  62. {
  63. $max=0;
  64. while(!feof($fp))
  65. {
  66. $line = fgets($fp,255);
  67. if (preg_match('/\/Count [0-9]+/', $line, $matches))
  68. {
  69. preg_match('/[0-9]+/',$matches[0], $matches2);
  70. if ($max<$matches2[0]) $max=$matches2[0];
  71. }
  72. }
  73. fclose($fp);
  74. // 返回页数
  75. return $max;
  76. }
  77. }
  78.  
  79. }

PHP 实现Word,excel等转换pdf的更多相关文章

  1. Java解析OFFICE(word,excel,powerpoint)以及PDF的实现方案及开发中的点滴分享

    Java解析OFFICE(word,excel,powerpoint)以及PDF的实现方案及开发中的点滴分享 在此,先分享下写此文前的经历与感受,我所有的感觉浓缩到一个字,那就是:"坑&qu ...

  2. word/excel/ppt 2 PDF

    PHP 实现 word/excel/ppt 转换为 PDF 一般最常见的就是利用OpenOffice来转换,来看看实现的核心代码: class PDFConverter { private $com; ...

  3. C#将Word,Excel与Html,PDF互转

    public class OfficeHelper { /// <summary> /// word转成html /// </summary> /// <param na ...

  4. word,excel,ppt转Pdf,Pdf转Swf,通过flexpaper+swftools实现在线预览

    其实这是我好几年前的项目,现在再用这种方式我也不建议了,毕竟未来flash慢慢会淘汰,此方式也是因为目测大部分人都装了flash,才这么做的,但是页面展示效果也不好.其实还是考虑收费的控件,毕竟收费的 ...

  5. PHP 实现 word/excel/ppt 转换为 PDF

    前段时间负责公司内部文件平台的设计,其中有一个需求是要能够在线浏览用户上传的 office 文件. 我的思路是先将 office 转换成 PDF,再通过 pdf.js 插件解析 PDF 文件,使其能在 ...

  6. DataTable导出为word,excel,html,csv,pdf,.txt

    using System; using System.Data; using System.Configuration; using System.Collections; using System. ...

  7. word,excel,ppt转pdf

    第一步 需要下载jar包和jacob-1.14.3-x64.dll * <dependency> * <groupId>net.sf.jacob-project</gro ...

  8. 21.PHP实现Word/Excel/PPT转换为PDF

    参考文档: https://www.cnblogs.com/woider/p/7003481.html http://blog.csdn.net/aoshilang2249/article/detai ...

  9. java 如何将 word,excel,ppt如何转pdf --openoffice (1)

    承上启下,可折叠 上一篇说的是:服务器是windows server时,用jacob将msoffice(指的是word,excel,ppt)转换成pdf. 若被部署项目的服务器是centOS等linu ...

随机推荐

  1. 基于 FPGA 的图像边缘检测

    本文主要内容是实现图像的边缘检测功能 目录 mif文件的制作 调用 ip 核生成rom以及在 questasim 仿真注意问题 灰度处理 均值滤波:重点是3*3 像素阵列的生成 sobel边缘检测 图 ...

  2. TensorFlow——深入MNIST

    程序(有些不甚明白的地方改日修订): # _*_coding:utf-8_*_ import inputdata mnist = inputdata.read_data_sets('MNIST_dat ...

  3. [git 学习篇]远程创库

    实际情况往往是这样,找一台电脑充当服务器的角色,每天24小时开机,其他每个人都从这个“服务器”仓库克隆一份到自己的电脑上,并且各自把各自的提交推送到服务器仓库里,也从服务器仓库中拉取别人的提交. 完全 ...

  4. [python subprocess学习篇] 调用系统命令

    http://www.jb51.net/article/57208.htm 3).Popen.communicate(input=None):与子进程进行交互.向stdin发送数据,或从stdout和 ...

  5. C# 条件与&&与条件或||的使用总结

    CSDN说明: 条件“或”运算符 (||) 执行 bool 操作数的逻辑“或”运算,但仅在必要时才计算第二个操作数. 件“与”运算符 (&&) 执行其 bool 操作数的逻辑“与”运算 ...

  6. HLG2179 组合(dfs水水更健康)

    组合 Time Limit: 1000 MS Memory Limit: 32768 K Total Submit: 57(38 users) Total Accepted: 43(36 users) ...

  7. 【Vjudge】P1989Subpalindromes(线段树)

    题目链接 水题一道,用线段树维护哈希值,脑补一下加减乱搞搞……注意细节就过了 一定注意细节…… #include<cstdio> #include<cstdlib> #incl ...

  8. 刷题总结——pole(uva 1638 dp)

    题目: 题解: 这道题很妙的一点是很好地利用了最矮的杆子除了放两侧以外对观察数是没有影响的性质·· 考虑n-1个杆子与n个杆子··我们可以把n个杆子的排列看成n-1个杆子的长度加1按原来的排列顺序·· ...

  9. NOIP2017赛前模拟(4):总结

    题目: 1.打牌 给定n个整数(n<=1000000),按照扑克牌对子(x,x)或者顺子(x,x+1,x+2)打出牌···问最多可以打出多少次对子或者顺子?牌的大小<=1000000 2. ...

  10. 我最喜欢的XML(三种方式)

    我最喜欢的方式 下面的三个 XML 文档包含完全相同的信息: 第一个例子中使用了 date 属性: <note date="08/08/2008"> <to> ...