java将office文档pdf文档转换成swf文件在线预览
第一步,安装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文件在线预览相关推荐
- java将office文档,word,ppt,pdf文档转换成swf文件在线预览
java将office文档pdf文档转换成swf文件在线预览 第一步,安装openoffice.org openoffice.org是一套sun的开源office办公套件,能在widows,linux ...
- Java 实现word、excel、ppt、txt等办公文件在线预览功能!
大家好,我是宝哥! 如何用 Java 实现word.excel.ppt.txt等办公文件在线预览功能?本文告诉你答案! java 实现办公文件在线预览功能是一个大家在工作中也许会遇到的需求,网上些公司 ...
- 手把手教你用 Java 实现word、excel、ppt、txt等办公文件在线预览功能!
如何用 Java 实现word.excel.ppt.txt等办公文件在线预览功能?本文告诉你答案! java 实现办公文件在线预览功能是一个大家在工作中也许会遇到的需求,网上些公司专门提供这样的服务, ...
- WEB端和微信小程序端的文档文件在线预览方法
文件的在线预览方式汇总 文件在线预览功能可以提高用户体验,值得加入. 一般常见的文件有office套装.pdf.txt.md.和音视频. 音视频的预览是单独一块,今天主要说说文档文件的在线预览功能. ...
- java flexpaper_java web word文件 pdf文件在线预览源码(flexpaper)
[实例简介]java web word文件 pdf文件在线预览源码 经过测试 [实例截图] [核心代码] BrowsenOnline html, body{ height:100%; } body { ...
- 快速实现word、excel、ppt、txt等办公文件在线预览功能(Java版)
点击关注公众号,实用技术文章及时了解 来源:blog.csdn.net/weixin_40986713/ article/details/109527294 java实现办公文件在线预览功能是一个大家 ...
- 文件在线预览doc,docx转换pdf(一)
文件在线预览doc,docx转换pdf(一) 前言 文档转换是一个是一块硬骨头,但是也是必不可少的,我们正好做的知识库产品中,也面临着同样的问题,文档转换,精准的全文搜索,知识的转换率,是知识库产品的 ...
- vue 实现pdf文件在线预览
PDF文件在线预览的功能相信大家都是有遇到过的,这边有两种实现方法,大家可以借鉴参考下 第一种,使用vue-pdf 安装 npm install --save vue-pdf 页面代码 <tem ...
- 文件在线预览 图片 PDF Excel Word
1.前端实现pdf文件在线预览功能 方式一.pdf文件理论上可以在浏览器直接打开预览但是需要打开新页面.在仅仅是预览pdf文件且UI要求不高的情况下可以直接通过a标签href属性实现预览 <ah ...
最新文章
- 传递list对象作为参数_24.scala的隐式参数
- mysql三次握手_TCP的三次握手和四次挥手详解
- mac系统jmeter生成html报告,jmeter5.1.1 生成html报告
- Tranquility
- linux子系统安装gromacs,科学网—Windows下GROMACS程序的编译 - 李继存的博文
- Java中的注解 Annotations
- css 网格布局_CSS网格布局
- 求幂级数展开的部分和 (20 分)新鲜出炉!!!
- TensorFlow GPU配置
- Linux下的Notepad++编辑器——Notepadqq
- nmap命令教程详解
- 免费的注册表修复工具推荐
- dnspod动态解析linux,NAS折腾记 篇一:五分钟搞定威联通DNSPOD动态域名解析-简单教程+问题解决...
- table表格表头单元格添加斜线
- c++通讯录管理系统(函数,指针,结构体)
- jperf linux运行,iperf for Linux 的安装与使用
- 史上最全ospf hcia hcip hcie必备
- 2050的编程竞赛青年见面会感想
- 计算机网络波动大,网络不稳定是什么原因?
- 热议:高数、线代应该成为计算机专业学习的重心吗?