前言 当前的主浏览器都支持直接打开pdf文件,从而实现文件预览。如果是其他格式文件则得下载,因此用openOffice实现文件转pdf格式。一、openOffice的安装下载地址:http:www。openoffice。org 安装教程可参考:openOffice下载和安装进入安装目录,输入cmd命令窗口输入以下命令启动: sofficeheadlessacceptsocket,host127。0。0。1,port8100;nofirststartwizard二、测试导包!openofficedependencygroupIdcom。artofsolvinggroupIdjodconverterartifactIdversion2。2。1versiondependency文件工具类importcom。artofsolving。jodconverter。DefaultDocumentFormatRimportcom。artofsolving。jodconverter。DocumentCimportcom。artofsolving。jodconverter。DocumentFimportcom。artofsolving。jodconverter。openoffice。connection。OpenOfficeCimportcom。artofsolving。jodconverter。openoffice。connection。SocketOpenOfficeCimportcom。artofsolving。jodconverter。openoffice。converter。StreamOpenOfficeDocumentCimportjava。io。;importjava。net。HttpURLCimportjava。net。URL;importjava。net。URLC文件格式转换工具类authorSimonversion1。0sinceJDK1。8publicclassFileConvertUtil{默认转换后文件后缀privatestaticfinalStringDEFAULTSUFFIXopenofficeportpublicstaticfinalStringDEFAULTHOST127。0。0。1;privatestaticfinalIntegerOPENOFFICEPORT8100;office文档转换为PDF(处理本地文件)publicstaticInputStreamconvertLocaleFile(StringsourcePath,Stringsuffix)throwsException{FileinputFilenewFile(sourcePath);InputStreaminputStreamnewFileInputStream(inputFile);returncovertCommonByStream(inputStream,suffix);}office文档转换为PDF(处理网络文件)publicstaticInputStreamconvertNetFile(StringnetFileUrl,Stringsuffix)throwsException{创建URLURLurlnewURL(netFileUrl);试图连接并取得返回状态码URLConnectionurlconnurl。openConnection();urlconn。connect();HttpURLConnectionhttpconn(HttpURLConnection)inthttpResulthttpconn。getResponseCode();if(httpResultHttpURLConnection。HTTPOK){InputStreaminputStreamurlconn。getInputStream();returncovertCommonByStream(inputStream,suffix);}}将文件以流的形式转换publicstaticInputStreamcovertCommonByStream(InputStreaminputStream,Stringsuffix)throwsException{ByteArrayOutputStreamoutnewByteArrayOutputStream();OpenOfficeConnectionconnectionnewSocketOpenOfficeConnection(OPENOFFICEPORT);connection。connect();DocumentConverterconverternewStreamOpenOfficeDocumentConverter(connection);DefaultDocumentFormatRegistryformatRegnewDefaultDocumentFormatRegistry();DocumentFormattargetFormatformatReg。getFormatByFileExtension(DEFAULTSUFFIX);DocumentFormatsourceFormatformatReg。getFormatByFileExtension(suffix);converter。convert(inputStream,sourceFormat,out,targetFormat);connection。disconnect();returnoutputStreamConvertInputStream(out);}outputStream转inputStreampublicstaticByteArrayInputStreamoutputStreamConvertInputStream(finalOutputStreamout)throwsException{ByteArrayOutputStreambaos(ByteArrayOutputStream)returnnewByteArrayInputStream(baos。toByteArray());}}controler层代码PostMapping(onlinePreview)publicvoidonlinePreview(RequestParam(url)Stringurl,HttpServletResponseresponse)throwsException{获取文件类型根据实际的url截断Stringsuffixurl。substring(url。lastIndexOf(。)1);if(!suffix。equals(txt)!suffix。equals(doc)!suffix。equals(docx)!suffix。equals(xls)!suffix。equals(xlsx)!suffix。equals(ppt)!suffix。equals(pptx)!suffix。equals(sheet)!suffix。equals(pdf)){thrownewException(文件格式不支持预览);}我的文件是存在本地上的,该url是为了别的电脑能访问到,再传到这的时候就是解析本地文件了,所以找到我的本地文件路径根据具体情况来,否则会报错urlurl。replace(192。168。1。125:8765knowledge,G:creoknowledge);处理本地文件InputStreaminFileConvertUtil。convertLocaleFile(url,suffix);OutputStreamoutputStreamresponse。getOutputStream();创建存放文件内容的数组byte〔〕buffnewbyte〔1024〕;所读取的内容使用n来接收当没有读取完时,继续读取,循环while((nin。read(buff))!1){将字节数组的数据全部写入到输出流中outputStream。write(buff,0,n);}强制将缓存区的数据进行输出outputStream。flush();关流outputStream。close();in。close();}常见异常 java。lang。IllegalArgumentException:inputFormatisnullatcom。artofsolving。jodconverter。openoffice。converter。AbstractOpenOfficeDocumentConverter。ensureNotNull(AbstractOpenOfficeDocumentConverter。java:113) 这是因为转换07版本及高版本(。docx。xlsx。pptx)时,这三种格式不在所支持的文件格式中。 解决办法: 重写BasicDocumentFormatRegistry(一定得在com。artofsolving。jodconverter包下)packagecom。artofsolving。importjava。util。ArrayLimportjava。util。Iimportjava。util。LpublicclassBasicDocumentFormatRegistryimplementsDocumentFormatRegistry{privateListdocumentFormatsnewArrayList();publicBasicDocumentFormatRegistry(){}publicvoidaddDocumentFormat(DocumentFormatdocumentFormat){this。documentFormats。add(documentFormat);}protectedListgetDocumentFormats(){returnthis。documentF}publicDocumentFormatgetFormatByFileExtension(Stringextension){if(extensionnull){}else{if(extension。indexOf(doc)0){}if(extension。indexOf(ppt)0){}if(extension。indexOf(xls)0){}StringlowerExtensionextension。toLowerCase();Iteratoritthis。documentFormats。iterator();DocumentFdo{if(!it。hasNext()){}format(DocumentFormat)it。next();}while(!format。getFileExtension()。equals(lowerExtension));}}publicDocumentFormatgetFormatByMimeType(StringmimeType){Iteratoritthis。documentFormats。iterator();DocumentFdo{if(!it。hasNext()){}format(DocumentFormat)it。next();}while(!format。getMimeType()。equals(mimeType));}} 参考:解决jodconverter2。2。1版本不支持docx、xlsx、pptx转换成PDF格式异常 原文https:www。cnblogs。comjasmineep16254454。html