在線預覽圖片、word、pdf文件。
其中word文件要轉換成pdf文件,瀏覽器支持在線預覽pdf文件,不需要使用flexpaper將pdf轉換成flash文件(swf文件)後再嵌入flash文件。
用到了openOffice服務,使用word轉PDF前需要先打開openOffice服務,在openOffice/program下執行soffice -headless -accept=”socket,host=127.0.0.1,port=8100;urp;” -nofirststartwizard命令
安裝包下載
1.openoffice是Apache下的一個開放免費的文字處理軟件
下載地址:Apache oppenoffice 官網下載 版本-3.4.1
2.JODConverter一個Java的OpenDocument 文件轉換器,在此我們只用到它的jar包
下載地址:JODCConverter下載
/*
* 在線預覽
* IE可用
*/
@RequestMapping(value="/preview.do",produces="text/html;charset=UTF-8")
public @ResponseBody void preview(String id,HttpServletResponse response,HttpServletRequest request) throws IOException {
Attachment attachment = attachmentSevice.selectAttach(id);
response.reset();
response.setContentType("text/html; charset=UTF-8");
//response.setContentType("application/octet-stream");
String fullFileName = request.getSession().getServletContext().getRealPath("/")+attachment.getFilePath();
File file = null;
if(fullFileName.endsWith(".doc")){
DocConverter doc = new DocConverter(fullFileName);
file = doc.conver();
}else{
file = new File(fullFileName);
}
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
URL u = new URL("file:///" + fullFileName);
/*response.setContentType(u.openConnection().getContentType());
response.setHeader("Content-Disposition", "inline; filename=" + file.getName());*/
String mime =request.getServletContext().getMimeType(file.getName());
response.setContentType(mime);
response.addHeader("Content-Length", String.valueOf(bis.available()));
OutputStream os = response.getOutputStream();
try {
int count = 0;
byte[] buffer = new byte[1024 * 1024];
while ((count = bis.read(buffer)) != -1)
os.write(buffer, 0, count);
os.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (os != null)
os.close();
if (bis != null)
bis.close();
}
}
將word文件轉換成PDF文件:(引用自http://blog.csdn.net/z69183787/article/details/17468039)
/**
* doc docx格式轉換
*/
public class DocConverter {
private static final int environment = 1;// 環境 1:windows 2:linux
private String fileString;// (只涉及pdf2swf路徑問題)
private String outputPath = "";// 輸入路徑 ,如果不設置就輸出在默認的位置
private String fileName;
private File pdfFile;
private File swfFile;
private File docFile;
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 void doc2pdf() throws Exception {
if (docFile.exists()) {
if (!pdfFile.exists()) {
OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);
try {
connection.connect();
DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
converter.convert(docFile, pdfFile);
// close the connection
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;
}
} else {
System.out.println("****已經轉換爲pdf,不需要再進行轉化****");
}
} else {
System.out.println("****swf轉換器異常,需要轉換的文檔不存在,無法轉換****");
}
}
/**
* 轉換成 swf
*/
@SuppressWarnings("unused")
private void pdf2swf() throws Exception {
Runtime r = Runtime.getRuntime();
if (!swfFile.exists()) {
if (pdfFile.exists()) {
if (environment == 1) {// windows環境處理
try {
Process p = r.exec("E:/0wangshuai/JAVA/DEMO/附件預覽/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 (IOException e) {
e.printStackTrace();
throw e;
}
} 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();
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 File conver() {
if (environment == 1) {
System.out.println("****swf轉換器開始工作,當前設置運行環境windows****");
} else {
System.out.println("****swf轉換器開始工作,當前設置運行環境linux****");
}
try {
doc2pdf();
//pdf2swf();
} catch (Exception e) {
e.printStackTrace();
}
return pdfFile;
}
/**
* 返回文件路徑
*
* @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");
}
}
}
}
js動態展示可預覽文件
var str = "<div><input type='checkbox' name='attachLst' value='"+value.id+"'><a style='color:#337ab7' target=\"_blank\" href=\""+base+"projectInfoController/preview.do?id="+value.id+"\">"+value.fileName+"</a></div>";
$('#form_HQGL_EDIT .attachment').prepend(str);