卓正--WORD在线编辑预览保存打印和多文件打印

1.先安装pageoffice4.5.0.13.jar

在包目录下打开cmd安装

mvn install:install-file -DgroupId=com.zhuozhengsoft -DartifactId=pageoffice -Dversion=4.5.0.13  -Dpackaging=jar  -Dfile=pageoffice4.5.0.13.jar
<!-- 添加PageOffice依赖(必须) -->
<dependency>
    <groupId>com.zhuozhengsoft</groupId>
    <artifactId>pageoffice</artifactId>
    <version>4.5.0.13</version>
</dependency>

2.在@SpringBootApplication项目启动文件里添加,服务器授权

${file.save.path}是在配置文件配置的放注册文件文件地址,随便设置

# pageoffice注册表保存地址
file:
  save:
    path: /
@Value("${file.save.path}")
String poSysPath;

/**
 * 添加PageOffice的服务器端授权程序Servlet(必须)
 * @return
 */
@Bean
public ServletRegistrationBean servletRegistrationBean() {
    Server poserver = new Server();
    //设置PageOffice注册成功后,license.lic文件存放的目录
    poserver.setSysPath(poSysPath);
    ServletRegistrationBean srb = new ServletRegistrationBean(poserver);
    srb.addUrlMappings("/poserver.zz");
    srb.addUrlMappings("/posetup.exe");
    srb.addUrlMappings("/pageoffice.js");
    srb.addUrlMappings("/jquery.min.js");
    srb.addUrlMappings("/pobstyle.css");
    srb.addUrlMappings("/sealsetup.exe");
    return srb;
} 

 3.java后台代码

package com.tlorder.order.controller;

@Controller
@RequestMapping("/pageOffice")
public class PageOfficeController extends BaseController {

    @Autowired
    private IWebPubFilesService webPubFilesService;
    @Autowired
    private IOrderMultiFileService orderMultiFileService;
    @Autowired
    private ISysUserService userService;

    //单据模板在线编辑
    @RequestMapping(value = "/onlineEditing", method = RequestMethod.GET)
    public ModelAndView onlineEditing(@PathParam("fid") Integer fid, @PathParam("Identification") Integer Identification, HttpServletRequest request, Map<String, Object> map) {
        //获取文件对象
        WebPubFiles webPubFiles = webPubFilesService.selectWebPubFilesById(Integer.valueOf(fid));

        //--- PageOffice的调用代码 开始 -----
        PageOfficeCtrl poCtrl = new PageOfficeCtrl(request);
        //设置服务器页面
        poCtrl.setServerPage("/poserver.zz");//设置授权程序servlet
        poCtrl.addCustomToolButton("保存", "Save()", 1); //添加自定义按钮
        poCtrl.addCustomToolButton("打印", "PrintFile()", 6);
        //poCtrl.addCustomToolButton("全屏/还原", "IsFullScreen()", 4);
        poCtrl.addCustomToolButton("关闭", "CloseFile()", 21);
        //隐藏功能
        poCtrl.setTitlebar(false); //隐藏标题栏
        poCtrl.setMenubar(false); //隐藏菜单栏
        poCtrl.setJsFunction_AfterDocumentOpened("afterDocumentOpened()");//设置软件打开后全屏js
        //设置保存页面
        //poCtrl.setSaveFilePage("saveFile?id=");//设置保存的action
        //打开 Word 文档
        //判断是否是打开源模板 还是 单据模板
        if (Identification == 1) {
            poCtrl.setSaveFilePage("saveFile?Identification=1&fileId=" + webPubFiles.getId());//设置保存的action
            poCtrl.webOpen(webPubFiles.getDataDiskpath(), OpenModeType.docNormalEdit, "");
        } else {
            poCtrl.setSaveFilePage("saveFile?Identification=1&fileId=" + webPubFiles.getId());//设置保存的action
            poCtrl.webOpen(webPubFiles.getDiskpath(), OpenModeType.docNormalEdit, "");
        }
        poCtrl.setCaption("word文档在线编辑");
        map.put("pageoffice", poCtrl.getHtmlCode("PageOfficeCtrl1"));
        //--- PageOffice的调用代码 结束 -----

        ModelAndView mv = new ModelAndView("/demo/pageoffice/pageoffice");
        return mv;
    }

    //模板在线编辑保存
    @RequestMapping(value = "/saveFile", method = RequestMethod.POST)
    public void saveFile(HttpServletResponse response, HttpServletRequest request) {
        String fileId = request.getParameter("fileId");
        String Identification = request.getParameter("Identification");
        //System.out.println("fileId=" + fileId);
        WebPubFiles webPubFiles = webPubFilesService.selectWebPubFilesById(Integer.valueOf(fileId));
        if (webPubFiles == null) {

        } else {
            String fileDiskPath = "";

            if (!Identification.equals("1")) {
                fileDiskPath = webPubFiles.getDiskpath();
            } else {
                fileDiskPath = webPubFiles.getDataDiskpath();
            }
            // System.out.println("fileDiskPath=" + fileDiskPath);
            FileSaver fs = new FileSaver(request, response);
            //保存文件
            fs.saveToFile(fileDiskPath);
            fs.close();
        }
    }

    //多文件打印
    @RequestMapping(value = "/filesURL", method = RequestMethod.GET)
    public String filesURL(@PathParam("masterNo") String masterNo, ModelMap mmap) {

        OrderMultiFile orderMultiFile = new OrderMultiFile();
        orderMultiFile.setMasterNo(masterNo);
        //须打印对象
        List<OrderMultiFile> orderMultiFileList = orderMultiFileService.selectOrderMultiFileList(orderMultiFile);
        mmap.put("orderMultiFileList", orderMultiFileList);
        return "/demo/pageoffice/printDefault";

    }

    //多文件打印
    @RequestMapping(value = "/printFiles")
    public ModelAndView printFiles(HttpServletRequest request, Map<String, Object> map) {
        FileMakerCtrl fmCtrl = new FileMakerCtrl(request);
        fmCtrl.setServerPage(request.getContextPath() + "/poserver.zz");
        String id = request.getParameter("id");
        OrderMultiFile orderMultiFile = orderMultiFileService.selectOrderMultiFileById(Integer.valueOf(id));
        if (id != null && id.length() > 0) {
            //WordDocument doc = new WordDocument();
            //给数据区域赋值,即把数据填充到模板中相应的位置
            //*doc.openDataRegion("PO_company").setValue("北京卓正志远软件有限公司  " + id);
            //fmCtrl.setSaveFilePage("Save.jsp?id=" + id);
            //fmCtrl.setWriter(doc);
            WebPubFiles webPubFiles = webPubFilesService.selectWebPubFilesById(orderMultiFile.getFileId());
            fmCtrl.setJsFunction_OnProgressComplete("OnProgressComplete()");
            fmCtrl.fillDocument(webPubFiles.getDataDiskpath(), DocumentOpenType.Word);
        }
        map.put("pageoffice", fmCtrl.getHtmlCode("FileMakerCtrl"));
        map.put("printNumber", orderMultiFile.getPrintNumber());
        ModelAndView mv = new ModelAndView("/demo/pageoffice/printFiles");
        return mv;
    }

    //单个文件打印
    @RequestMapping(value = "/fileURL", method = RequestMethod.GET)
    public String fileURL(@PathParam("id") Integer id, @PathParam("printNumber") String printNumber, ModelMap mmap) {
        OrderMultiFile orderMultiFile = orderMultiFileService.selectOrderMultiFileById(id);
        orderMultiFile.setPrintNumber(printNumber);
        List<OrderMultiFile> orderMultiFileList = new ArrayList<OrderMultiFile>();
        orderMultiFileList.add(orderMultiFile);
        mmap.put("orderMultiFileList", orderMultiFileList);
        return "/demo/pageoffice/printDefault";
    }
}

4.HTML代码

一、单个文件的在线编辑打印保存

<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<head>
    <meta charset="UTF-8">
    <th:block th:include="include :: header('在线编辑Office文件')"/>
    <script type="text/javascript" src="/jquery.min.js"></script>
    <script type="text/javascript" src="/pageoffice.js" id="po_js_main"></script>
</head>
<body>
<div class="pageofficeCss" th:utext="${pageoffice}"></div>
<div th:include="include :: footer"></div>
<script type="text/javascript">
    $(function () {
        var width = $(window).width()+'px';
        var height = $(window).height()+'px';
        $(".pageofficeCss").css({"width":width,"height":height});
    });
    //打开页面后调用全屏JS
    function afterDocumentOpened(){
        document.getElementById("PageOfficeCtrl1").FullScreen = true;
    }
    function Save() {
        document.getElementById("PageOfficeCtrl1").WebSave();
    }
    //打印按钮
    function PrintFile(){
        document.getElementById("PageOfficeCtrl1").ShowDialog(4);
    }
    //全屏切换按钮
    function IsFullScreen(){
        document.getElementById("PageOfficeCtrl1").FullScreen = !document.getElementById("PageOfficeCtrl1").FullScreen;

    }
    //关闭按钮
    function CloseFile(){
        window.external.close();
    }
    //关闭前提示
    function BeforeBrowserClosed(){
        if (document.getElementById("PageOfficeCtrl1").IsDirty){
            if(confirm("提示:文档已被修改,是否继续关闭放弃保存 ?"))
            {
                return  true;

            }else{

                return  false;
            }

        }
    }
</script>
</body>
</html>

二、多个文件打印

(1).进度条页

<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<head>
    <meta charset="UTF-8">
    <th:block th:include="include :: header('打印单据')"/>
    <!-- office插件js begin 必须引入-->
    <script type="text/javascript" src="/jquery.min.js"></script>
    <script type="text/javascript" src="/pageoffice.js" id="po_js_main"></script>
</head>
<body>
<form id="form1">
    <div id="ProgressBarSide" style="color: Silver; width: 200px; visibility: hidden;
        position: absolute;  left: 40%; top: 50%; margin-top: -32px">
        <span style="color: gray; font-size: 12px; text-align: center; "id="ProgressSpan">正在发送文件到打印机请稍候...</span><br/>
        <div style=" border:solid 1px green;">
            <div id="ProgressBar"
                 style="background-color: Green; height: 16px; width: 0%; border-width: 1px;border-style: Solid;">
            </div>
        </div>
    </div>
    <div style="text-align: center;" >
        <br/>
        <input hidden id="Button1" type="button" value="打印Word文件" οnclick="ConvertFiles()"/>
        <div id="aDiv" style="display: none; color: Red; font-size: 24px;">
            <button id="closeButton"  class="btn btn-success" style="size: 26px;width: 240px;height: 40px" οnclick="closetself()">关闭</button>
        </div>
    </div>
    <div style="width: 1px; height: 1px; overflow: hidden;">
        <iframe id="iframe1" name="iframe1" src=""></iframe>
    </div>
</form>
<div th:include="include :: footer"></div>
<script th:inline="javascript">
    $(function () {
        document.getElementById("Button1").click();
    });
    var orderMultiFileList = [[${orderMultiFileList}]];
    var count = 1;

    function ConvertFiles() {
        if (count <= orderMultiFileList.length) {
            //设置进度条
            document.getElementById("ProgressBarSide").style.visibility = "visible";
            document.getElementById("ProgressBar").style.width = (count) * (100 / orderMultiFileList.length) - 1 + "%";

            //加载文档打印页面(可传参)
            filesSrc = "/pageOffice/printFiles?id=" + orderMultiFileList[count - 1].id ;
            //alert("filesSrc=" + filesSrc);
            document.getElementById("iframe1").src = filesSrc;
            count++;
        } else {
            //隐藏进度条div
            document.getElementById("ProgressBarSide").style.visibility = "hidden";
            count = 1;
            //重置进度条
            document.getElementById("ProgressBar").style.width = "0%";
            document.getElementById("aDiv").style.display = "";
            loadingclose();
            //alert('批量转换完毕!');
        }
    }
    function  closetself() {
        window.external.close();
    }
    var time = 5;
    var timeSet;
    function loadingclose(){
        time=time-1;
        var closeButton = $("#closeButton");
        if(time == 0){
            window.external.close();
        }else{
            closeButton.text("执行完毕("+time+")秒后自动关闭");
            timeSet = setTimeout(function() {
                loadingclose();
            },1000)
        }
    }
</script>
</body>
</html>

 (2)、打印页

<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<head>
    <meta charset="UTF-8">
    <th:block th:include="include :: header('在线编辑Office文件')"/>
    <!-- office插件js begin 必须引入-->
    <script type="text/javascript" src="/jquery.min.js"></script>
    <script type="text/javascript" src="/pageoffice.js" id="po_js_main"></script>
    <script type="text/javascript" src="/tlorder/js/common.js"></script>
</head>
<body>
    <input type="hidden" id="printNumber" th:utext="${printNumber}">
    <div class="pageofficeCss" th:utext="${pageoffice}"></div>

<div th:include="include :: footer"></div>
</body>
<!--**************   卓正 PageOffice 客户端代码开始    ************************-->
<script language="javascript" type="text/javascript">
var printNumbers = $("#printNumber").val();
    $(function () {
        var width = $(window).width()+'px';
        var height = $(window).height()+'px';
        $(".pageofficeCss").css({"width":width,"height":height});
    });

    function OnProgressComplete() {
        var printer=getCookie("tenglong_printer");
        document.getElementById("FileMakerCtrl").PrintOut(false,printer,printNumbers);
        window.parent.ConvertFiles(); //调用父页面的js函数
    }
</script>
<!--**************   卓正 PageOffice 客户端代码结束    ************************-->
</html>

5.JS代码

 pageoffice有兼容问题要导入jquery.min.js和pageoffice.js

common.js主要放的是cookie的代码:

https://blog.csdn.net/qq_42307369/article/details/103157214

<!-- office插件js begin 必须引入-->
<script type="text/javascript" src="/jquery.min.js"></script>
<script type="text/javascript" src="/pageoffice.js" id="po_js_main"></script>
<script type="text/javascript" src="/tlorder/js/common.js"></script>
//打印全部单据
function printing(masterNo) {
    var url = ctx + "pageOffice" + "/filesURL?masterNo=" + masterNo;
    var printer = getCookie("tenglong_printer");
    if (printer == null) {
        if (tlprint == null) {
            setPrinter();
            return;
        }
        else {
            setCookie("tenglong_printer",tlprint);
        }
    }
    POBrowser.openWindowModeless(url, 'width=550px;height=350px;')
}


//单个文件打印
function prints(id,printNumber) {
    var url = ctx + "pageOffice" + "/fileURL?id=" + id+"&printNumber="+printNumber;
    POBrowser.openWindowModeless(url, 'width=550px;height=350px;')
}

//文件在线编辑
function onlineEditing(fileId) {
    var Identification = 1;
    var selectRows = $("#bootstrap-table").bootstrapTable('getSelections', function (row) {
        return row;
    });
    var url = ctx + "pageOffice" + "/onlineEditing?fid=" + fileId + "&Identification=" + Identification;
    POBrowser.openWindowModeless(url, 'width=' + width + ';height=' + height + ';')
}

//设置打印机
function setPrinter() {
    var url = ctx + "system/user/edit";
    layer.open({
        type: 1,
        area: ['300px', '140px'],
        //固定
        maxmin: false,
        shade: 0.3,
        title: '设置打印机',
        content: ""
            + "<div class='col-sm-12'>"
            + "<input id='printer' name='printer' placeholder='请输入打印机名称' class='form-control'/>"
            + "</div>",
        btn: ['确定', '关闭'],
        // 弹层外区域关闭
        shadeClose: true,
        yes: function (index, layero) {
            var printer = $("#printer").val();
            setCookie("tenglong_printer", printer);
            layer.close(index);
        },
    });
}
发布了32 篇原创文章 · 获赞 6 · 访问量 6857

猜你喜欢

转载自blog.csdn.net/qq_42307369/article/details/103163923