php没有找到相应的包

Java的mpxj可以实现

所以借助JavaBridge.jar   JavaBridge介绍

1.安装jdk,设置环境变量(我的版本jdk1.8.0_131)

2.下载mpjx

  在http://www.mpxj.org/官网MPXJ in Java,进入下载页

  (我的版本mpxj-7.0.2)

  解压,将mpxj.jar和lib下面的commons-collections4-4.1.jar、poi-3.17.jar、rtfparserkit-1.10.0.jar放到Java安装目录下的jre/lib/ext下面

测试

aa.mpp

在www/mpp新建mpxjtest.java

 import net.sf.mpxj.mpp.*;
import net.sf.mpxj.MPXJException;
import net.sf.mpxj.Resource;
import net.sf.mpxj.ResourceAssignment;
import net.sf.mpxj.Task;
import net.sf.mpxj.ProjectFile;
import java.util.List;
import java.io.*;
public class mpxjtest {
public static void main(String[] args) throws MPXJException {
File file = new File("aa.mpp");
MPPReader mppRead = new MPPReader();
ProjectFile pf = mppRead.read(file);
System.out.println(pf);
List tasks = pf.getAllTasks();
mpxjtest mt = new mpxjtest();
System.out.println("总任务数: " + tasks.size());
System.out.println("ID|任务名|资源|开始时间|结束时间|完成百分比");
for (int i = 1; i < tasks.size(); i++) {
System.out.println(((Task) tasks.get(i)).getUniqueID() + "|" + ((Task) tasks.get(i)).getName() + "|" + mt.getResource((Task) tasks.get(i)) + "|" + ((Task) tasks.get(i)).getStart() + "|" + ((Task) tasks.get(i)).getFinish() + "|" + ((Task) tasks.get(i)).getPercentageComplete());
} }
public String getResource(Task task) {
StringBuffer buf = new StringBuffer();
List assignments = task.getResourceAssignments();
for (int i = 0; i < assignments.size(); i++) {
ResourceAssignment assignment = (ResourceAssignment) assignments .get(i);
Resource resource = assignment.getResource();
if (resource != null) {
buf.append(resource.getName()).append(" ");
}
}
return buf.toString();
}
}

3.php调用java

JavaBridge.jar--用于搭建WEB服务器接口的核心JAVA应用程序包

Java.inc--供PHP语言调用的方法包,主要是Java类

首先运行JavaBridge.jar启动WEB服务器接口,在JavaBridge.jar所在目录运行命令

java -jar JavaBridge.jar SERVLET_LOCAL:

注:

  不加SERVLET_LOCAL:8089,默认的就是8080

修改php.ini里的allow_url_include为ON

测试

新建aa.php

<?php
require_once("http://localhost:8080/JavaBridge/java/Java.inc");
$System = java("java.lang.System");
echo $System->getProperties();

成功

  注:

    要调用自己开发的类,类必须是public类型的。要调用的方法也必须是public类型的

4.php解析mpp

<?php
$fileName = "aa.mpp";
$data = parseMSPJ($fileName);
echo "success";
$fp = fopen('./a.txt', 'a+b');
fwrite($fp, var_export($data, true));
fclose($fp);
function parseMSPJ($fileName)
{
$file_path = $fileName;
require_once 'http://localhost:8089/JavaBridge/java/Java.inc';
$data = array();if (empty($file_path)) {return $data;}
$mppRead = new Java('net.sf.mpxj.mpp.MPPReader');
$Filecontent = $mppRead->read($file_path); $Alltasks = $Filecontent->getAllTasks();
$Tasks_size = java_values($Alltasks->size());
// ID|任务名|开始时间|结束时间|完成百分比|资源|工期
for ($i = 1; $i < $Tasks_size; $i++) {
$separator = '|';
$tmp= getResource($Alltasks[$i]);
$string = $Alltasks[$i]->getUniqueID() . $separator . $Alltasks[$i]->getName() . $separator .$tmp.$separator.$Alltasks[$i]->getStart() . $separator . $Alltasks[$i]->getFinish() . $separator . $Alltasks[$i]->getPercentageComplete();
$data[] = explode('|', $string);
}
return $data;
}
function getResource($task)
{
$resource = $task->getResourceAssignments();
$size = java_values($resource->size());
$buf = '';
if($size>0){
for ($i = 0; $i < $size; $i++) {
$tmp = $resource[$i]->getResource();
if(!(java_is_null($tmp))){
$buf[] = $tmp->getName();
}
}
}
return $buf;
}

将解析出的文件内容,写入a.txt

只是简单的解析,还有待完善

最新文章

  1. Ext.encode 抛出异常“Uncaught RangeError: Maximum call stack size exceeded”
  2. 转:判断DATASET是否为空
  3. 如何给span设置高度宽度?
  4. 分享php中四种webservice实现的简单架构方法及实例(转)
  5. C# 3.0 基本框架
  6. linux下python导出sybase 数据库 表记录的方式
  7. Win7 &amp; Win 8系统更新失败的解决
  8. dubbo+zookeeper+spring+springMVC+mybatis的使用
  9. flipsnap.js 源码阅读备份
  10. Milk Patterns poj3261(后缀数组)
  11. Android简易实战教程--第三十话《撕衣美女》
  12. Postgresql中临时表(temporary table)的特性和用法
  13. Linux定时执行PHP
  14. SoapUI 学习总结-02 断言
  15. 27. pt-table-checksum
  16. tomcat解决GET请求中文参数乱码
  17. django----利用Form 实现两次密码输入是否一样 ( 局部钩子和全局钩子 )
  18. nodejs+mysql入门实例(删)
  19. javaScript 面向对象开发实例
  20. 【WXS全局对象】JSON

热门文章

  1. hbase源码系列(六)HMaster启动过程
  2. oozie 重新提交作业
  3. Hbuilder开发app实战-识岁03-文件上传
  4. 在Ubuntu 14.04 64bit上安装网易云音乐Linux版本(最新官方版)
  5. Flutter 1.0 正式版: Google 的便携 UI 工具包
  6. CATALINA_BASE与CATALINA_HOME的区别
  7. PHP也玩并发,巧用curl 并发减少后端访问时间
  8. CentOS 7系统LAMP配置PHP-FPM的示例
  9. 安卓程序代写 网上程序代写[原]Android之Bluetooth编程
  10. 【转】【Python】Python中的__init__.py与模块导入(from import 找不到模块的问题)