网站倒计时,重庆网站建设找重庆最佳科技,广告设计公司取名,大名做网站PageOffice 国产版 #xff1a;支持信创系统#xff0c;支持银河麒麟V10和统信UOS#xff0c;支持X86#xff08;intel、兆芯、海光等#xff09;、ARM#xff08;飞腾、鲲鹏、麒麟等#xff09;、龙芯#xff08;LoogArch#xff09;芯片架构。
PageOffice 版本支持信创系统支持银河麒麟V10和统信UOS支持X86intel、兆芯、海光等、ARM飞腾、鲲鹏、麒麟等、龙芯LoogArch芯片架构。
PageOffice 版本6.4.1.1及以上版本
在实际项目开发中经常会遇到后台动态生成文档的需求目前网上有一些针对此需求的方案如果您想要了解这些方案的对比请查看后台生成单个Word文档中的“方案对比”。
如果一次只生成一份文档请参考后台生成单个PDF文档如果想要一次批量生成很多PDF文档比如批量生成入学通知书、毕业证书或者员工信息档案等那就需要使用PageOffice提供的 js 内置函数CallFileMaker循环调用FileMaker生成文档的功能实现批量生成文档的效果。FileMaker动态生成PDF文件的过程是在客户端动态生成 Office 文档并自动另存为PDF格式上传到服务器但是不在客户端打开显示文档看起来就好像是在服务器端直接生成的PDF文件。所以PageOffice提供的解决方案只需两步
首先调用FileMakerCtrl对象和WordDocumentWriter对象实现动态填充Word模板生成正式的Word文件并自动另存为PDF实现动态生成PDF文档。然后递归调用PageOffice提供的js函数CallFileMaker循环执行上一步的动态生成PDF操作实现批量动态生成PDF文档的功能。
下面就以“批量生成荣誉证书”的需求为例介绍一下如何使用FileMaker批量生成PDF文档的功能。
需求效果用户在页面上勾选要生成荣誉证书的公司名然后点击批量生成的按钮就可以把各个公司的信息动态填充到荣誉证书的Word模板中为每个公司生成一份荣誉证书的PDF文件。荣誉证书模板如下图所示为了简单起见模板中只使用了公司名称来代表公司的所有信息所以只用了一个数据区域“PO_company”来标记公司名称的位置。 为了简单起见下面介绍一下批量生成两份荣誉证书的过程。比如用户勾选了公司列表的前两个公司后点击批量生成PDF的按钮如下图所示。 点击按钮后重复调用把公司信息动态填充到Word模板中生成荣誉证书的后台代码比如/FileMaker直到所有的荣誉证书文件都生成完毕。具体实现请参考下面的前端代码。如下图所示的两份荣誉证书就是在服务器端文件夹下批量生成的两份PDF文件maker1.pdf、maker2.pdf。 FileMakerCtrl 和 PageOfficeCtrl 的区别 FileMakerCtrl 本质上就是一个没有界面的 PageOfficeCtrl也是调用客户端 Office 程序处理文件的FileMakerCtrl和PageOfficeCtrl都可以实现对文档进行动态填充、动态转 PDF 等功能唯一的区别就是 FileMakerCtrl 在线打开填充和转换文档的时候Web页面不会打开显示文档内容而 PageOfficeCtrl 会弹出窗口打开显示文档内容。 后端代码
在后端编写代码实现文档动态填充比如/FileMaker中关键代码如下
String[] companyArr { , 微软中国有限公司, IBM中国服务有限公司, 亚马逊贸易有限公司, 脸书科技有限公司, 谷歌网络有限公司,英伟达技术有限公司,台积电科技有限责任公司, 沃尔玛股份有限公司};
int id Integer.parseInt(request.getParameter(id));
FileMakerCtrl fmCtrl new FileMakerCtrl(request);
WordDocumentWriter doc new WordDocumentWriter();
//给数据区域赋值即把数据填充到模板中相应的位置
doc.openDataRegion(PO_company).setValue(companyArr[id]);
fmCtrl.setWriter(doc);
fmCtrl.fillDocumentAsPDF(doc/template.doc, DocumentOpenType.Word, a.pdf);
out.print(fmCtrl.getHtml());在SaveFilePage属性指向的地址接口中创建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.setCustomSaveResult({\msg\:\ok\});//用于给前端页面返回数据
fs.close();前端代码
编写前端网页代码通过CallFileMaker循环调用FileMaker生成文档的功能实现批量生成PDF文件的效果。
script setup
import request from /utils/request;
import { ref, onMounted } from vue
import { filemakerctrl } from js-pageofficeconst titleText ref();
const ids [];
const buttonDisabled ref(false);
const progressBar1 ref(null);
const progressBar2 ref(null);onMounted(async () {try {const response await request({url: /index,method: get,});titleText.value response;} catch (error) {console.error(Failed to fetch title:, error);}
})function ConvertFiles() {var checkboxes document.getElementsByName(company);for (var i 0; i checkboxes.length; i) {if (checkboxes[i].checked) {// 如果checkbox被选中ids.push(checkboxes[i].value);}}if (0 ids.length) {alert(请至少选择一个公司);return;}buttonDisabled.value true;ConvertFile(ids, 0);
}
function ConvertFile(idArr, index) {// 设置用于保存文件的服务器端controller地址,该地址需从/开始指向服务器端根目录/** 如果想要给SaveFilePage传递多个参数建议使用new URLSearchParams方式例如
* let saveFileUrl /FileMaker/save;
* let paramValue new URLSearchParams({id:1,name:张三});
* filemakerctrl.SaveFilePage ${saveFileUrl}?${paramValue.toString()};
*/filemakerctrl.SaveFilePage /FileMaker/save?id idArr[index];filemakerctrl.CallFileMaker({// url指向服务器端FileMakerCtrl打开文件的controller地址该地址需从/开始指向服务器端根目录 url: /FileMaker/FileMaker?id idArr[index],success: (res) {//res获取服务器端fs.setCustomSaveResult设置的保存结果console.log(res);console.log(completed successfully.);setProgress1(100);index;setProgress2(index, idArr.length);if (index idArr.length) {ConvertFile(idArr, index);}},progress: (pos) {console.log(running pos %);setProgress1(pos);},error: (msg) {console.log(error occurred: msg);},});
}
function setProgress1(percent) {progressBar1.value.style.width percent %;progressBar1.value.innerText percent %;
}
function setProgress2(index, count) {progressBar2.value.style.width Math.round((index / count) * 100) %;progressBar2.value.innerText index / count;
}
/scripttemplatediv classWorddiv styletext-align: centerh3演示填充数据到模板中批量生成PDF文件/h3div stylewidth: 600px; margin: 0 auto; font-size: 14pxp styletext-align: left演示内容br /nbsp;nbsp;nbsp;nbsp;本示例演示了批量生成荣誉证书的效果。选择需要生成荣誉证书的公司然后点击“批量生成PDF文件”按钮就可以把各个公司名动态填充到荣誉证书模板“template.doc”中为每个公司生成一份荣誉证书文件。/pp styletext-align: left操作说明br /1. 勾选下面的公司名称br /2. 点击“批量生成PDF文件”按钮br /3. 生成完毕后即可在“FileMaker/doc”目录下看到批量生成的PDF文件。br //p/divhr /ul classcompany-listlilabel1input namecompany value1 typecheckbox /微软中国有限公司/label/lililabel2input namecompany value2 typecheckbox /IBM中国服务有限公司/label/lililabel3input namecompany value3 typecheckbox /亚马逊贸易有限公司/label/lililabel4input namecompany value4 typecheckbox / 脸书科技有限公司/label/lililabel5input namecompany value5 typecheckbox / 谷歌网络有限公司/label/lililabel6input namecompany value6 typecheckbox /英伟达技术有限公司/label/lililabel7input namecompany value7 typecheckbox /台积电科技有限责任公司/label/lililabel8input namecompany value8 typecheckbox /沃尔玛股份有限公司/label/li/ulinput idButton1 typebutton :disabledbuttonDisabled value批量生成PDF文件 clickConvertFiles() /br /div idprogressDiv单文件进度div classprogressBarContainerdiv idprogressBar1 refprogressBar1 classprogressBar/div/div整体进度div classprogressBarContainerdiv idprogressBar2 refprogressBar2 classprogressBar/div/div/div/div/div
/templatestyle scoped
h3 {display: block;font-size: 1.17em;margin-block-start: 1em;margin-block-end: 1em;margin-inline-start: 0px;margin-inline-end: 0px;font-weight: bold;
}
h2 {display: block;font-size: 1.5em;margin-block-start: 0.83em;margin-block-end: 0.83em;margin-inline-start: 0px;margin-inline-end: 0px;font-weight: bold;
}
.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;
}
.company-list {list-style-type: none;padding: 0;margin: 0 auto;width: 400px;
}
.company-list li {display: flex;justify-content: space-between;align-items: center;margin-bottom: 10px;
}
.company-list label {display: block;font-weight: bold;margin-bottom: 5px;
}
.company-list input[typecheckbox] {margin-right: 5px;
}
/style参考链接后台批量生成PDF文档 文章转载自: http://www.morning.tjcgl.cn.gov.cn.tjcgl.cn http://www.morning.qcfgd.cn.gov.cn.qcfgd.cn http://www.morning.mcjxq.cn.gov.cn.mcjxq.cn http://www.morning.4r5w91.cn.gov.cn.4r5w91.cn http://www.morning.jlthz.cn.gov.cn.jlthz.cn http://www.morning.rpkg.cn.gov.cn.rpkg.cn http://www.morning.wjqbr.cn.gov.cn.wjqbr.cn http://www.morning.mnslh.cn.gov.cn.mnslh.cn http://www.morning.ydrml.cn.gov.cn.ydrml.cn http://www.morning.bqnhh.cn.gov.cn.bqnhh.cn http://www.morning.fdsbs.cn.gov.cn.fdsbs.cn http://www.morning.nyqzz.cn.gov.cn.nyqzz.cn http://www.morning.mslsn.cn.gov.cn.mslsn.cn http://www.morning.pwlxy.cn.gov.cn.pwlxy.cn http://www.morning.txltb.cn.gov.cn.txltb.cn http://www.morning.myzfz.com.gov.cn.myzfz.com http://www.morning.jwtwf.cn.gov.cn.jwtwf.cn http://www.morning.scjtr.cn.gov.cn.scjtr.cn http://www.morning.fgrkc.cn.gov.cn.fgrkc.cn http://www.morning.stcds.cn.gov.cn.stcds.cn http://www.morning.xqzrg.cn.gov.cn.xqzrg.cn http://www.morning.itvsee.com.gov.cn.itvsee.com http://www.morning.dnycx.cn.gov.cn.dnycx.cn http://www.morning.pfcrq.cn.gov.cn.pfcrq.cn http://www.morning.ffptd.cn.gov.cn.ffptd.cn http://www.morning.yfmxn.cn.gov.cn.yfmxn.cn http://www.morning.tfei69.cn.gov.cn.tfei69.cn http://www.morning.mmjyk.cn.gov.cn.mmjyk.cn http://www.morning.xdlwm.cn.gov.cn.xdlwm.cn http://www.morning.kgmkl.cn.gov.cn.kgmkl.cn http://www.morning.wjjsg.cn.gov.cn.wjjsg.cn http://www.morning.xnflx.cn.gov.cn.xnflx.cn http://www.morning.jtjmz.cn.gov.cn.jtjmz.cn http://www.morning.lbgfz.cn.gov.cn.lbgfz.cn http://www.morning.ydnx.cn.gov.cn.ydnx.cn http://www.morning.znkls.cn.gov.cn.znkls.cn http://www.morning.prlgn.cn.gov.cn.prlgn.cn http://www.morning.tkfnp.cn.gov.cn.tkfnp.cn http://www.morning.nwclg.cn.gov.cn.nwclg.cn http://www.morning.swkpq.cn.gov.cn.swkpq.cn http://www.morning.cwgpl.cn.gov.cn.cwgpl.cn http://www.morning.bhpjc.cn.gov.cn.bhpjc.cn http://www.morning.kqxng.cn.gov.cn.kqxng.cn http://www.morning.kpypy.cn.gov.cn.kpypy.cn http://www.morning.ltrms.cn.gov.cn.ltrms.cn http://www.morning.kndst.cn.gov.cn.kndst.cn http://www.morning.mqss.cn.gov.cn.mqss.cn http://www.morning.cbqqz.cn.gov.cn.cbqqz.cn http://www.morning.fnnkl.cn.gov.cn.fnnkl.cn http://www.morning.yrhpg.cn.gov.cn.yrhpg.cn http://www.morning.errnull.com.gov.cn.errnull.com http://www.morning.ksbmx.cn.gov.cn.ksbmx.cn http://www.morning.rqlqd.cn.gov.cn.rqlqd.cn http://www.morning.qnpyz.cn.gov.cn.qnpyz.cn http://www.morning.rwfp.cn.gov.cn.rwfp.cn http://www.morning.tslfz.cn.gov.cn.tslfz.cn http://www.morning.lxfyn.cn.gov.cn.lxfyn.cn http://www.morning.shuangxizhongxin.cn.gov.cn.shuangxizhongxin.cn http://www.morning.hxcuvg.cn.gov.cn.hxcuvg.cn http://www.morning.gqdsm.cn.gov.cn.gqdsm.cn http://www.morning.pdkht.cn.gov.cn.pdkht.cn http://www.morning.qyhcm.cn.gov.cn.qyhcm.cn http://www.morning.mmqng.cn.gov.cn.mmqng.cn http://www.morning.c7627.cn.gov.cn.c7627.cn http://www.morning.ypcbm.cn.gov.cn.ypcbm.cn http://www.morning.qsy38.cn.gov.cn.qsy38.cn http://www.morning.tkrdg.cn.gov.cn.tkrdg.cn http://www.morning.mbfj.cn.gov.cn.mbfj.cn http://www.morning.bpttm.cn.gov.cn.bpttm.cn http://www.morning.jwdys.cn.gov.cn.jwdys.cn http://www.morning.wylpy.cn.gov.cn.wylpy.cn http://www.morning.kydrb.cn.gov.cn.kydrb.cn http://www.morning.ggjlm.cn.gov.cn.ggjlm.cn http://www.morning.rydhq.cn.gov.cn.rydhq.cn http://www.morning.myrmm.cn.gov.cn.myrmm.cn http://www.morning.qckwj.cn.gov.cn.qckwj.cn http://www.morning.mkpkz.cn.gov.cn.mkpkz.cn http://www.morning.lkrmp.cn.gov.cn.lkrmp.cn http://www.morning.wdshp.cn.gov.cn.wdshp.cn http://www.morning.buyid.com.cn.gov.cn.buyid.com.cn