博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实现一个具有百度文库文档转换功能的工具类
阅读量:6620 次
发布时间:2019-06-25

本文共 8996 字,大约阅读时间需要 29 分钟。

    用过百度文库、豆丁的朋友,都知道,我们只要将文档上传到这些网站上,就可以实现分享。无论你上传的是pdfppt,还是doctxtpptx文件,都会在网页上显示给用户看。从技术上简单地说,可以分成三步:

1)将格式为x的文档文件上传到服务器;

2)在服务器上完成文档的相关处理;

3)将处理后的结果展示在网页上。

其中最关键的一步就是(2)。做技术的人都可以很容易地看出来,这类用web应用是用flash显示出来的。那么,一个文档文件,是如何转换为swf文件的呢?本文就将为你介绍,如何避免再造车轮的冗余行为发生,而借助高效的工具将docpptpdf等文档文件转换为swf格式。比如百度文库接收用户上传的文件后,显示在网页上时是其转换成的SWF格式文件。这样就很适合Web应用了。

一、JODConverter

    首先利用JODConverterdocppttxtdocx等文件转换为pdf文件。然后用SwfToolspdf文件转换为swf文件。JODConverter是一个名叫Java OpenDocument Converter的基于LGPL协议的软件,用于实现不同的office格式之间的转换,这些office格式包括Microsoft OfficeOpenOfficeJODConverter的项目主页是,可以查看更多的信息。可以通过下载。

    首先要安装OpenOfficeJODConverter的功能,基本就是实现了OpenOffice中的另存为的功能。个版本的OpenOffice的下载地址为:

Language 

The names do not refer to countries.

 

Windows 

Intel 

MSI

Linux 

Intel 

RPM

Linux 

Intel 

DEB

Linux 

x86-64

RPM

Linux 

x86-64

DEB

Mac OS

Intel 

DMG

Mac OS

PPC ¹

DMG

Solaris 

Intel 

PKG

Solaris 

Sparc 

PKG

Arabic

عربي

Basque

Euskara

Bengali

বাংলা

Bulgarian

български език

Catalan

Català

Catalan (Valencian)

Català (Valencià)

not available

Chinese (simplified)

简体中文

Chinese (traditional)

正體中文

Czech

čeština

Danish

Dansk

Dutch

Nederlands

English (British)

English (British)

English (US)

English (US)

Estonian

Eesti keel

Finnish

Suomi

French

Français

Galician

Galego

German

Deutsch

Greek

Ελληνικά

Hebrew

עִבְרִית

Hungarian

Magyar

Irish

Gaeilge

Italian

Italiano

Language 

The names do not refer to countries.

 

Windows 

Intel 

MSI

Linux 

Intel 

RPM

Linux 

Intel 

DEB

Linux 

x86-64

RPM

Linux 

x86-64

DEB

Mac OS

Intel 

DMG

Mac OS

PPC ¹

DMG

Solaris 

Intel 

PKG

Solaris 

Sparc 

PKG

Japanese

日本語

Khmer

ភាសាខ្មែរ

Korean

한국어

Kurdish

Kurdî

Lithuanian

Lietuvių

Macedonian

Македонски

Mongolian

Монгол

Norwegian (Bokmål)

Norsk (Bokmål)

Norwegian (Nynorsk)

Norsk (Nynorsk)

Oromo

ኦሮሚኛ

Polish

Polski

Portuguese (Brazilian)

Português (do Brasil)

Portuguese (European)

Português (Europeu)

Russian

Русский

Serbian (Cyrillic)

Cрпски (ћирилицом)

Serbian (Latin)

Srpski (latinicom)

Slovenian

Slovenski jezik

Spanish

Español

Swedish

Svenska

Turkish

Türkçe

Vietnamese

Tiếng Việt

    安装完OpenOffice后,要记住你的OfficeHome。不同平台的OfficeHome是不同的。比如你将OpenOffice安装到Windows“D:\Program Files\OpenOffice.org 3”,那么这就是你在Windows上的OfficeHome。如果你是Linux用户,你可能会将OpenOffice安装到“/opt/openoffice.org3”,这就是你的OfficeHome。如果你是Mac用户,在Mac系统的自动安装后,你需要知道你的OfficeHome“/Application/OpenOffice.org.app/Contents”

   一定要知道你的OfficeHome,否则JODConverter是没法工作的。然后下载JODConverter API,下载页:

二、SwfTools

    然后利用SwfTools就中间生成的pdf文件,转换为swf文件。SwfTools是将各种不同格式的文件转换为Adobe Flashswf格式文件的软件,可以运行在LinuxMacFreeBSDUnix-like系统以及Windows系统上。它可以实现pdfaviwavpngjpeggif等格式向swf格式的转换。该项目主页是,在。

1WindowsLinuxMac用户可以忽略)

1)下载安装swftools

下载地址:

安装目录:D:\Program Files\swftools

2)将不同格式的文件转换为SWF

使用安装目录下的转换命令:

[plain]
  1. avi2swf inputFile -o outputFile  
  2. font2swf inputFile -o outputFile  
  3. gif2swf inputFile -o outputFile  
  4. jpeg2swf inputFile -o outputFile  
  5. pdf2swf inputFile -o outputFile  
  6. png2swf inputFile -o outputFile  
  7. wav2swf inputFile -o outputFile  
avi2swf inputFile -o outputFile font2swf inputFile -o outputFile gif2swf inputFile -o outputFile jpeg2swf inputFile -o outputFile pdf2swf inputFile -o outputFile png2swf inputFile -o outputFile wav2swf inputFile -o outputFile

2LinuxWindowsMac用户可以忽略)

1)安装依赖库

[plain]
  1. sudo apt-get install libpng12-dev  
  2. sudo apt-get install libjpeg62-dev  
  3. sudo apt-get install libgif-dev  
  4. sudo apt-get install libfreetype6-dev  
sudo apt-get install libpng12-dev sudo apt-get install libjpeg62-dev sudo apt-get install libgif-dev sudo apt-get install libfreetype6-dev
2)安装swftools

[plain]
  1. wget http://www.swftools.org/swftools-0.9.1.tar.gz  
  2. tar zxvf swftools-0.9.1.tar.gz  
  3. cd swftools-0.9.1  
  4. ./configure  
  5. make  
  6. sudo make install  
wget http://www.swftools.org/swftools-0.9.1.tar.gz tar zxvf swftools-0.9.1.tar.gz cd swftools-0.9.1 ./configure make sudo make install
3)将其他文件格式转换为SWF

参考Windows平台上的SwfTools使用。

3MacWindowsLinux用户可以忽略)

1)安装swftools

最简单的方式,是用macportfink等来安装。macport的命令为:

[plain]
  1. sudo port install swftools  
sudo port install swftools
MacPort
安装SwfTools
,不需要考虑其依赖库,MacPort
会帮助你安装好。MacPort
的安装,请参考《》一文。

2)将其他文件格式转换为SWF

参考Windows平台上的SwfTools使用。

三、Java实例实现各office文件格式向swf的转换

创建一个实现类型转换的工具类,命名为FileConverterUtil,如下:

[java]
  1. public class FileConverterUtil {  
  2.     public static String fileToSwf(String inputFilePath) {  
  3.         return pdfToSwf(fileToPdf(inputFilePath));  
  4.     }  
  5.     private static String fileToPdf(String inputFilePath) {  
  6.         //...   
  7.     }  
  8.     private static String pdfToSwf(String inputFilePath) {  
  9.         //...   
  10.     }  
  11. }  
public class FileConverterUtil { public static String fileToSwf(String inputFilePath) { return pdfToSwf(fileToPdf(inputFilePath)); } private static String fileToPdf(String inputFilePath) { //... } private static String pdfToSwf(String inputFilePath) { //... } }

然后分别实现fileToPdfpdfToSwffileToPdf中使用到JODConverterAPI,如下:

[java]
  1. import org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration;  
  2. import org.artofsolving.jodconverter.office.OfficeManager;  
  3. import org.artofsolving.jodconverter.OfficeDocumentConverter;  
  4. import java.io.File;  
  5.   
  6. private static String fileToPdf(String inputFilePath) {  
  7.     DefaultOfficeManagerConfiguration config = new DefaultOfficeManagerConfiguration();  
  8.           
  9.     String officeHome = getOfficeHome();  
  10.     config.setOfficeHome(officeHome);  
  11.       
  12.     OfficeManager officeManager = config.buildOfficeManager();  
  13.     officeManager.start();  
  14.   
  15.     OfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager);  
  16.     String outputFilePath = getOutputFilePath(inputFilePath);  
  17.     converter.convert(new File(inputFilePath), new File(outputFilePath));  
  18.   
  19.     officeManager.stop();  
  20. }  
import org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration; import org.artofsolving.jodconverter.office.OfficeManager; import org.artofsolving.jodconverter.OfficeDocumentConverter; import java.io.File; private static String fileToPdf(String inputFilePath) { DefaultOfficeManagerConfiguration config = new DefaultOfficeManagerConfiguration(); String officeHome = getOfficeHome(); config.setOfficeHome(officeHome); OfficeManager officeManager = config.buildOfficeManager(); officeManager.start(); OfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager); String outputFilePath = getOutputFilePath(inputFilePath); converter.convert(new File(inputFilePath), new File(outputFilePath)); officeManager.stop(); }
其中getOfficeHome()可以根据你使用该工具类的平台增加程序的可移植性。fileToPdf可以实现各种office文件到pdf文件的转换。

[java]
  1. private static String getOfficeHome(String inputFilePath) {  
  2.     String osName = System.getProperty("os.name");  
  3.     if (Pattern.matches("Linux.*", osName) {  
  4.         return "/opt/openoffice.org3";  
  5.     } else if (Pattern.matches("Windows.*", osName) {  
  6.         return "D:\\Applications\\OpenOffice.org 3";  
  7.     } else if (Pattern.matches("Mac.*", osName) {  
  8.         return "/Application/OpenOffice.org.app/Contents";  
  9.     }  
  10.     return null;  
  11. }  
private static String getOfficeHome(String inputFilePath) { String osName = System.getProperty("os.name"); if (Pattern.matches("Linux.*", osName) { return "/opt/openoffice.org3"; } else if (Pattern.matches("Windows.*", osName) { return "D:\\Applications\\OpenOffice.org 3"; } else if (Pattern.matches("Mac.*", osName) { return "/Application/OpenOffice.org.app/Contents"; } return null; }

提供统一的转换文件命名规则,可以提供如下方法,具体实现看你应用场景的方便性了。

[java]
  1. private static String getOutputFilePath(String inputFilePath) {  
  2.     // Initialized by yourself.   
  3. }  
private static String getOutputFilePath(String inputFilePath) { // Initialized by yourself. }
然后利用SwfTools
实现PdfToSwf
方法。

[java]
  1. private static String pdfToSwf(String inputFilePath) {  
  2.     try {  
  3.         String outputFilePath = getOutputFilePath(inputFilePath);  
  4.         String[] command = new String[4];  
  5.         command[0] = getSwftoolsHome();  
  6.         command[1] = inputFilePath;  
  7.         command[2] = "-o";  
  8.         command[3] = outputFilePath;  
  9.         Process process = Runtime.getRuntime().exec(command);  
  10.         process.waitFor();  
  11.         return outputFilePath;  
  12.     } catch (Exception e) {  
  13.         // initialized by yourself.   
  14.     }  
  15. }  
private static String pdfToSwf(String inputFilePath) { try { String outputFilePath = getOutputFilePath(inputFilePath); String[] command = new String[4]; command[0] = getSwftoolsHome(); command[1] = inputFilePath; command[2] = "-o"; command[3] = outputFilePath; Process process = Runtime.getRuntime().exec(command); process.waitFor(); return outputFilePath; } catch (Exception e) { // initialized by yourself. } }

其中getSwftoolsHome方法就是获取你的SwfTools所在目录,依据不同平台,你可以如下实现该方法:

[java]
  1. private static String getSwftoolsHome() {  
  2.     String osName = System.getProperty("os.name");  
  3.     if (Pattern.matches("Linux.*", osName) {  
  4.         return "/usr/local/bin";  
  5.     } else if (Pattern.matches("Windows.*", osName) {  
  6.         return "D:\\Program Files\\SwfTools";  
  7.     } else if (Pattern.matches("Mac.*", osName) {  
  8.         return "/usr/local/bin";  
  9.     }  
  10.     return null;  
  11. }  
private static String getSwftoolsHome() { String osName = System.getProperty("os.name"); if (Pattern.matches("Linux.*", osName) { return "/usr/local/bin"; } else if (Pattern.matches("Windows.*", osName) { return "D:\\Program Files\\SwfTools"; } else if (Pattern.matches("Mac.*", osName) { return "/usr/local/bin"; } return null; }

这样类似于百度文库、豆丁网的文档转换工具的核心功能就基本实现了。Enjoy It

转载请注明来自“柳大的CSDN博客”,原文地址:

转载于:https://www.cnblogs.com/jpa2/archive/2012/04/10/2527541.html

你可能感兴趣的文章
Android系统自带样式(android:theme)解析
查看>>
全志A33开发板Linux内核定时器编程
查看>>
全栈必备 敏捷估点
查看>>
一个爬虫小技巧
查看>>
作为一名合格的JAVA架构师需要点亮哪些技能树?
查看>>
为什么短视频会让人刷不停?背后也许用了这套技术
查看>>
Kubernetes 在知乎上的应用
查看>>
读C#开发实战1200例子记录-2017年8月14日11:20:38获取汉字编码值
查看>>
Fescar 发布 0.3.1 版本, 支持 ZooKeeper 注册中心
查看>>
网站优化中四个常见的优化难题及解决方法!
查看>>
【死磕 Spring】----- IOC 之解析 bean 标签:BeanDefinition
查看>>
Java部署环境搭建(Linux)
查看>>
使用 will-change 来提升浏览器渲染效果
查看>>
Animation总结(差值器和估值器)
查看>>
Java数据结构与算法(十)-图
查看>>
4.1 在SELinux中客体类存在的目的
查看>>
如何用iPad运行Python代码?
查看>>
PHP学习3——数组
查看>>
E-HPC支持多队列管理和自动伸缩
查看>>
Maven的插件:命令行执行
查看>>