PHP 读取mpp文件

注:我说使用的php7.3和7.4,现在都版本还没有直接读取PHP文件扩展,所以要想读取mpp文件,只能间接调取Java的类,Java读取mpp文件,传输数据到php

一、先搭建javaBridge的桥之后才能读取, 具体的我在之前就已经谢国怎么搭建了,与那个类似

1、先下载jar包,https://php-java-bridge.sourceforge.net/pjb/download.php

下载这两个文件之后随便放在哪里都可以,然后在JavaBridge.jar所在文件的位置,执行cmd,在或者win+R打开操作界面切换到jar包所在的位置,执行java -jar JavaBridge.jar的命令之后就会弹出一个小框,点击确认(前提是已经有jdk8,不然的话就得先安装jdk8,网上有很多教程),之后就开启了8080 端口,现在与jar包同一目录下就有一个JavaBridge.log的文件

打开文件就会有下图的东西,

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

2、修改php.ini里的allow_url_include为ON,重启PHP

3、接下来就是在PHP文件中操作

新建一个php文件,编写一下代码,

public function test(){
        require_once "D:\pho_java_bridge\Java.inc";//自己文件的位置
        $System = java("java.lang.System");
        echo $System->getProperties();
        // echo phpinfo();

    }

如果输出为

输出内容大同小异,没有报错说明就成功了,执行一下代码就可以(但是这种方法我没有成功,php一直找到不到net.sf.mpxj.mpp.MPPReade包,所以这种方法失败,我先使用Java读取mpp文件之后,将java程序打了一个jar包,php读取自己的java jar包成功了)

<?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:8080/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;
}

二、Java读取mpp文件打jar包读取

1、下边的代码就是我的读取mpp文件的核心方法,

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();
}
}

2、打jar包的方法我就不介绍了,网上有很多教程,打完jar包之后,将jar包放在自己jdk文件放在JavaBridge.log中多说的那个位置,我在上边的图中有画出来,有可能不一样所以就不说我的了,然后在php文件中new自己java文件中的类,

有人写的是new Java("类名"),但是我的是不成功的,我只有java("类名")才能成功这样的话就可以了

现在说的很简单,其实我在整这个的时候很困难,不是这个问题就是那个问题,但是这个真的确实是这个过程,问题太零碎了,遇到问题,就在回文档开头在看看是不是有什么步骤遗漏了,每一步都很重要。

linux部署php读取mpp文件我也分享了文章,在下下篇文章中,标题是linux php读取mpp文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值