如果你是使用maven来管理项目的话,你可以在pom.xml 文件下填写如下代码:
<dependency>
??? ?<groupId>com.artofsolving</groupId>
??? ?<artifactId>jodconverter</artifactId>
??? ?<version>2.2.1</version>
? </dependency>?
则会自动下载此jar包
在运行次类之前,你必须确保已经装好 SWFTools 和 openoffice 这两个软件
openoffice 安装:
http://www.voidcn.com/article/p-smriedgf-bbx.html
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;
?private String swfToolesPath="D:/SWFTools/pdf2swf.exe";
?private String language ="d:/language";
?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 int doc2pdf() throws Exception {
??int reslut=0;
??if (docFile.exists()) {
???if (!pdfFile.exists()) {
????OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);
????try {
?????connection.connect();
?????DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
?????converter.convert(docFile,pdfFile);
?????connection.disconnect();
?????System.out.println("****pdf转换成功,PDF输出:" + pdfFile.getPath()+ "****");
????} catch (java.net.ConnectException e) {
?????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;
????}
????reslut=1;
???} else {
????System.out.println("****已经转换为pdf,不需要再进行转化****"+"n" +"开始转换swf");
????reslut=2;
????
???}
??} else {
???System.out.println("****swf转换器异常,需要转换的文档不存在,无法转换****");
???
??}
??return reslut;
?}
?/*
? * 转换成swf
? */
?@SuppressWarnings("unused")
?private void pdf2swf(int rs) throws Exception {
??Runtime r = Runtime.getRuntime();
??if (!swfFile.exists()) {
???if (pdfFile.exists()) {
????
????if (environment == 1){
?????try {
??????String cmd=swfToolesPath.trim()+" -o "+swfFile.getPath().trim()+" -t "+pdfFile.getPath().trim()+" -s languagedir="+language.trim();
??????System.out.println(cmd);
??????Process p = r.exec(cmd);
??????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()) {
???????if(rs!=2){
????????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();
?}
?/*
? * 转换主方法
? */
?@SuppressWarnings("unused")
?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 {
???int rs=doc2pdf();
???if(rs==1||rs==2){
????
????pdf2swf(rs);
???}
???
??} catch (Exception e) {
???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//ddddd.pdf"); ??d.conver(); ?} }