第一步,安装openoffice.org

openoffice.org是一套sun的开源office办公套件,能在widows,linux,solaris等操作系统上执行。

主要模块有writer(文本文档),impress(演示文稿),Calc(电子表格),Draw(绘图),Math(公式),base(数据库)

笔者下载的是openoffice.org 3.3.0。下载完直接安装即可。

但是,我们还需要启动openoffice server。有两种做法:

1.以命令行方式启动openoffice server,缺点是每次系统重启,都需要手动去把openoffice server启动。

2.将openoffice server作为操作系统的服务启动,既然成为了系统服务,就可以设定开机自动启动了。

我们先来看第一种方式,

1.以命令行方式启动openoffice server

  在cmd命令下,cd opeonofiice的安装路径/program 如:cd c:\program files\openoffice.org 3\program\soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard

2.以系统服务的方式启动

这里我们还需要Windows Resource Kit tools ,将openoffice server设为系统服务。

Windows Resource Kit tools 是微软专为管理人员、开发人员和高级用户开发的,包括管理活动目录、组策略、TCP/IP网络、注册表、系统安全、监测等涉及Windows Server 2003 操作系统的其它很多方面的非常规安装的工具组件。Resource Kit Tools for XP的发布使得XP用户也能使用Resource Kit Tools对这些问题进行处理。

下载windows resource kit tools,我们进行默认安装。

1.打开Windows Resource Kit Tools

在Command Shell执行以下命令:

"C:\Program Files\Windows Resource Kits\Tools\instsrv" OpenOfficeUnoServer "C:\Program Files\Windows Resource Kits\Tools\srvany.exe"

打开 管理工具->服务 可以找到以 OpenOfficeUnoServer 命名的服务

2.打开注册表寻找以下路径

HKEY_LOCAL_MACHINE -> SYSTEM ->ControlSet001 ->Services ->OpenOfficeUnoServer

 新建项 Parameters,在该项下添加两个字符串值:

  key:Application

value:C:\Program Files\OpenOffice.org 3\program\soffice.exe

key:AppParameters

value:-invisible -headless -accept=socket,host=127.0.0.1,port=8100;urp; -nofirststartwizard

3.在服务控制台,启动 openoffice 服务

4.在CMD中用以下命令查看8100是否已被监听:netstat -anop tcp

这样OpenOffice3.0就以服务方式运行在Windows系统上了。(使用cmd命令:netstat -anp tcp查看8100端口是否工作)

然後可以通过socket方式连接openOffice,以使用openoffice提供的某些服务,如文件转换服务,ms office转pdf等等。

开源项目 JODConverter 就是结合openoffice来进行文档转换的java组件。

另外有一个命令行工具swftools,该工具可以将pdf转换为swf格式的文档,提供给ie客戶端流览。

  另外,我们可以将该配置用bat文件来快速实现,运行前请先修改相应目录参数:

openoffice service.bat文件

"C:\Program Files\Windows Resource Kits\Tools\instsrv" OpenOfficeUnoServer "C:\Program Files\Windows Resource Kits\Tools\srvany.exe"
    reg add HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\OpenOfficeUnoServer\Parameters /ve /d
    reg add HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\OpenOfficeUnoServer\Parameters /v Application /t REG_SZ /d "C:\Program Files\OpenOffice.org 3\program\soffice.exe"
    reg add HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\OpenOfficeUnoServer\Parameters /v AppParameters /t REG_SZ /d "-invisible -headless -accept=socket,host=127.0.0.1,port=8100;urp; -nofirststartwizard"

第二步,使用JODConverter将office文档转换为pdf

JODConverter是一个java的OpenDucument文件转换器,可以进行许多文件格式的转换,它利用

OpenOffice来进行转换工作,它能进行以下的转换工作:

1.Microsoft Office格式转换为OpenDucument,以及OpenDucument转换为Microsoft Office

2.OpenDucument转换为PDF,Word、Excel、PowerPoint转换为PDF,RTF转换为PDF等。

它是一个开源项目。

我的项目是在MyEclipse下开发的。

下载最新版的jodconverter-2.2.2,把lib文件夹的包导入到你的DocConverter项目的lib文件夹内。

(假设你的项目是DocConverter)

新建DOC2PDFUtil.java

packagecom.iori.webapp.util;importjava.io.File;importjava.io.IOException;importjava.net.ConnectException;importjava.util.Date;importcom.artofsolving.jodconverter.DocumentConverter;importcom.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;importcom.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;importcom.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter;public class DOC2PDFUtil extendsjava.lang.Thread  {private File inputFile;//需要转换的文件private File outputFile;//输出的文件publicDOC2PDFUtil(File inputFile, File outputFile) {this.inputFile =inputFile;this.outputFile =outputFile;  }public voiddocToPdf() {   Date start= newDate();   OpenOfficeConnection connection= new SocketOpenOfficeConnection(8100);try{   connection.connect();   DocumentConverter converter= newOpenOfficeDocumentConverter(connection);   converter.convert(inputFile, outputFile);   }catch(ConnectException cex) {   cex.printStackTrace();   }finally{//close the connectionif (connection != null) {   connection.disconnect();   connection= null;   }   }   }/*** 由于服务是线程不安全的,所以……需要启动线程*/  public voidrun() {this.docToPdf();   }publicFile getInputFile() {returninputFile;   }public voidsetInputFile(File inputFile) {this.inputFile =inputFile;   }publicFile getOutputFile() {returnoutputFile;   }public voidsetOutputFile(File outputFile) {this.outputFile =outputFile;   }/*** 测试main方法*@paramargs*/public static voidmain(String[] args) {File inputFile= new File("c://temp//333.xls");File outputFile= new File("c://temp//333.pdf");DOC2PDFUtil dp=newDOC2PDFUtil(inputFile,outputFile);dp.start();}
}

在DOC2PDFUtil.java,右键属性 - >Run as - >Java Application ,输出main的测试结果。

在jsp中执行

新建MyDOC2PDFTest.jsp

<%@ page import="java.io.*"%>
<%@ page import="com.artofsolving.jodconverter.openoffice.connection.*"%>
<%@ page import="com.artofsolving.jodconverter.openoffice.connection.*"%>
<%@ page import="com.artofsolving.jodconverter.openoffice.converter.*"%>
<%@ page import="com.artofsolving.jodconverter.*"%>
<%@ page import="java.util.*"%>
<%@ page import="com.iori.webapp.util.*"%><%
File inputFile = new File("c://temp//333.xls");
File outputFile = new File("c://temp//333.pdf");
DOC2PDFUtil dp=new DOC2PDFUtil(inputFile,outputFile);
dp.start();
%>
<!-- 下面这些html可以去掉 -->
<html><head><title>Simple jsp page</title></head><body>Place your content here</body>
</html>

在项目DocConverter根目录,右键属性 - >Run as - >MyEclipse Server Application

发布到之前安装的Tomcat 6.0的根目录,然后用url路径访问:Http://localhost:8080/DocConverter/MyDOC2PDFTest.jsp 进行测试。

JODConverter将office文档转换pdf,用到的代码如下:

File inputFile = new File("c://temp//333.xls");
File outputFile= new File("c://temp//333.pdf");//链接 一个运行在8100端口的OpenOffice.org 实例
OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);
connection.connect();//创建一个converter对象并转换格式
DocumentConverter converter = newOpenOfficeDocumentConverter(connection);
converter.convert(inputFile, outputFile);//关闭连接
connection.disconnect();

第三步,使用swftools将pdf转换为swf

建议下载swftools-0.9.1,笔者起先下载的是最新版的swftools-1.0版。貌似转换时出错,缺少什么组件。

继续笔者的DocConverter项目。笔者使用的开发环境是MyEclipse 9.0。

新建PDF2SWFUtil.java

packagecom.iori.webapp.util;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;public classPDF2SWFUtil {/*** 利用SWFTools工具将pdf转换成swf,转换完后的swf文件与pdf同名*@authoriori*@paramfileDir PDF文件存放路径(包括文件名)*@paramexePath 转换器安装路径*@throwsIOException*/public static synchronized void pdf2swf(String fileDir, String exePath) throwsIOException {//文件路径String filePath = fileDir.substring(0, fileDir.lastIndexOf("/"));//文件名,不带后缀String fileName = fileDir.substring((filePath.length() + 1), fileDir.lastIndexOf("."));Process pro= null;if(isWindowsSystem()) {//如果是windows系统//命令行命令String cmd = exePath + " \"" + fileDir + "\" -o \"" + filePath + "/" + fileName + ".swf\"";//Runtime执行后返回创建的进程对象pro =Runtime.getRuntime().exec(cmd);}else{//如果是linux系统,路径不能有空格,而且一定不能用双引号,否则无法创建进程String[] cmd = new String[3];cmd[0] =exePath;cmd[1] =fileDir;cmd[2] = filePath + "/" + fileName + ".swf";//Runtime执行后返回创建的进程对象pro =Runtime.getRuntime().exec(cmd);}//非要读取一遍cmd的输出,要不不会flush生成文件(多线程)newDoOutput(pro.getInputStream()).start();newDoOutput(pro.getErrorStream()).start();try{//调用waitFor方法,是为了阻塞当前进程,直到cmd执行完
pro.waitFor();}catch(InterruptedException e) {e.printStackTrace();}}/*** 判断是否是windows操作系统*@authoriori*@return*/private static booleanisWindowsSystem() {String p= System.getProperty("os.name");return p.toLowerCase().indexOf("windows") >= 0 ? true : false;}/*** 多线程内部类* 读取转换时cmd进程的标准输出流和错误输出流,这样做是因为如果不读取流,进程将死锁*@authoriori*/private static class DoOutput extendsThread {publicInputStream is;//构造方法publicDoOutput(InputStream is) {this.is =is;}public voidrun() {BufferedReader br= new BufferedReader(new InputStreamReader(this.is));String str= null;try{//这里并没有对流的内容进行处理,只是读了一遍while ((str = br.readLine()) != null);}catch(IOException e) {e.printStackTrace();}finally{if (br != null) {try{br.close();}catch(IOException e) {e.printStackTrace();}}}}}/*** 测试main方法*@paramargs*/public static voidmain(String[] args) {//转换器安装路径String exePath = "c:/Program Files/SWFTools/pdf2swf.exe";try{PDF2SWFUtil.pdf2swf("c:/temp/333.pdf", exePath);}catch(IOException e) {System.err.println("转换出错!");e.printStackTrace();}}
}

在PDF2SWFUtil.java,右键属性 - >Run as - >Java Application ,输出main的测试结果。

在jsp中执行

新建MyPDF2SWFTest.jsp

<%@ page import="java.io.*"%>
<%@ page import="com.artofsolving.jodconverter.openoffice.connection.*"%>
<%@ page import="com.artofsolving.jodconverter.openoffice.connection.*"%>
<%@ page import="com.artofsolving.jodconverter.openoffice.converter.*"%>
<%@ page import="com.artofsolving.jodconverter.*"%>
<%@ page import="java.util.*"%>
<%@ page import="com.iori.webapp.util.*"%><%
//转换器安装路径
String exePath = "c:/Program Files/SWFTools/pdf2swf.exe";
try {PDF2SWFUtil.pdf2swf("c:/temp/333.pdf", exePath);
} catch (IOException e) {System.err.println("转换出错!");e.printStackTrace();
}
%><!-- 下面这些html可以去掉 -->
<html>
<head>
<title>Simple jsp page</title>
</head>
<body>Place your content here</body>
</html>

在项目DocConverter根目录,右键属性 - >Run as - >MyEclipse Server Application

发布到之前安装的Tomcat 6.0的根目录,然后用url路径访问:Http://localhost:8080/DocConverter/MyPDF2SWFTest.jsp 进行测试。

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

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

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

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

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

新建DocConverter.java

packagecom.iori.webapp.util;importjava.io.BufferedInputStream;importjava.io.File;importjava.io.IOException;importjava.io.InputStream;importcom.artofsolving.jodconverter.DocumentConverter;importcom.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;importcom.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;importcom.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter;/** doc docx格式转换* @author Administrator*/
public classDocConverter {private static final int environment=1;//环境1:windows 2:linux(涉及pdf2swf路径问题)privateString fileString;private String outputPath="";//输入路径,如果不设置就输出在默认位置privateString fileName;privateFile pdfFile;privateFile swfFile;privateFile docFile;publicDocConverter(String fileString){ini(fileString);}/** 重新设置 file* @param fileString*/public voidsetFile(String fileString){ini(fileString);}/** 初始化* @param fileString*/private voidini(String fileString){this.fileString=fileString;fileName=fileString.substring(0,fileString.lastIndexOf("."));docFile=newFile(fileString);pdfFile=new File(fileName+".pdf");swfFile=new File(fileName+".swf");}/** 转为PDF* @param file*/private void doc2pdf() throwsException{if(docFile.exists()){if(!pdfFile.exists()){OpenOfficeConnection connection=new SocketOpenOfficeConnection(8100);try{connection.connect();DocumentConverter converter=newOpenOfficeDocumentConverter(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服务未启动!****");throwe;}catch(com.artofsolving.jodconverter.openoffice.connection.OpenOfficeException e){e.printStackTrace();System.out.println("****swf转换器异常,读取转换文件失败****");throwe;}catch(Exception e){e.printStackTrace();throwe;}}else{System.out.println("****已经转换为pdf,不需要再进行转化****");}}else{System.out.println("****swf转换器异常,需要转换的文档不存在,无法转换****");}}/** 转换成swf*/private void pdf2swf() throwsException{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();throwe;}}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();throwe;}}}else{System.out.println("****pdf不存在,无法转换****");}}else{System.out.println("****swf已存在不需要转换****");}}static String loadStream(InputStream in) throwsIOException{int ptr=0;in=newBufferedInputStream(in);StringBuffer buffer=newStringBuffer();while((ptr=in.read())!=-1){buffer.append((char)ptr);}returnbuffer.toString();}/** 转换主方法*/public booleanconver(){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*/publicString getswfPath(){if(swfFile.exists()){String tempString=swfFile.getPath();tempString=tempString.replaceAll("\\\\", "/");returntempString;}else{return "";}}/** 设置输出路径*/public voidsetOutputPath(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 voidmain(String s[]){DocConverter d=new DocConverter("c:/temp/111.ppt");d.conver();}
}

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

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

第五步,flexpaper在线浏览swf文档

FlexPaper是一个开源轻量级的在浏览器上显示各种文档的组件,被设计用来与PDF2SWF一起使用,

使在Flex中显示PDF成为可能,而这个过程并无需PDF软件环境的支持。它可以被当做Flex的库来使用。

另外你也可以通过将一些例如Word、PPT等文档转成PDF,然后实现在线浏览。

FlexPaper_1.2.4_flash:无打印功能

FlexPaper_1.4.7_flash:打印功能,右键打印

这里我们不需要让用户打印,所以笔者选择FlexPaper_1.2.4_flash。

FlexPaper项目中有演示demo,这里笔者不多述。

综上,一个完整的在线文档浏览方案。

附一:使用iText将jpg、jpeg、png转换为pdf

其他,使用iText将jpg/jpeg/png转换为pdf

  iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成 PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。1.在企业的信息系统中,报表处理一直占比较重要的作用,iText--一种生 成PDF报表的Java组件,通过在服务器端使用Jsp或JavaBean生成PDF报表,客户端采用超级连接显示或下载得到生成的报表,这样就很好的解 决了B/S系统的报表处理问题。2.支持文本,表格,图形的操作,可以方便的跟 Servlet 进行结合。

继续笔者的DocConverter项目。开发环境是MyEclipse 9.0。笔者下载的是iText5.0.4。

新建JPG2PDFUtil.java

packagecom.iori.webapp.util;importjava.io.File;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importcom.lowagie.text.Document;importcom.lowagie.text.DocumentException;importcom.lowagie.text.Image;importcom.lowagie.text.pdf.PdfWriter;public classJPG2PDFUtil {privateString inputFileString;privateString outputFileString;publicJPG2PDFUtil(String inputFile, String outputFile) {this.inputFileString =inputFile;this.outputFileString =outputFile;  }public voidimgtopdf(){//创建一个文档对象Document doc = newDocument();try{//定义输出文件的位置PdfWriter.getInstance(doc, newFileOutputStream(outputFileString));//开启文档
doc.open();//设定字体 为的是支持中文//BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);//Font FontChinese = new Font(bfChinese, 12, Font.NORMAL);//向文档中加入图片/*//以下是多图合成一个pdf,暂时用不到for(int i=1;i<32;i++){//取得图片~~~图片格式:Image jpg1 = Image.getInstance("c:/"+i+".jpg"); //原来的图片的路径//获得图片的高度float heigth=jpg1.height();float width=jpg1.width();System.out.println("heigth"+i+"----"+heigth);System.out.println("width"+i+"-----"+width);//合理压缩,h>w,按w压缩,否则按w压缩//int percent=getPercent(heigth, width);//统一按照宽度压缩int percent=getPercent2(heigth, width);//设置图片居中显示jpg1.setAlignment(Image.MIDDLE);//直接设置图片的大小~~~~~~~第三种解决方案,按固定比例压缩//jpg1.scaleAbsolute(210.0f, 297.0f);//按百分比显示图片的比例jpg1.scalePercent(percent);//表示是原来图像的比例;//可设置图像高和宽的比例//jpg1.scalePercent(50, 100);doc.add(jpg1);}*///向文档中加入图片//取得图片~~~图片格式:Image jpg1 = Image.getInstance(inputFileString); //原来的图片的路径//获得图片的高度float heigth=jpg1.height();float width=jpg1.width();System.out.println("heigth----"+heigth);System.out.println("width-----"+width);//合理压缩,h>w,按w压缩,否则按w压缩//int percent=getPercent(heigth, width);//统一按照宽度压缩int percent=getPercent2(heigth, width);//设置图片居中显示
jpg1.setAlignment(Image.MIDDLE);//直接设置图片的大小~~~~~~~第三种解决方案,按固定比例压缩//jpg1.scaleAbsolute(210.0f, 297.0f);//按百分比显示图片的比例jpg1.scalePercent(percent);//表示是原来图像的比例;//可设置图像高和宽的比例//jpg1.scalePercent(50, 100);
doc.add(jpg1);//关闭文档并释放资源
doc.close();   }catch(FileNotFoundException e) {   e.printStackTrace();   }catch(DocumentException e) {   e.printStackTrace();   }catch(IOException e) {   e.printStackTrace();   }  }/*** 第一种解决方案* 在不改变图片形状的同时,判断,如果h>w,则按h压缩,否则在w>h或w=h的情况下,按宽度压缩*@paramh*@paramw*@return*/public int getPercent(float h,floatw){int p=0;float p2=0.0f;if(h>w){p2=297/h*100;}else{p2=210/w*100;}p=Math.round(p2);returnp;}/*** 第二种解决方案,统一按照宽度压缩* 这样来的效果是,所有图片的宽度是相等的,自我认为给客户的效果是最好的*@paramargs*/public int getPercent2(float h,floatw){int p=0;float p2=0.0f;p2=530/w*100;p=Math.round(p2);returnp;}/*** 第三种解决方案,就是直接压缩,不安像素比例,全部压缩到固定值,如210*297* *@paramargs*/public static voidmain(String[] args) {JPG2PDFUtil pt=new JPG2PDFUtil("c:/temp/ddd.jpg","c:/temp/ddd.pdf");pt.imgtopdf();}
}

在JPG2PDFUtil.java,右键属性 - >Run as - >Java Application ,输出main的测试结果。

在jsp中执行

新建MyJPG2PDFTest.jsp

<%@ page import="java.io.*"%>
<%@ page import="java.util.*"%>
<%@ page import="com.iori.webapp.util.*"%>
<%
JPG2PDFUtil pt=new JPG2PDFUtil("c:/temp/333.jpg", "c:/temp/333.pdf");
pt.imgtopdf();
%>
<!-- 下面这些html可以去掉 -->
<html><head>
<title>Simple jsp page</title>
</head><body>Place your content here</body>
</html>

在项目DocConverter根目录,右键属性 - >Run as - >MyEclipse Server Application

发布到之前安装的Tomcat 6.0的根目录,然后用url路径访问:Http://localhost:8080/DocConverter/MyDOC2PDFTest.jsp 进行测试。

附二:常见问题集FAQ

1.txt转换swf,发生中文乱码。

txt转换为utf-8编码,或txt格式手动改为odt,上传就不会发生乱码。从根源上解决,暂时就算了...暂时不想去纠结这些鸡毛。

2.加密的pdf可能导致转换为swf失败。

3.Microsoft Excel在公式运算中支持文本型的数值,而OpenOffice.org Calc不支持

此问题暂无解,请手动将Excel中文本型的数值修改为数值型的数值。

4.部分Excel存在过于丰富的样式(大部分指没有数据的单元格也填充了各种样式),即使用专业Adobe Acrobat 7(或9) Pro来进行转换,

本来可能预计将产生20-30分页的pdf,结果却产生800-900分页的pdf。此类文档在线转换,难以避免的将导致转换死锁。

请在你的Excel文档中删除多余的,毫无必要的样式,或者你有更灵活的做法。

5.有些中文PDF文件转换为SWF后,出现乱码(特别一些专业期刊)

1.下载XPDF:xpdf-chinese-simplified.tar.gz

2.下载字体:gkai00mp.rar

3.修改xpdf-chinese-simplified目录下的add-to-xpdfrc文件。将里面的路径设为自己的路径:

#----- begin Chinese Simplified support package (2011-sep-02)
cidToUnicode Adobe-GB1    C:\xpdf-chinese-simplified\Adobe-GB1.cidToUnicode
unicodeMap   ISO-2022-CN C:\xpdf-chinese-simplified\ISO-2022-CN.unicodeMap
unicodeMap   EUC-CN         C:\xpdf-chinese-simplified\EUC-CN.unicodeMap
unicodeMap   GBK              C:\xpdf-chinese-simplified\GBK.unicodeMap
cMapDir        Adobe-GB1    C:\xpdf-chinese-simplified\CMap
toUnicodeDir                     C:\xpdf-chinese-simplified\CMap
fontDir                             C:\WINDOWS\Fonts
displayCIDFontTT Adobe-GB1 C:\xpdf-chinese-simplified\CMap\gkai00mp.ttf
#fontFileCC Adobe-GB1 /usr/..../gkai00mp.ttf
#----- end Chinese Simplified support package

4.参照上面的代码,在调用pdf2swf命令中加入“ -s languagedir=D:\\xpdf\\xpdf-chinese-simplified ”参数。

PDF2SWFUtil.java

String cmd = exePath + " \"" + fileDir + "\" -o \"" + filePath + "/" + fileName + ".swf\" -T 9 -s languagedir=c:\\xpdf-chinese-simplified";

这样乱码的问题就解决了。

转载于:https://www.cnblogs.com/coprince/p/3312381.html

java将office文档pdf文档转换成swf文件在线预览相关推荐

  1. java将office文档,word,ppt,pdf文档转换成swf文件在线预览

    java将office文档pdf文档转换成swf文件在线预览 第一步,安装openoffice.org openoffice.org是一套sun的开源office办公套件,能在widows,linux ...

  2. Java 实现word、excel、ppt、txt等办公文件在线预览功能!

    大家好,我是宝哥! 如何用 Java 实现word.excel.ppt.txt等办公文件在线预览功能?本文告诉你答案! java 实现办公文件在线预览功能是一个大家在工作中也许会遇到的需求,网上些公司 ...

  3. 手把手教你用 Java 实现word、excel、ppt、txt等办公文件在线预览功能!

    如何用 Java 实现word.excel.ppt.txt等办公文件在线预览功能?本文告诉你答案! java 实现办公文件在线预览功能是一个大家在工作中也许会遇到的需求,网上些公司专门提供这样的服务, ...

  4. WEB端和微信小程序端的文档文件在线预览方法

    文件的在线预览方式汇总 文件在线预览功能可以提高用户体验,值得加入. 一般常见的文件有office套装.pdf.txt.md.和音视频. 音视频的预览是单独一块,今天主要说说文档文件的在线预览功能. ...

  5. java flexpaper_java web word文件 pdf文件在线预览源码(flexpaper)

    [实例简介]java web word文件 pdf文件在线预览源码 经过测试 [实例截图] [核心代码] BrowsenOnline html, body{ height:100%; } body { ...

  6. 快速实现word、excel、ppt、txt等办公文件在线预览功能(Java版)

    点击关注公众号,实用技术文章及时了解 来源:blog.csdn.net/weixin_40986713/ article/details/109527294 java实现办公文件在线预览功能是一个大家 ...

  7. 文件在线预览doc,docx转换pdf(一)

    文件在线预览doc,docx转换pdf(一) 前言 文档转换是一个是一块硬骨头,但是也是必不可少的,我们正好做的知识库产品中,也面临着同样的问题,文档转换,精准的全文搜索,知识的转换率,是知识库产品的 ...

  8. vue 实现pdf文件在线预览

    PDF文件在线预览的功能相信大家都是有遇到过的,这边有两种实现方法,大家可以借鉴参考下 第一种,使用vue-pdf 安装 npm install --save vue-pdf 页面代码 <tem ...

  9. 文件在线预览 图片 PDF Excel Word

    1.前端实现pdf文件在线预览功能 方式一.pdf文件理论上可以在浏览器直接打开预览但是需要打开新页面.在仅仅是预览pdf文件且UI要求不高的情况下可以直接通过a标签href属性实现预览 <ah ...

最新文章

  1. 传递list对象作为参数_24.scala的隐式参数
  2. mysql三次握手_TCP的三次握手和四次挥手详解
  3. mac系统jmeter生成html报告,jmeter5.1.1 生成html报告
  4. Tranquility
  5. linux子系统安装gromacs,科学网—Windows下GROMACS程序的编译 - 李继存的博文
  6. Java中的注解 Annotations
  7. css 网格布局_CSS网格布局
  8. 求幂级数展开的部分和 (20 分)新鲜出炉!!!
  9. TensorFlow GPU配置
  10. Linux下的Notepad++编辑器——Notepadqq
  11. nmap命令教程详解
  12. 免费的注册表修复工具推荐
  13. dnspod动态解析linux,NAS折腾记 篇一:五分钟搞定威联通DNSPOD动态域名解析-简单教程+问题解决...
  14. table表格表头单元格添加斜线
  15. c++通讯录管理系统(函数,指针,结构体)
  16. jperf linux运行,iperf for Linux 的安装与使用
  17. 史上最全ospf hcia hcip hcie必备
  18. 2050的编程竞赛青年见面会感想
  19. 计算机网络波动大,网络不稳定是什么原因?
  20. 热议:高数、线代应该成为计算机专业学习的重心吗?

热门文章

  1. 用vue写一套销客多电商分销后台系统
  2. 解决鼠标移入子元素触发父元素的mouseout事件
  3. mobiscroll用法
  4. JSP输出HelloWorld和Servlet输出HelloWorld
  5. handbrake下载太慢_HandBrake最新下载
  6. linux命令:查看本机IP地址 curl ip.gs
  7. python 实现youtube 上传
  8. win7系统怎样开启aero特效?
  9. Arduino SimpleFOC库-004-BLDC 电机配置
  10. 赵雅智_service电话监听2加接通电话录音