首先我们需要准备需要的文件
1、pdf.js的文件,可以直接百度去官网下载,下载下来官网还会自带一个demo。
2、下载openoffice并安装好.
1)windos环境下的直接百度下载安装就好了。
2)linux下载的安装可以参考这个https://blog.csdn.net/u013132051/article/details/53304562
我们先说下实现过程吧.pdf.js是预览pdf文件的,openoffice就是用来将office文件转换成pdf格式。这样一来我们就可以实现pdf预览的功能.
解压出来的文件夹:
官网这里面的demo是直接可以使用的,也就是说可以直接预览文件
我们可以直接打开viewer.html进行预览.那么他是怎么指定文件预览的呢。答案是在viewer.js这个文件里面,viewer.js里面有一个DEFAULT_URL的变量来指定需要预览的文件,除此之外,我们还可以在网址后面加一个参数,例如file:///C:/Users/Shinelon/Desktop/blog/pdf/pdfjs-1.9.426-dist/web/viewer.html?file=文件路径+文件名。这样也可以实现文件预览。
这样我们就可以直接将此文件放入到项目当中去。利用第二种预览方式也就是在路径后面加上file=文件路径+文件名的方式去预览pdf文件.
pdf.js的用法就是以上内容了。我们再来说说openoffice.openoffice我们下载安装好以后,我们需要开启服务这个开启服务不能直接打开,而是需要通过命令行操作
-
package com.hnbits.exam.study.action;
-
import java.io.BufferedReader;
-
import java.io.File;
-
import java.io.FileInputStream;
-
import java.io.FileNotFoundException;
-
import java.io.FileOutputStream;
-
import java.io.FileReader;
-
import java.io.InputStreamReader;
-
import java.io.PrintStream;
-
import java.util.ArrayList;
-
import java.util.List;
-
-
-
import org.apache.commons.io.FileExistsException;
-
import org.artofsolving.jodconverter.OfficeDocumentConverter;
-
import org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration;
-
import org.artofsolving.jodconverter.office.ExternalOfficeManagerConfiguration;
-
import org.artofsolving.jodconverter.office.OfficeManager;
-
import org.slf4j.Logger;
-
import org.slf4j.LoggerFactory;
-
-
-
import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;
-
import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;
-
import com.hnbits.examfront.examexercise.action.FrontExerciseAction;
-
import com.hnbits.util.FileUtil;
-
import com.hnbits.util.PropertiesUtil;
-
import com.hnbits.util.StringUtil;
-
import com.sun.star.io.IOException;
-
-
-
public
class WordToPdf {
-
public
static
final String PARAMETER_OFFICE_PORT = PropertiesUtil.getCommonConfig().getProperty(
"system.openoffice.port");
-
public
static
final String PARAMETER_OFFICE_HOME = PropertiesUtil.getCommonConfig().getProperty(
"system.openoffice.home");
-
private
final
static Logger log = LoggerFactory.getLogger(WordToPdf.class);
-
private
static OfficeManager officeManager;
-
private
static OfficeDocumentConverter documentConverter;
-
static{
-
DefaultOfficeManagerConfiguration configuration =
new DefaultOfficeManagerConfiguration();
-
configuration.setPortNumber(Integer.parseInt(PARAMETER_OFFICE_PORT));
-
configuration.setOfficeHome(
new File(PARAMETER_OFFICE_HOME));
-
String cmd=
"tasklist /fi \"imagename eq soffice.bin\"";
-
try{
-
officeManager = configuration.buildOfficeManager();
-
Process proc=Runtime.getRuntime().exec(cmd);
-
BufferedReader bufferedReader =
new BufferedReader(
new InputStreamReader(proc.getInputStream()));
-
String line =
null;
-
Boolean is=
true;
-
while ((line = bufferedReader.readLine()) !=
null) {
-
if (line.contains(
"soffice.bin")) {
-
is=
false;
-
}
-
}
-
if(is){
-
officeManager.start();
-
log.debug(
"office转换服务启动成功!");
-
}
else {
-
ExternalOfficeManagerConfiguration externalProcessOfficeManager =
new
-
ExternalOfficeManagerConfiguration();
-
externalProcessOfficeManager.setConnectOnStart(
true);
-
externalProcessOfficeManager.setPortNumber(
8100);
-
officeManager = externalProcessOfficeManager.buildOfficeManager();
-
officeManager.start();
-
log.debug(
"office转换服务启动成功!");
-
}
-
}
catch(Exception e){
-
log.error(
"office转换服务启动失败!"+e.getMessage());
-
}
-
}
-
-
public static void stopService() {
-
log.debug(
"关闭office转换服务....");
-
if (officeManager !=
null) {
-
officeManager.stop();
-
}
-
log.debug(
"关闭office转换成功!");
-
}
-
-
public static int convert(File inputFile,File outputFile) throws Exception{
-
try{
-
log.debug(
"文档转换开始:" + inputFile +
" --> " + outputFile);
-
if (inputFile.exists()) {
// 找不到源文件, 则返回
-
if (!outputFile.exists()) {
// 假如目标路径不存在, 则新建该路径
-
outputFile.createNewFile();
-
}
-
String path=inputFile.getPath().substring(inputFile.getPath().length()-
25);
-
if(path.indexOf(
".pdf")!=-
1){
-
FileUtil.CopyFile(inputFile.getPath(), outputFile.getPath(),log);
-
return -
1;
-
}
-
documentConverter =
new OfficeDocumentConverter(officeManager);
-
documentConverter.convert(inputFile, outputFile);
-
return
1;
-
}
-
}
-
catch(Exception e){
-
throw e;
-
}
-
finally{
-
log.debug(
"文档转换转换---- 结束----");
-
}
-
return
0;
-
-
}
-
-
}
if(is){
officeManager.start();
log.debug("office转换服务启动成功!");
}else {
ExternalOfficeManagerConfiguration externalProcessOfficeManager = new
ExternalOfficeManagerConfiguration();
externalProcessOfficeManager.setConnectOnStart(true);
externalProcessOfficeManager.setPortNumber(8100);
officeManager = externalProcessOfficeManager.buildOfficeManager();
officeManager.start();
log.debug("office转换服务启动成功!");
}
}catch(Exception e){
log.error("office转换服务启动失败!"+e.getMessage());
}
}
public static void stopService() {
log.debug("关闭office转换服务....");
if (officeManager != null) {
officeManager.stop();
}
log.debug("关闭office转换成功!");
}
public static int convert(File inputFile,File outputFile) throws Exception{
try{
log.debug("文档转换开始:" + inputFile + " --> " + outputFile);
if (inputFile.exists()) {// 找不到源文件, 则返回
if (!outputFile.exists()) { // 假如目标路径不存在, 则新建该路径
outputFile.createNewFile();
}
String path=inputFile.getPath().substring(inputFile.getPath().length()-25);
if(path.indexOf(".pdf")!=-1){
FileUtil.CopyFile(inputFile.getPath(), outputFile.getPath(),log);
return -1;
}
documentConverter = new OfficeDocumentConverter(officeManager);
documentConverter.convert(inputFile, outputFile);
return 1;
}
}
catch(Exception e){
throw e;
}
finally{
log.debug("文档转换转换---- 结束----");
}
return 0;
}
}
上面就是一个完整的例子。也是经过我爬过很多坑而撸出来的代码!