说明:PageOffice是客户端插件,做不到纯后台调用把word转为pdf。但是pageoffice的FileMaker对象可以实现不在客户端打开文件直接转换文件为pdf并保存到服务器端,看起来跟服务器端转换的效果一样。

1、环境

前端:vue

后端:springboot、pageoffice5.4.0.3版本

2、前端

在index.vue页面定义一个打开文件的按钮,通过点击事件调用POBrowser打开文件,这里因为使用FileMaker对象,不在页面打开文件,所以我们把POBrowser的宽高设置为1px,并设置无边框,隐藏pageoffice浏览器模拟服务器端转换的效果。我这里放了一个加载图片,转换完成后隐藏,方便知道当前转换的进度,

<template><div class="Word"><body style="text-align: center;"><a  href="javascript:;" @click="convert()">Word转PDF并打开PDF文件</a><div id="pgImg" style="with:100px;height:100px;margin-top:20px;display: none;"  >正在生成文件,请稍等:<img src="../../../public/images/pg.gif"></div></body></div>
</template><script>const axios=require('axios');export default{name: 'Word',data(){return {poHtmlCode: '',state: ''}},methods:{//控件中的一些常用方法都在这里调用,比如保存,打印等等myFunc(){alert("文件生成成功!");document.getElementById("pgImg").style.display="none";//打开pdf文件POBrowser.openWindowModeless('OpenPDF' , 'width=1200px;height=800px;');            },convert() {document.getElementById("pgImg").style.display="block";POBrowser.openWindowModeless('PDF', 'width=1px;height=1px;frame=no;');}},mounted: function(){// 将vue中的方法赋值给windowwindow.myFunc = this.myFunc;}}
</script>

word转换PDF的页面PDF.vue

<template><div class="PDF"><div style="height: 800px; width: auto" v-html="poHtmlCode" /></div>
</template><script>const axios=require('axios');export default{name: 'PDF',data(){return {poHtmlCode: '',}},created: function(){//由于vue中的axios拦截器给请求加token都得是ajax请求,所以这里必须是axios方式去请求后台打开文件的controlleraxios.post("/api/FileMakerPDF/PDF").then((response) => {this.poHtmlCode = response.data;}).catch(function (err) {console.log(err)})},methods:{//控件中的一些常用方法都在这里调用,比如保存,打印等等OnProgressComplete() {window.external.CallParentFunc("myFunc();"); //调用父页面的js函数window.external.close();//关闭POBrwoser窗口}},mounted: function(){// 将vue中的方法赋值给windowwindow.OnProgressComplete = this.OnProgressComplete;}}
</script>

打开PDF文件的页面OpenPDF.vue

<template><div class="PDF"><div style="height: 800px; width: auto" v-html="poHtmlCode" /></div>
</template><script>const axios=require('axios');export default{name: 'PDF',data(){return {poHtmlCode: '',}},created: function(){//由于vue中的axios拦截器给请求加token都得是ajax请求,所以这里必须是axios方式去请求后台打开文件的controlleraxios.post("/api/FileMakerPDF/OpenPDF").then((response) => {this.poHtmlCode = response.data;}).catch(function (err) {console.log(err)})},methods:{//控件中的一些常用方法都在这里调用,比如保存,打印等等SetBookmarks() {document.getElementById("PDFCtrl1").BookmarksVisible = !document.getElementById("PDFCtrl1").BookmarksVisible;},PrintFile() {document.getElementById("PDFCtrl1").ShowDialog(4);},SwitchFullScreen() {document.getElementById("PDFCtrl1").FullScreen = !document.getElementById("PDFCtrl1").FullScreen;},SetPageReal() {document.getElementById("PDFCtrl1").SetPageFit(1);},SetPageFit() {document.getElementById("PDFCtrl1").SetPageFit(2);},SetPageWidth() {document.getElementById("PDFCtrl1").SetPageFit(3);},ZoomIn() {document.getElementById("PDFCtrl1").ZoomIn();},ZoomOut() {document.getElementById("PDFCtrl1").ZoomOut();},FirstPage() {document.getElementById("PDFCtrl1").GoToFirstPage();},PreviousPage() {document.getElementById("PDFCtrl1").GoToPreviousPage();},NextPage() {document.getElementById("PDFCtrl1").GoToNextPage();},LastPage() {document.getElementById("PDFCtrl1").GoToLastPage();},SetRotateRight() {document.getElementById("PDFCtrl1").RotateRight();},SetRotateLeft() {document.getElementById("PDFCtrl1").RotateLeft();}},mounted: function(){// 将vue中的方法赋值给windowwindow.SetBookmarks = this.SetBookmarks;window.PrintFile = this.PrintFile;window.SwitchFullScreen = this.SwitchFullScreen;window.SetPageReal = this.SetPageReal;window.SetPageFit = this.SetPageFit;window.SetPageWidth = this.SetPageWidth;window.ZoomIn = this.ZoomIn;window.ZoomOut = this.ZoomOut;window.FirstPage = this.FirstPage;window.PreviousPage = this.PreviousPage;window.NextPage = this.NextPage;window.LastPage = this.LastPage;window.SetRotateRight = this.SetRotateRight;window.SetRotateLeft = this.SetRotateLeft;}}
</script>

2、后端

word转换pdf的controller。FileMaker对象转换完成后会自动调用保存方法。在执行fmCtrl.fillDocumentAsPDF()之前,可以动态填充word文件

 @RequestMapping(value = "PDF")public String showWord(HttpServletRequest request) {FileMakerCtrl fmCtrl = new FileMakerCtrl(request);fmCtrl.setServerPage("/api/poserver.zz");WordDocument doc = new WordDocument();//禁用右击事件doc.setDisableWindowRightClick(true);//给数据区域赋值,即把数据填充到模板中相应的位置doc.openDataRegion("PO_company").setValue("北京卓正志远软件有限公司  ");fmCtrl.setSaveFilePage("/api/FileMakerPDF/save?pdfName=template.pdf");fmCtrl.setWriter(doc);fmCtrl.setJsFunction_OnProgressComplete("OnProgressComplete()");//fmCtrl.setFileTitle("newfilename.doc");//设置另存为文件的文件名称fmCtrl.fillDocumentAsPDF("D:\\FileMakerPDF\\template.doc", DocumentOpenType.Word, "template.pdf");return fmCtrl.getHtmlCode("FileMakerCtrl1");}

保存方法

@RequestMapping("save")public void save(HttpServletRequest request, HttpServletResponse response) {FileSaver fs = new FileSaver(request, response);String  pdfName=request.getParameter("pdfName");fs.saveToFile( "D:\\FileMakerPDF\\" + pdfName);fs.close();}

打开文件的方法

@RequestMapping(value = "OpenPDF")public String showindex(HttpServletRequest request) {PDFCtrl pdfCtrl1 = new PDFCtrl(request);pdfCtrl1.setServerPage("/api/poserver.zz"); //此行必须// Create custom toolbarpdfCtrl1.addCustomToolButton("打印", "PrintFile()", 6);pdfCtrl1.addCustomToolButton("隐藏/显示书签", "SetBookmarks()", 0);pdfCtrl1.addCustomToolButton("-", "", 0);pdfCtrl1.addCustomToolButton("实际大小", "SetPageReal()", 16);pdfCtrl1.addCustomToolButton("适合页面", "SetPageFit()", 17);pdfCtrl1.addCustomToolButton("适合宽度", "SetPageWidth()", 18);pdfCtrl1.addCustomToolButton("-", "", 0);pdfCtrl1.addCustomToolButton("首页", "FirstPage()", 8);pdfCtrl1.addCustomToolButton("上一页", "PreviousPage()", 9);pdfCtrl1.addCustomToolButton("下一页", "NextPage()", 10);pdfCtrl1.addCustomToolButton("尾页", "LastPage()", 11);pdfCtrl1.addCustomToolButton("-", "", 0);pdfCtrl1.addCustomToolButton("向左旋转90度", "SetRotateLeft()", 12);pdfCtrl1.addCustomToolButton("向右旋转90度", "SetRotateRight()", 13);pdfCtrl1.webOpen("D:\\FileMakerPDF\\template.pdf");return pdfCtrl1.getHtmlCode("PDFCtrl1");}

3、最后效果

模板文件template.doc

最后生成的pdf文件在线使用pageoffice打开

PageOffice动态生成Word文件并转换为PDF相关推荐

  1. Aspose-Cells结合Apache POI生成excel文件以及转换为pdf

    最近有个需求是需要将数据库中的符合条件的交易流水导出生成为excel,并转换为pdf,提供给客户下载,客户下载核对并签章. 需要用到的jar包依赖: <dependency><gro ...

  2. Java动态生成word文档(图文并茂)

    很多情况下,软件开发者需要从数据库读取数据,然后将数据动态填充到手工预先准备好的Word模板文档里,这对于大批量生成拥有相同格式排版的正式文件非常有用,这个功能应用PageOffice的基本动态填充功 ...

  3. freemarker动态生成word、pdf文档(写入图片)

    需求:给出固定的word模板通过后台查询出的数据动态生成word文档 结果展示:列表中的数据就是动态生成的. 一.创建.ftl模板文件,(我这里就不详细展开了,直接粘贴ftl模板的代码) <!D ...

  4. 将Word文档转换为PDF时出现“PDFmaker文件遗失,要在修复模式下运行安装程序吗?”的提示

    鼠标右击将Word文档转换为PDF时出现"PDFmaker文件遗失,要在修复模式下运行安装程序吗?"的提示,运行完安装程序以后,问题还是没有解决,依旧有提示,这是什么原因,我电脑装 ...

  5. 将Word文档转换为PDF文件的步骤和技巧

    在日常工作和学习中,我们经常需要将Word文档转换为PDF文件.PDF文件的格式稳定.排版精美.易于共享等特点使其成为了许多场合下的首选文件格式.在本文中,我将为大家介绍将Word文档转换为PDF文件 ...

  6. 【.NET】用Aspose.Words for .NET动态生成word文档中的数据表格

    1.概述 最近项目中有一个这样的需求:导出word 文档,要求这个文档的格式不是固定的,用户可以随便的调整,导出内容中的数据表格列是动态的,例如要求导出姓名和性别,你就要导出这两列的数据,而且这个文档 ...

  7. ASP.NET实现WORD文件自动转换PDF

    作者: 佚名, 出处:IT专家网, 责任编辑: 谢妍妍, 2009-07-30 07:00 本文主要介绍ASP.NET实现WORD文件自动转换PDF的方法. 需求分析:客户的项目以B/S结构为主,提供 ...

  8. Word处理控件Aspose.Words功能演示:使用 Android 库将 Word 文档转换为 PDF

    Aspose.Words 是一种高级Word文档处理API,用于执行各种文档管理和操作任务.API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsoft Word.此 ...

  9. Java使用FreeMarker模版技术动态生成word实践

    一.序言 在日常开发中,常常有动态word文件生成的需求,通过编制模版,然后动态修改word内容以组合成新的文件.报告单.请假单.发票页等都可以使用动态生成word来解决. 笔者总结归纳出通用技术要点 ...

最新文章

  1. iOS 获取指定时间的前后N个月
  2. 在Windows 8下成功安装.Net3.5的方法
  3. ORACLE 11g 使用ROWNUM完美解决ORA-00600:内部错误代码
  4. GARFIELD@09-21-2004
  5. python中的operator库
  6. 中国发电机行业应用前景与投资策略分析报告2022版
  7. 【开卷故意】记录一次高并发下的死锁解决思考过程
  8. JavaWeb_检查用户是否登录的过滤器
  9. 【好消息】Python和Excel终于可以互通了!!
  10. 敏捷个人第五次练习:个人使命宣言
  11. python 逗号作用 语句间_Python 逗号的几种作用
  12. 计算机组成原理第二版第4章的答案,计算机组成原理第4章习题参考答案
  13. Alpha冲刺 - (4/10)
  14. 【Elasticsearch】Elasticsearch中数据是如何存储的
  15. python磁盘空间_python3实现磁盘空间监控
  16. 编译原理(龙书):第五章部分题目参考答案
  17. 单位换算:秒(s)/毫秒(ms)/微秒(us)/纳秒(ns)/皮秒(ps)之间密尔(mil)/毫米(mil)/英尺(inch)之间
  18. android led 字体下载,Android LED数字/电子表字体digital font
  19. 自建cdn搭建_自建CDN服务器Fikker新手教程
  20. Google战略的深远意义

热门文章

  1. Android后台保活机制,应用进程长存的可行性分析
  2. 无线路由器的WMM务必开着
  3. 视频14-15五色球任选三个不同颜色选法。根据理解编写。
  4. cni k8s 插件安装_k8s的CNI网络插件-flannel
  5. TypeScript学习笔记(技术胖b站视频)
  6. 西安自考计算机大专学校,西安成人自考大专学校有哪些
  7. 金蝶二开笔记-在付款单据中获取科目余额表的数据
  8. vue-print-nb如何打印隐藏dom
  9. 翁恺C语言程序设计(前三章包含代码)
  10. [行人重识别论文阅读]AlignedReID: Surpassing Human-Level Performance in Person Re-Identification