1. 程式人生 > >php解析mpp文件

php解析mpp文件

export 所在 $resource test get except 安裝 all jdk

php沒有找到相應的包

Java的mpxj可以實現

所以借助JavaBridge.jar

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下面

測試

在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:8089

註:

  不加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

php解析mpp文件