首页 > 其他分享 >Pageoffice6 实现后台批量生成Word文档

Pageoffice6 实现后台批量生成Word文档

时间:2024-02-22 17:00:11浏览次数:29  
标签:index Word 批量 荣誉证书 生成 Pageoffice6 文档 id

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

如果一次只生成一份文档,请参考后台生成单个Word文档;如果想要一次批量生成很多文档,那就需要使用PageOffice提供的 js 内置函数CallFileMaker循环调用FileMaker生成文档的功能,实现批量生成文档的效果,下面就以“批量生成荣誉证书”的需求为例,介绍一下如何使用FileMaker批量生成文档的功能。

  1. 需求效果:用户在页面上勾选要生成荣誉证书的公司名,然后点击批量生成的按钮,就可以把各个公司的信息动态填充到荣誉证书模板中,为每个公司生成一份荣誉证书文件。

  2. 荣誉证书模板如下图所示,为了简单起见,模板中只使用了公司名称来代表公司的所有信息,所以只用了一个数据区域“PO_company”来标记公司名称的位置。
    image

  3. 为了简单起见,下面介绍一下批量生成两份荣誉证书的过程。比如用户勾选了公司列表的前两个公司后,点击批量生成Word文件的按钮,如下图所示。
    image

  4. 点击按钮后,重复调用把公司信息动态填充到Word模板中生成荣誉证书的后台代码(比如:FileMaker.jsp),直到所有的荣誉证书文件都生成完毕。具体实现请参考下面的前端代码。如下图所示的两份荣誉证书,就是在服务器端文件夹下批量生成的两份Word文件:maker1.doc、maker2.doc。
    image

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

后端代码

  1. 在后端编写代码实现文档动态填充,比如FileMaker.jsp中关键代码如下:
String[] companyArr = {" ", "微软(中国)有限公司", "IBM(中国)服务有限公司", 
						"亚马逊贸易有限公司", "脸书科技有限公司", "谷歌网络有限公司",
						"英伟达技术有限公司","台积电科技有限责任公司", "沃尔玛股份有限公司"};
int id = Integer.parseInt(request.getParameter("id"));
FileMakerCtrl fmCtrl = new FileMakerCtrl(request);
WordDocument doc = new WordDocument();
//给数据区域赋值,即把数据填充到模板中相应的位置
doc.openDataRegion("PO_company").setValue(companyArr[id]);
fmCtrl.setSaveFilePage("SaveMaker.jsp?id=" + id);
fmCtrl.setWriter(doc);
fmCtrl.fillDocument("doc/template.doc", DocumentOpenType.Word);
  1. 在SaveFilePage属性指向的地址接口中(比如:SaveMaker.jsp),创建FileSaver对象处理文件的保存工作
String id = request.getParameter("id");
FileSaver fs = new FileSaver(request, response);
String fileName = "maker" + id + fs.getFileExtName();
fs.saveToFile(request.getSession().getServletContext().getRealPath("FileMaker/doc") + "/" + fileName);
fs.close();

前端代码

编写前端网页代码,实现批量生成文件的效果。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <title></title>
    <script type="text/javascript">
		var ids = [1,2]; //假设这就是用户勾选的两个公司的id
		
		function ConvertFiles() {
			document.getElementById("Button1").disabled = true;
			//启动批量生成文件,0:表示从第一个开始生成。通过递归调用ConvertFile完成批量生成文件。
			ConvertFile(ids, 0); 
		}

        function ConvertFile(idArr, index) {

            CallFileMaker({
                url: "FileMaker.jsp?id="+idArr[index], // FileMaker.jsp就是实现单个文件转换
                success: function () {
                    setProgress1(100);
					
					index++;
					setProgress2(index, idArr.length);
	
					if(index < idArr.length){
						ConvertFile(idArr, index);
					} 
                },
                progress: function (pos) {
                    setProgress1(pos);
                },
                error: function (msg) {
					document.getElementById("errorMsg").innerHTML = "发生错误: <br /> " + msg;
                    console.log("error occurred: "+msg);
                }
            });
        }
		
		function setProgress1(percent) {
			var progressBar = document.getElementById("progressBar1");
			progressBar.style.width = percent + '%';
			progressBar.innerText = percent + '%';
		}
		
		function setProgress2(index, count) {
			var progressBar = document.getElementById("progressBar2");
			progressBar.style.width = Math.round(index/count*100) + '%';
			progressBar.innerText = index + '/' + count;
		}
    </script>
	<style>
		.progressBarContainer {
		  width: 100%;
		  background-color: #eee;
		  border-radius: 5px;
		  padding: 3px;
		  box-shadow: 2px 2px 3px 3px #ccc inset;  
		}

		.progressBar {
		  height: 20px;
		  width: 0%;
		  background-color: #1A73E8;
		  border-radius: 5px;
		  text-align: center;
		  line-height: 20px; 
		  color: white;
		}
		
		#progressDiv{
			width:400px;
			margin: 10px auto;
			text-align: left;
			font-size:14px;
			border: solid 1px #1A73E8;
			padding:10px 20px;
			color: #1A73E8;
		}
		#errorMsg{
			color: red;
		}
	</style>
</head>
<body>
    <div style="text-align: center;">
		<h3>演示:填充数据到模板中批量生成word文件</h3>
		
        <input id="Button1" type="button" value="批量生成Word文件" onclick="ConvertFiles()"/><br/>

		<div id="progressDiv">
			单文件进度:
			<div class="progressBarContainer">
			  <div id="progressBar1" class="progressBar"></div>
			</div>
			整体进度:
			<div class="progressBarContainer">
			  <div id="progressBar2" class="progressBar"></div>
			</div>
			<div id="errorMsg"> </div>
		</div>
    </div>
</body>
</html>

标签:index,Word,批量,荣誉证书,生成,Pageoffice6,文档,id
From: https://www.cnblogs.com/qq742655/p/18027706

相关文章

  • (自用笔记)Word Embedding原理和Pytorch实现
    参考:(1)从WordEmbedding到Bert模型—自然语言处理中的预训练技术发展史-知乎(zhihu.com)(2)吴恩达深度学习(3)deep_thoughts老师的原理和代码讲解:https://space.bilibili.com/373596439越是底层的特征越是所有不论什么领域的图像都会具备的比如边角线弧线等底层基础特征,越往上......
  • java 如何生成doc文档
    cmd命令行:javadoc-encodingUTF-8-charsetUTF-8Doc.java或者在idea中下载差价javaDoc插件,来进行尝试,下载方法如下:如何使用详细教程可以面向百度......
  • 【机器学习科学库】全md文档笔记:Jupyter Notebook和Matplotlib使用(已分享,附代码)
    本系列文章md笔记(已分享)主要讨论人工智能相关知识。主要内容包括,了解机器学习定义以及应用场景,掌握机器学习基础环境的安装和使用,掌握利用常用的科学计算库对数据进行展示、分析,学会使用jupyternotebook平台完成代码编写运行,应用Matplotlib的基本功能实现图形显示,应用Matplotlib......
  • 软件开发全套技术文档|规格说明书|详细设计|测试计划|验收报告
    在软件全周期中,每个阶段都涉及不同的文档和支撑材料,以确保项目的顺利进行和最终的成功交付。以下是针对您列出的每个阶段所需的文档和支撑材料的简要概述。1.开发阶段需求文档:详细记录用户需求、业务需求和功能需求。设计文档:包括系统架构设计、数据库设计、接口设计等。开发......
  • 【油猴脚本】百度-原创力-人人-豆丁-道客-豆丁建筑文档下载
    【油猴脚本】百度-原创力-人人-豆丁-道客-豆丁建筑文档下载描述这是一个用于Tampermonkey或其他支持用户脚本的浏览器扩展的油猴脚本。看到论坛经常有小伙伴们需要下载某创力文档-某人文库一些免费文档,但是相关网站浏览体验不好各种广告,各种登录验证,需要很多步骤才能下载文档......
  • 【性能测试】性能测试工具LoadRunner,参数化关联。全md文档笔记(已分享文档代码)
    本系列文章md笔记(已分享)主要讨论性能测试相关知识。入门阶段:认识性能测试分类-(负载测试、压力测试、并发测试、稳定性测试),常用性能测试指标-(吞吐量、并发数、响应时间、点击数...),性能测试工具选择。性能脚本:1.LoadRunner介绍,2.脚本录制、运行、参数化,3.关联、检查点、事务......
  • 【深度学习】TensorFlow实现线性回归,代码演示。全md文档笔记(代码文档已分享)
    本系列文章md笔记(已分享)主要讨论深度学习相关知识。可以让大家熟练掌握机器学习基础,如分类、回归(含代码),熟练掌握numpy,pandas,sklearn等框架使用。在算法上,掌握神经网络的数学原理,手动实现简单的神经网络结构,在应用上熟练掌握TensorFlow框架使用,掌握神经网络图像相关案例。具体......
  • 初探富文本之文档diff算法
    初探富文本之文档diff算法当我们实现在线文档的系统时,通常需要考虑到文档的版本控制与审核能力,并且这是这是整个文档管理流程中的重要环节,那么在这个环节中通常就需要文档的diff能力,这样我们就可以知道文档的变更情况,例如文档草稿与线上文档的差异、私有化版本A与版本B之间的差异......
  • spark编写WordCount代码(scala)
    代码demopackagecom.spark.wordcountimportorg.apache.spark.SparkContextimportorg.apache.spark.SparkContext._importorg.apache.spark.SparkConfobjectWordCount{defmain(args:Array[String]){//文件位置valinputFile="hdfs://192.168.10......
  • bs4搜索文档树
    数据准备:#导入模块frombs4importBeautifulSoup#查询数据文本html_doc="""<html><head><title>TheDormouse'sstory</title></head><body><pclass="title"id='id_xx'xx='zz'&......