pageoffice+thinkphp结合

安装pageoffice什么的就不说了,拿到官方demo如何与thinkphp对接
以下是创建,只读,表单,签名盖章的示例。粗糙的封装了一下

新建个控制器类

<?php
namespace app\index\controller;

use think\Controller;
use JavaC;
class Index extends Controller
{

    public function index()
    {
        return $this->fetch();

    }
    public function two()
    {
        require './SimpleWord/Word.php';
    }
    public function one()
    {
        $java=new JavaC;
        return $java->open('\\st\\test.doc');
    }

    public function SaveFile()
    {
        $java=new JavaC;
        $java->SaveFile('st\\');
    }

    public function SaveNewFile()
    {
        $java=new JavaC;
        $name=uniqid().'.doc';
        $java->SaveNewFile('st\\'.$name);
    }
    public function add()
    {
        $java=new JavaC;
        $name='\\st\\u2_'.uniqid().'.doc';
        $java->add($name);
        $java->open($name);
    }

    public function reader()
    {
        $java=new JavaC;
        $name='\\st\\test.doc';
        return $java->reader($name);
    }

    public function form()
    {
        $java=new JavaC;
        $name='\\st\\form.doc';
        return $java->submit($name);
    }

    public function SaveData()
    {
        $java=new JavaC;
        return $java->SaveData();
    }

    public function add_zhang()
    {
        $java=new JavaC;
        $name='\\st\\form.doc';
        return $java->add_zhang($name);
    }
}

extend文件夹下新建JavaC类

JavaC类中仍可以请求参数 如input(),可用于获取id,和word文件名等

<?php


class JavaC
{
    protected $PageOfficeCtrl;
    protected $OpenMode;
    protected $ip;
    protected $fs;
    protected $path;

    public function __construct()
    {

        $ip = GetHostByName($_SERVER['SERVER_NAME']); //获取本机IP
        require_once("http://" . $ip . ":8080/JavaBridge/java/Java.inc");//此行必须
        $PageOfficeCtrl = new Java("com.zhuozhengsoft.pageoffice.PageOfficeCtrlPHP");//此行必须

        $OpenMode = new Java("com.zhuozhengsoft.pageoffice.OpenModeType");

        $fs = new Java("com.zhuozhengsoft.pageoffice.FileSaverPHP");//此行必须

        $PageOfficeCtrl->setServerPage("http://" . $ip . ":8080/JavaBridge/poserver.zz");//此行必须,设置服务器页面
        java_set_file_encoding("GBK");//设置中文编码,若涉及到中文必须设置中文编码
        //打开excel文档
        $PageOfficeCtrl->UserAgent = $_SERVER['HTTP_USER_AGENT'];//若使用谷歌浏览器此行代码必须有,其他浏览器此行代码可不加

        $path = str_replace('public', '', $_SERVER['DOCUMENT_ROOT']) . 'word/';
        $path = realpath($path);

        $this->path = $path;
        $this->ip = $ip;
        $this->fs = $fs;
        $this->PageOfficeCtrl = $PageOfficeCtrl;
        $this->OpenMode = $OpenMode;

    }

    public function get($name)
    {
        return $this->$name;
    }

    public function open($name)
    {
        $PageOfficeCtrl = $this->PageOfficeCtrl;
        $OpenMode = $this->OpenMode;
        $this->_btn($PageOfficeCtrl);
        $file_name = $this->path . $name;

        $PageOfficeCtrl->setSaveFilePage("SaveFile");//设置保存页面

        $PageOfficeCtrl->webOpen($file_name, $OpenMode->docNormalEdit, "aa");//此行必须
        return $PageOfficeCtrl->getDocumentView("PageOfficeCtrl1");
    }

    public function reader($name)
    {
        $PageOfficeCtrl = $this->PageOfficeCtrl;
        $OpenMode = $this->OpenMode;
        $this->_btn($PageOfficeCtrl);
        $file_name = $this->path . $name;

        $this->stop_copy($PageOfficeCtrl);

        $PageOfficeCtrl->webOpen($file_name, $OpenMode->docReadOnly, "bb");//只读模式打开word文档,此行必须
        return $PageOfficeCtrl->getDocumentView("PageOfficeCtrl1");
    }

    public function SaveFile($middel_path)
    {
        $fs = $this->fs;
        $fs->load(file_get_contents("php://input"));//此行必须
        $file = $this->path . '\\' . $middel_path . $fs->getFileName();
        $fs->saveToFile($file); //保存文件
        echo $fs->close();//此行必须
    }

    public function SaveNewFile($file_name)
    {
        $fs = $this->fs;
        $fs->load(file_get_contents("php://input"));//此行必须
        $file = $this->path . '\\' . $file_name;
        $fs->saveToFile($file); //保存文件
        $fs->setCustomSaveResult("ok");
        echo $fs->close();//此行必须
    }

    public function add($name)
    {
        $filepath=$this->path;
        $oldPath=$filepath.'\st\empty.doc';
        $newPath=$filepath.$name;
        $flg = copy($oldPath, $newPath);
        if(!$flg){
            throw new Exception('创建失败');
        }
    }

    //提交Word中的用户输入内容
    public function submit($name)
    {
        $PageOfficeCtrl = $this->PageOfficeCtrl;
        $OpenMode = $this->OpenMode;
        $PageOfficeCtrl->setOfficeToolbars(false);//隐藏Office工具条

        $doc = new Java("com.zhuozhengsoft.pageoffice.wordwriter.WordDocument");//声明WordDocument变量
        $dataRegion1 = $doc->openDataRegion("PO_userName");//打开数据区域,openDataRegion方法的参数代表Word文档中的书签名称
        $dataRegion1->setEditing(true);//设置DataRegion的可编辑性
        $dataRegion1->setValue("");//为DataRegion赋值,此处的值可在页面中打开Word文档后自己进行修改
        $dataRegion2 = $doc->openDataRegion("PO_deptName");
        $dataRegion2->setEditing(true);
        $dataRegion2->setValue("");
        $PageOfficeCtrl->setWriter($doc);

        $this->_btn($PageOfficeCtrl);
        $PageOfficeCtrl->setSaveDataPage("SaveData");//设置保存页面

        $filepath=$this->path.$name;
        $PageOfficeCtrl->webOpen($filepath, $OpenMode->docSubmitForm, "张三");//此行必须
        echo $PageOfficeCtrl->getDocumentView("PageOfficeCtrl1");
    }

    public function _btn($PageOfficeCtrl)
    {
        //添加自定义按钮
        $PageOfficeCtrl->addCustomToolButton("save", "Save", 1);
        $PageOfficeCtrl->addCustomToolButton("打印", "PrintFile", 6);
        $PageOfficeCtrl->addCustomToolButton("全屏/还原", "IsFullScreen", 4);
        $PageOfficeCtrl->addCustomToolButton("-", "", 0);
        $PageOfficeCtrl->addCustomToolButton("关闭", "Close", 21);
        echo "<script>";
        echo 'function IsFullScreen() {
    document.getElementById("PageOfficeCtrl1").FullScreen = !document.getElementById("PageOfficeCtrl1").FullScreen;
}
 function Save() {
              document.getElementById("PageOfficeCtrl1").WebSave();
        }
        ';
        echo "</script>";
    }

    public function stop_copy($PageOfficeCtrl)
    {
        $PageOfficeCtrl->setAllowCopy(false);//禁止拷贝
        $PageOfficeCtrl->setMenubar(false);//隐藏菜单栏
        $PageOfficeCtrl->setOfficeToolbars(false);//隐藏Office工具条
        $PageOfficeCtrl->setCustomToolbar(false);//隐藏自定义工具栏
        $PageOfficeCtrl->setJsFunction_AfterDocumentOpened("AfterDocumentOpened");
        echo "<script>";
        echo 'function AfterDocumentOpened() {
            document.getElementById("PageOfficeCtrl1").SetEnableFileCommand(3, false); // 禁止保存
            document.getElementById("PageOfficeCtrl1").SetEnableFileCommand(4, false); // 禁止另存
            document.getElementById("PageOfficeCtrl1").SetEnableFileCommand(5, false); //禁止打印
            document.getElementById("PageOfficeCtrl1").SetEnableFileCommand(6, false); // 禁止页面设置
        }';
        echo "</script>";
    }

    public function SaveData()
    {
        $doc = new Java("com.zhuozhengsoft.pageoffice.wordreader.WordDocumentPHP");
        $doc->load(file_get_contents("php://input"));
        $dataUserName = $doc->openDataRegion("PO_userName");
        $dataDeptName = $doc->openDataRegion("PO_deptName");


        $content = "";
        $content .= "<br/>员工姓名:".$dataUserName->getValue();
        echo $content .= "<br/>部门名称:".$dataDeptName->getValue();

        $doc->showPage(500, 400);//弹窗
        echo $doc->close();
    }

    public function add_zhang($name)
    {
        $PageOfficeCtrl = $this->PageOfficeCtrl;
        $OpenMode = $this->OpenMode;

        $PageOfficeCtrl->setMenubar(false);//隐藏菜单栏
        $PageOfficeCtrl->setOfficeToolbars(false);//隐藏Office工具条
        //添加自定义按钮
        $PageOfficeCtrl->addCustomToolButton("加盖印章", "InsertSeal()", 2);
        $PageOfficeCtrl->addCustomToolButton("签字", "AddHandSign()", 3);
        $PageOfficeCtrl->addCustomToolButton("验证印章", "VerifySeal()", 5);
        $PageOfficeCtrl->addCustomToolButton("修改密码", "ChangePsw()", 0);
        $PageOfficeCtrl->setSaveFilePage("SaveFile");//设置保存页面

        $file_name = $this->path . $name;
        $PageOfficeCtrl->webOpen($file_name, $OpenMode->docNormalEdit, "张三");//此行必须
        echo '<input type="button" value="设置父窗口Count的值加5,并关闭窗口" onclick="increaseCountAndClose(5);" /></br>';
        echo $PageOfficeCtrl->getDocumentView("PageOfficeCtrl1");

        echo "<script>";
        echo '
        function InsertSeal() {
            try {
                document.getElementById("PageOfficeCtrl1").ZoomSeal.AddSeal();
            }
            catch (e) { }
        }
        function AddHandSign() {
            document.getElementById("PageOfficeCtrl1").ZoomSeal.AddHandSign();
        }
        function VerifySeal() {
            document.getElementById("PageOfficeCtrl1").ZoomSeal.VerifySeal();
        }
        function ChangePsw() {
            document.getElementById("PageOfficeCtrl1").ZoomSeal.ShowSettingsBox();
        }
        function increaseCountAndClose(value) {
           var sResult = window.external.CallParentFunc("updateCount("+value+");");
           window.external.close();
        }';
        echo "</script>";
    }
}

以上是示例,自行加上数据库操作即可

遇见个匪夷所思的问题

echo name; //显示的是字符串 dump(name); //打印出的是对象
于是只能用$name->__client->arg->val; 获取字符串

       $name=$doc->openDataRegion("PO_userName")->getValue();  //dump($name)是对象
        echo $name; //这句不能少,想不通
        $name=$name->__client->arg->val;    //获取到字符串
        $name=$this->unicode_encode($name); //转unicode
        $data['name']=$this->unicode_decode($name,'UTF-8');  //unicode转utf8
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,284评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,115评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,614评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,671评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,699评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,562评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,309评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,223评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,668评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,859评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,981评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,705评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,310评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,904评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,023评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,146评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,933评论 2 355

推荐阅读更多精彩内容