仿百度文库方案[openoffice.org 3+swftools+flexpaper](五) 之 转换pdf的同时,进一步转为swf..._haiwei_sun的博客-程序员宝宝

第五步,office文档转为pdf,同时进一步转为swf

     网上资料有很多office文档转为pdf,pdf转为swf,但都是单步转换。关于一起转换的资料比较少。

一起转换有个问题就是转为pdf时,这个转换过程将花费一段时间才能成功,如何控制在pdf转换成功后,才进行swf的转换。

以及多个文档批量转换又该怎么办。

 

     有幸笔者还是找到了一篇同时转换的代码:

新建DocConverter.java

复制代码
package com.iori.webapp.util;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import com.artofsolving.jodconverter.DocumentConverter;
import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter;

/*
* doc docx格式转换
* @author Administrator
*/
public class DocConverter {
private static final int environment=1;//环境1:windows 2:linux(涉及pdf2swf路径问题)
private String fileString;
private String outputPath="";//输入路径,如果不设置就输出在默认位置
private String fileName;
private File pdfFile;
private File swfFile;
private File docFile;

public DocConverter(String fileString)
{
ini(fileString);
}

/*
* 重新设置 file
* @param fileString
*/
public void setFile(String fileString)
{
ini(fileString);
}

/*
* 初始化
* @param fileString
*/
private void ini(String fileString)
{
this.fileString=fileString;
fileName=fileString.substring(0,fileString.lastIndexOf("."));
docFile=new File(fileString);
pdfFile=new File(fileName+".pdf");
swfFile=new File(fileName+".swf");
}

/*
* 转为PDF
* @param file
*/
private void doc2pdf() throws Exception
{
if(docFile.exists())
{
if(!pdfFile.exists())
{
OpenOfficeConnection connection=new SocketOpenOfficeConnection(8100);
try
{
connection.connect();
DocumentConverter converter=new OpenOfficeDocumentConverter(connection);
converter.convert(docFile,pdfFile);
//close the connection
connection.disconnect();
System.out.println("****pdf转换成功,PDF输出:"+pdfFile.getPath()+"****");
}
catch(java.net.ConnectException e)
{
//ToDo Auto-generated catch block
e.printStackTrace();
System.out.println("****swf转换异常,openoffice服务未启动!****");
throw e;
}
catch(com.artofsolving.jodconverter.openoffice.connection.OpenOfficeException e)
{
e.printStackTrace();
System.out.println("****swf转换器异常,读取转换文件失败****");
throw e;
}
catch(Exception e)
{
e.printStackTrace();
throw e;
}
}
else
{
System.out.println("****已经转换为pdf,不需要再进行转化****");
}
}
else
{
System.out.println("****swf转换器异常,需要转换的文档不存在,无法转换****");
}
}

/*
* 转换成swf
*/
private void pdf2swf() throws Exception
{
Runtime r=Runtime.getRuntime();
if(!swfFile.exists())
{
if(pdfFile.exists())
{
if(environment==1)//windows环境处理
{
try {
Process p=r.exec("C:/Program Files/SWFTools/pdf2swf.exe "+pdfFile.getPath()+" -o "+swfFile.getPath()+" -T 9");
System.out.print(loadStream(p.getInputStream()));
System.err.print(loadStream(p.getErrorStream()));
System.out.print(loadStream(p.getInputStream()));
System.err.println("****swf转换成功,文件输出:"+swfFile.getPath()+"****");
if(pdfFile.exists())
{
pdfFile.delete();
}
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}
else if(environment==2)//linux环境处理
{
try {
Process p=r.exec("pdf2swf "+pdfFile.getPath()+" -o "+swfFile.getPath()+" -T 9");
System.out.print(loadStream(p.getInputStream()));
System.err.print(loadStream(p.getErrorStream()));
System.err.println("****swf转换成功,文件输出:"+swfFile.getPath()+"****");
if(pdfFile.exists())
{
pdfFile.delete();
}
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}
}
else {
System.out.println("****pdf不存在,无法转换****");
}
}
else {
System.out.println("****swf已存在不需要转换****");
}
}

static String loadStream(InputStream in) throws IOException
{
int ptr=0;
in=new BufferedInputStream(in);
StringBuffer buffer=new StringBuffer();

while((ptr=in.read())!=-1)
{
buffer.append((char)ptr);
}
return buffer.toString();
}

/*
* 转换主方法
*/
public boolean conver()
{
if(swfFile.exists())
{
System.out.println("****swf转换器开始工作,该文件已经转换为swf****");
return true;
}

if(environment==1)
{
System.out.println("****swf转换器开始工作,当前设置运行环境windows****");
}
else {
System.out.println("****swf转换器开始工作,当前设置运行环境linux****");
}

try {
doc2pdf();
pdf2swf();
} catch (Exception e) {
// TODO: Auto-generated catch block
e.printStackTrace();
return false;
}

if(swfFile.exists())
{
return true;
}
else {
return false;
}
}

/*
* 返回文件路径
* @param s
*/
public String getswfPath()
{
if(swfFile.exists())
{
String tempString =swfFile.getPath();
tempString=tempString.replaceAll("\\\\", "/");
return tempString;
}
else{
return "";
}
}

/*
* 设置输出路径
*/
public void setOutputPath(String outputPath)
{
this.outputPath=outputPath;
if(!outputPath.equals(""))
{
String realName=fileName.substring(fileName.lastIndexOf("/"),fileName.lastIndexOf("."));
if(outputPath.charAt(outputPath.length())=='/')
{
swfFile=new File(outputPath+realName+".swf");
}
else
{
swfFile=new File(outputPath+realName+".swf");
}
}
}

public static void main(String s[])
{
DocConverter d=new DocConverter("c:/temp/111.ppt");
d.conver();
}
}
复制代码

在DocConverter.java,右键属性 - >Run as - >Java Application ,输出main的测试结果。笔者分别进行单个转换,及批量转换,都测试可行。

至于为什么能成功进行pdf及swf的完整转换,在代码中没有看到和上述问题相关的控制。笔者在得到预期的结果,偶尔也会装糊涂,不去继续深究。

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/helen_shw/article/details/104035915

智能推荐

AutoCompleteTextView和MultiAutoCompleteTextView的区别_全栈无侠的博客-程序员宝宝

   android提供了自动提示功能的textview,按照自带的文档和api demo可以写几行代码就可以实现此功能。但默认的thresh为2,所以默认情况下你必须输入两个或者两个以上的字符,才会有自动提示功能,否则AutoCompleteTextView是不会有任何提示的。当然你可以通过setThresh来设置至少输入几个字符后才会有提示,也可以在xml里设置。 AutoCompleteTe

用pycharm导入包时找不到sk-learn这个库_许倾墨的博客-程序员宝宝_pycharm没有sklearn

这个问题其实有点emmm。。。弱智吧,所以这里写下来记录一下:用pycharm导入sk-learn,结果发现死活导入不了,最后输入了全称:scikit-learn找到了这个包,但是import的时候还是得写sklearn。。。这点有点无语23333...

导航网站合集|高效工作学习_-借我杀死庸碌的情怀-的博客-程序员宝宝_24k导航

注:由于篇幅限制,这里的导航网站我只给出网址和部分截图,其中的知识宝藏就由你自己去发掘啦!1、程序员工具箱 https://tool.lu/2、Toolfk在线工具箱 https://www.toolfk.com/3、前端导航 https://www.kwgg2020.com/4、程序员导航-代码如诗 http://code.giffox.com/5、极客导航-程序员自己的导航 http://www.jikedaohang.c.

Linux上搭建Nginx服务器_BeautifulSoup2019的博客-程序员宝宝

1.将nginx的压缩包nginx-1.8.0.tar.gz上传到Linux服务器2.由于nginx是C语言开发的并且我们这里是通过编译nginx的源码来安装nginx,所以Linux上要安装C语言的编译环境gcc, 如果已经安装此步可以省略,否则执行命令:yum install gcc-c++ 3.nginx的http模块使用pcre来解析正则表达式,所以需要在linux上安装pcre库。yum

oracle连接plsql和instantclient版本都对是64位,依然不能初始化oci.dll解决办法_chenjin_csdn的博客-程序员宝宝_oracle不能初始化oci

原因是缺少组件https://www.microsoft.com/zh-CN/download/details.aspx?id=40784微软下载64位系统下载,vcredist_x64.exe32位系统下载,vcredist_x86.exe安装完成即可成功完成初始化了

Apache Shiro 学习_jimiStephen的博客-程序员宝宝

http://www.ibm.com/developerworks/cn/web/wa-apacheshiro/?cmp=dwnpr&cpb=dw&ct=dwcon&cr=cn_Chinabyte_dr&ccy=cnApache Shiro 是一个框架,可用于身份验证和授权。本文提供了几个示例用来展示如何在 Java? 应用程序中使用 Shiro 并给出了如何在一个 Grails web 应用

随便推点

微信小程序架构图与开发_子燕若水的博客-程序员宝宝_小程序架构图

双线程模型真实环境微信小程序视图层是 WebView,逻辑层是 JS 引擎。三端(android/IOS/开发工具)的脚本执行环境以及用于渲染非原生组件的环境是各不相同的:传统Webview和小程序的异同转载自:微信小程序原理分析和多端小程序架构原理(应该是全网最全了) | 悬笔e绝的个人博客前言互联网生态演进:超级 APP + 小程序成为「轻应用时代」下的新生态。 一方面微信、支付宝等各家小程序平台遍地开花,另一方面移动开发插件化技术逐渐没落,移动应用构建的方式在悄...

android跨进程通讯方法,Android跨进程通讯的几种方式_Ziang Li的博客-程序员宝宝

Android系统的每个应用都是运行在一个单独的虚拟机中(不同的进程)。因此不同的app间不能直接通讯,但是可以间接进行通讯。今天我要介绍的四种跨进程通讯方式就是四种间接通讯方式。这四种跨进程通讯的方式,方式一:Bundle。bundle实现了parcelable接口,在Android中不同的应用运行在不同的进程中。通过Intent启动其他应用的组件Activity,Service,Receive...

Java项目——图书管理系统_代码小鲜肉的博客-程序员宝宝

Java项目——图书管理系统•系统概述–为租书店开发一个图书管理系统,实现图书的管理,包括如下功能:•新增图书•查看图书•删除图书•借出图书•归还图书步骤:步骤1: 数据初始化创建项目,创建类 并创建四个数组 数组1存储图书名称数组 数组2 存储图书借出情况 0已借出/1可借数组3 存储图书借出日期 数组4 借出次数、package BookShop;/** * @version 1.0 * @author: jiazhihao * @date: 2021-04

C++中cmp()用法_CoCoNum的博客-程序员宝宝_c++ cmp

首先,我们来谈谈大名鼎鼎的void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *));它属于C语言标准库函数,应该是运用最多的了,今天我不是来教你们怎么用qsort的,只是来交流一下排序函数的最后一个参数cmp()(它不仅可以叫cmp,你还可以给他取名叫什么pig啊dog的只要是英文单词都可以,cmp只是人们对compare的一种常用缩写)比较函数的写法。下面是cmp的写法:int cmp(

【Rust日报】2020-10-26 Box 即将支持自定义的 allocators_Rust语言中文社区的博客-程序员宝宝

Box 即将支持自定义的 allocators下面的pull request合并之后, Box 将会支持自定义的 allocators.Box 的定义将会从Box<T>...

Attention机制_Anida_qin的博客-程序员宝宝

几篇比较好的链接机器不学习:一文看懂Attention机制斯坦福ppt本文主要以问自己问题的方式去理解什么是attention,理解可能会有偏差,欢迎指正。Attention 机制为什么用Attention机制?这个是由于传统的encoder-decoder模型,如何从source学习东西呢?那就是从encoder的输出决定,对于LSTM模型来讲,很大程度上依赖于最后一个hidden ...

推荐文章

热门文章

相关标签