麒麟v10、uos系统在线批量生成pdf文件

注意

本文中展示的代码均为关键代码,复制粘贴到您的项目中,按照实际的情况,例如文档路径,用户名等做适当修改即可使用。

 在实际项目开发中如果遇到批量动态生成PDF文档的需求,只需参考后台批量生成PDF文档,目前网上也有一些针对此需求的方案,如果您想要了解这些方案的对比,请查看后台生成单个Word文档中的“方案对比”。

如果只是需要批量转PDF文件,那么也可以使用PageOffice提供的FileMaker组件来实现,与“后台批量生成PDF文档”不同的地方仅是:批量转PDF文件不需要WordDocumentWriter对象动态填充数据的代码。所以批量转PDF文件也只需两步即可实现:

  1. 调用FileMakerCtrl对象的fillDocumentAsPDF方法实现Word转PDF功能,比如Convert.jsp中调用了此代码;
    fmCtrl.fillDocumentAsPDF("doc01.doc", DocumentOpenType.Word, "doc01.pdf");
    
  2. 调用PageOffice提供的jsCallFileMaker函数,递归执行Convert.jsp实现批量转PDF文件功能,比如执行下面的ConvertFiles(),递归调用ConvertFile函数,把ids数组中包含的所有Word文件转为pdf。
    var ids = [1, 2, 3, 5]; //比如这是Word文件在数据库中的id
    
    function ConvertFiles() {
    	ConvertFile(ids, 0); 
    }
    
    function ConvertFile(idArr, index) {
    	filemakerctrl.SaveFilePage = "/FileMakerConvertPDFs/SaveFile.jsp?id=" + idArr[index];
    	filemakerctrl.CallFileMaker({
    		url: "/FileMakerConvertPDFs/Convert.jsp?id="+idArr[index], //把指定id的word文件转pdf
    		success: function (customSaveResult) {
    			console.log("completed successfully.");
    			index++;
    			
    			if(index < idArr.length){
    				ConvertFile(idArr, index);
    			} 
    		},
    		progress: function (pos) {
    			console.log("running "+pos+"%");
    		},
    		error: function (msg) {
    			console.log("error occurred: "+msg);
    		}
    	});
    }
    

    FileMakerCtrl 和 PageOfficeCtrl 的区别

    FileMakerCtrl 本质上就是一个没有界面的 PageOfficeCtrl,也是调用客户端 Office 程序处理文件的,都可以实现对文档进行动态填充、动态转 PDF 等功能,唯一的区别就是 FileMakerCtrl 在线打开填充和转换文档的时候,客户端页面不打开显示文档内容,而 PageOfficeCtrl 会打开显示文档内容。

后端代码

  1. 调用FileMakerCtrl对象实现Word转pdf,比如后端/convert方法的代码如下:
    String id = request.getParameter("id").trim();
    String docName = "doc0" + id + ".doc";
    String pdfName = "doc0" + id + ".pdf";
    
    FileMakerCtrl fmCtrl = new FileMakerCtrl(request);
    fmCtrl.fillDocumentAsPDF("doc/" + docName, DocumentOpenType.Word, pdfName);
    out.print(fmCtrl.getHtml());
    
  2. Word转pdf后,在SaveFilePage属性指向的地址接口中处理文件保存的后台代码如下:
    FileSaver fs = new FileSaver(request, response);
    fs.saveToFile(request.getSession().getServletContext().getRealPath("FileMakerConvertPDFs/doc/"+ fs.getFileName()));
    fs.setCustomSaveResult("{\"msg\":\"ok\"}");//用于给前端页面返回数据
    fs.close();       
    

前端代码

调用PageOffice提供的jsCallFileMaker函数,递归执行/convert实现批量转PDF文件功能的前端页面代码,如下:






 参考链接:批量转PDF文件 | PageOffice 开发者中心

 

你可能感兴趣的:(pdf,pageoffice,word,java,在线编辑)