Pageoffice6 实现后台批量转PDF文档
在实际项目开发中如果遇到批量动态生成PDF文档的需求,只需参考后台批量生成PDF文档,目前网上也有一些针对此需求的方案,如果您想要了解这些方案的对比,请查看后台生成单个Word文档中的“方案对比”。
如果只是需要批量转PDF文件,那么也可以使用PageOffice提供的FileMaker组件来实现,与“后台批量生成PDF文档”不同的地方仅是:批量转PDF文件不需要WordDocument对象动态填充数据的代码。所以批量转PDF文件也只需两步即可实现:
如果只是需要批量转PDF文件,那么也可以使用PageOffice提供的FileMaker组件来实现,与“后台批量生成PDF文档”不同的地方仅是:批量转PDF文件不需要WordDocument对象动态填充数据的代码。所以批量转PDF文件也只需两步即可实现:
- 调用FileMakerCtrl对象的fillDocumentAsPDF方法实现Word转PDF功能,比如Convert.jsp中调用了此代码;
fmCtrl.fillDocumentAsPDF("doc01.doc", DocumentOpenType.Word, "doc01.pdf");
- 调用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) {
CallFileMaker({
url: "Convert.jsp?id="+idArr[index], //把指定id的word文件转pdf
success: function () {
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 会打开显示文档内容。
后端代码
- 调用FileMakerCtrl对象实现Word转pdf,比如Convert.jsp,代码如下:
String id = request.getParameter("id").trim();
String docName = "doc0" + id + ".doc";
String pdfName = "doc0" + id + ".pdf";
FileMakerCtrl fmCtrl = new FileMakerCtrl(request);
fmCtrl.setSaveFilePage("SaveFile.jsp");
fmCtrl.fillDocumentAsPDF("doc/" + docName, DocumentOpenType.Word, pdfName);
- Word转pdf后,在SaveFilePage属性指向的地址接口中处理文件保存的后台代码,比如SaveFile.js的代码如下:
FileSaver fs = new FileSaver(request, response);
fs.saveToFile(request.getSession().getServletContext().getRealPath("FileMakerConvertPDFs/doc/"+ fs.getFileName()));
fs.close();
前端代码
调用PageOffice提供的jsCallFileMaker函数,递归执行Convert.jsp实现批量转PDF文件功能的前端页面代码,如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<title></title>
<style>
table{
border:solid 1px #ccc;
width: 600px;
margin:20px;
}
th{
border-bottom:
solid 1px #ccc;
text-align:left;
padding: 5px;
}
td{
padding: 5px;
}
</style>
<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>
<script type="text/javascript" src="../pageoffice.js"></script>
<script type="text/javascript">
var checkit = true;
function selectall() {
if (checkit) {
var obj = document.all.check;
for (var i = 0; i < obj.length; i++) {
obj[i].checked = true;
checkit = false;
}
} else {
var obj = document.all.check;
for (var i = 0; i < obj.length; i++) {
obj[i].checked = false;
checkit = true;
}
}
}
function ConvertFiles() {
var ids = []; //存储用户勾选的文档id
var checkboxes = document.getElementsByName('check');
for (var i = 0; i < checkboxes.length; i++) {
if (checkboxes[i].checked) {
ids.push(checkboxes[i].value);
}
}
if(0 == ids.length){
alert('请至少选择一个文档');
return;
}
document.getElementById("Button1").disabled = true;
ConvertFile(ids, 0);
}
function ConvertFile(idArr, index) {
CallFileMaker({
url: "Convert.jsp?id="+idArr[index], //把指定id的word文件转pdf
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>
</head>
<body>
<div style="margin:100px" align="center">
<h2>演示:批量转PDF</h2>
<table id="table1" >
<tr >
<th><input name="checkAll" type="checkbox" onclick="selectall()"/></td>
<th>序号</td>
<th>文件名</td>
<th>操作</td>
</tr>
<tr>
<td><input name="check" type="checkbox" value="1"/></td>
<td>01</td>
<td>PageOffice产品简介</td>
<td><a href="javascript:POBrowser.openWindow('Edit.jsp?id=1','width=1150px;height=800px;');">编辑</a></td>
</tr>
<tr>
<td><input name="check" type="checkbox" value="2"/></td>
<td>02</td>
<td>PageOffice产品安装步骤</td>
<td><a href="javascript:POBrowser.openWindow('Edit.jsp?id=2','width=1150px;height=800px;');">编辑</a></td>
</tr>
<tr>
<td><input name="check" type="checkbox" value="3"/></td>
<td>03</td>
<td>PageOffice产品应用领域</td>
<td><a href="javascript:POBrowser.openWindow('Edit.jsp?id=3','width=1150px;height=800px;');">编辑</a></td>
</tr>
<tr>
<td><input name="check" type="checkbox" value="4"/></td>
<td>04</td>
<td>PageOffice产品对环境的要求</td>
<td><a href="javascript:POBrowser.openWindow('Edit.jsp?id=4','width=1150px;height=800px;');">编辑</a></td>
</tr>
</table>
<input type="button" id="Button1" value="批量转换PDF文档" onclick="ConvertFiles()"/>
<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>
参考链接:批量转PDF文件
Pageoffice6 实现后台批量转PDF文档的更多相关文章
- 如何教你在NIPS会议上批量下载历年的pdf文档(另附04~14年NIPS论文下载链接)
如何获得NIPS会议上批量下载的链接? NIPS会议下载网址:http://papers.nips.cc/ a.点击打开上述网站,进入某一年的所有会议,例如2014年,如下图 b.然后对着当前网页点击 ...
- 批量将网页转换成图片或PDF文档技巧分享
工作中我们有时要将一些批量的网页转换成图片或者PDF文档格式,尽管多数浏览器具有滚动截屏或者打印输出PDF文档功能.可是假设有几十上百张网页须要处理,那也是要人命的.所以我一直想找一款可以批量处理该工 ...
- java将office文档pdf文档转换成swf文件在线预览
第一步,安装openoffice.org openoffice.org是一套sun的开源office办公套件,能在widows,linux,solaris等操作系统上执行. 主要模块有writer(文 ...
- C#(MVC) Word 替换,填充表格,导出并下载PDF文档
近期做一个关于C# 操作 Word 模板 文档的功能模块,查阅资料,最终完美完成任务,记录下来,以便后面还会用到.
- C# 导出word文档及批量导出word文档(4)
接下来是批量导出word文档和批量打印word文件,批量导出word文档和批量打印word文件的思路差不多,只是批量打印不用打包压缩文件,而是把所有文件合成一个word,然后通过js来调用 ...
- pdf.js实现在HTML下直接浏览pdf文档,无需插件即可实现
近期,有一个朋友做B端,服务器存了大量的金融类数据,很多都是pdf文档,他现在的做法是,先将pdf文档转换成flash,再放到浏览器上给用户浏览,但是他告诉我,这种体验太差了,而且很好资源,空间已经快 ...
- 怎么用ABBYY重组PDF文档
ABBYY PDF Transformer+是一款可创建.编辑以及将PDF文件转换为其他可编辑格式的通用工具,除此之外,还可以使用ABBYY PDF Transformer+重新组织PDF文档,如在文 ...
- Java实现web在线预览office文档与pdf文档实例
https://yq.aliyun.com/ziliao/1768?spm=5176.8246799.blogcont.24.1PxYoX 摘要: 本文讲的是Java实现web在线预览office文档 ...
- python批量爬取文档
最近项目需要将批量链接中的pdf文档爬下来处理,根据以下步骤完成了任务: 将批量下载链接copy到text中,每行1个链接: 再读txt文档构造url_list列表,利用readlines返回以行为单 ...
- 使用pdf.js实现前端页面预览pdf文档,解决了跨域请求
pdf.js主要包含两个库文件,一个pdf.js和一个pdf.worker.js,,一个负责API解析,一个负责核心解析 官网地址:http://mozilla.github.io/pdf.js/ 下 ...
随机推荐
- HarmonyOS应用性能与功耗云测试
性能测试 性能测试主要验证HarmonyOS应用在华为真机设备上运行的性能问题,包括启动时长.界面显示.CPU占用和内存占用.具体性能测试项的详细说明请参考性能测试标准. 性能测试支持Phone和TV ...
- HDC2021技术分论坛:酷炫3D效果在瘦设备上也能实现?
作者:zhuhuanhuan,图形技术专家 随着3D技术的应用普及,越来越多的场景都能看到3D的身影,比如充电动效.3D壁纸.游戏等等,给用户带来了更有趣.更丰富的体验.要满足用户的3D体验需求,离不 ...
- sql 语句系列(闰年)[八百章之第十九章]
前言 判断闰年还是挺有用的. mysql select DAY(LAST_DAY(DATE_ADD(CURRENT_DATE,INTERVAL -DAYOFYEAR(CURRENT_DATE)+1+3 ...
- docker 应用篇————tomcat例子[七]
前言 虽然我干的事情和java不多,但是例子是为了熟悉原理,而不是为了例子而例子的,故而整理一下tomcat的例子. 正文 使用官方示例: 然后运行一下. 没有找到然后进行下载了. 可以看到这里就已经 ...
- MUI-拿到版本名称和版本code
场景: 一般App发布了新版本之后,都会提示用户去更新.这就需要我们获取App的当前版本号与后台存储的版本号做对比来判断是否需要更新. 获取版本名称和版本code: 打开manifest.json文件 ...
- cookie与localStorage与sessionStorage
1. cookie 1_1: 简述 HTTP Cookie(也叫 Web Cookie 或浏览器 Cookie)是服务器发送(由服务器设置后返回给浏览器端)到用户浏览器并保存在本地的一小块数据.浏览器 ...
- 【笔记】rocketMQ了解
记录rocketMQ 忘了从哪儿保存的图了 原图链接:https://www.jianshu.com/p/2838890f3284
- 力扣640(java)-求解方程(中等)
题目: 求解一个给定的方程,将x以字符串 "x=#value" 的形式返回.该方程仅包含 '+' , '-' 操作,变量 x 和其对应系数. 如果方程没有解,请返回 "N ...
- 力扣237(java&python)-删除链表中的节点(中等)
题目: 有一个单链表的 head,我们想删除它其中的一个节点 node. 给你一个需要删除的节点 node .你将 无法访问 第一个节点 head. 链表的所有值都是 唯一的,并且保证给定的节点 n ...
- 新零售标杆 SKG 全面拥抱 Serverless,实现敏捷交付
简介: SKG CTO 王焱:以前需要 60 个人干的活,用 SAE 和大禹后 15 个人就可以! 作者:陈列昂.昕辰.龙琛.黛忻 项目背景 SKG 公司是一家专注于高端健康产品的研发.设计与制造 ...