后台实现word转pdf输出文件流
程序员文章站
2022-03-13 22:46:14
...
-
首先需要安装好LibreOffice,支持免费使用,安装包太大没法上传,可以去官网下载:https://zh-cn.libreoffice.org/download/download/ 根据系统选择需要安装的版本
- 废话不多说,贴上后端的java代码
word转pdf的代码:
public byte[] WordtoPDF(String pdfDirectory, String filename) throws IOException {
byte[] bytes = null;
long start = System.currentTimeMillis();
//目标word文件的路径(srcPath),生成pdf文件的路径(desPath )
String srcPath = pdfDirectory+File.separator+filename, desPath = pdfDirectory;
String command = "";
String osName = System.getProperty("os.name");
if (osName.contains("Windows")) {
//命令语句
command = "D:/LibreOffice/program/soffice --headless --convert-to pdf " + srcPath + " --outdir " + desPath;
try {
//执行命令
CmdUtil.exec(command);
String pdfname = filename.substring(0, filename.lastIndexOf("."));
File pdf = new File(pdfDirectory +File.separator+ pdfname + ".pdf");
// 检验是否已生成文件
int idx = 1;
while (idx < 100) {
idx = idx + 1;
Thread.sleep(100);
if (pdf.exists()) {
//logger.info("文件{}已转换完成,耗时={}毫秒", pdf.getName(), idx * 100);
break;
}
}
//获取生成的pdf的byte
bytes = FileUtils.readFileToByteArray(pdf);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
long end = System.currentTimeMillis();
logger.debug("用时:{} ms", end - start);
return bytes;
}
命令执行工具类
/**
* 命令行工具类
*/
public class CmdUtil {
private static final Logger logger = LoggerFactory.getLogger(CmdUtil.class);
/**
* 执行命令
* @param cmd 命令
* @return
* @throws IOException
* @throws InterruptedException
*/
public static boolean exec(String cmd) throws IOException, InterruptedException {
logger.info("执行命令 [{}]", cmd);
Runtime run = Runtime.getRuntime();//返回与当前 Java 应用程序相关的运行时对象
Process process = run.exec(cmd);// 启动另一个进程来执行命令
BufferedInputStream in = new BufferedInputStream(process.getInputStream());
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in));
//logger.info( IOUtils.toString(process.getInputStream()));// 打印输出信息
//String msg;
//while ((msg = bufferedReader.readLine()) != null) {
// //获得命令执行后在控制台的输出信息
// logger.info(msg);// 打印输出信息
//}
//检查命令是否执行失败。
new ProcessClearStream(process.getInputStream(), "INFO").start();
new ProcessClearStream(process.getErrorStream(), "ERROR").start();
int waitFor = process.waitFor();
int exitValue = process.exitValue();
logger.info("命令行处理结果:waitFor={}, exitValue={}", waitFor, exitValue);
if (waitFor != 0) {
//p.exitValue()==0表示正常结束,1:非正常结束
if (exitValue == 1) {
logger.error("命令执行失败!");
return false;
}
return false;
}
logger.error("命令执行成功!");
bufferedReader.close();
in.close();
return true;
}
}
推荐阅读
-
php用windows COM组件调用openoffice接口实现word转pdf文件时报错的解决办法
-
WPS文字2012一键输出PDF文件功能轻松将word一键转PDF
-
php可否实现服务器端txt文件转epub文件,word转epub文件,pdf转epub文件
-
php用windows COM组件调用openoffice接口实现word转pdf文件时报错的解决办法
-
php可否实现服务器端txt文件转epub文件,word转epub文件,pdf转epub文件
-
word转pdf 转swf 实现在线预览word文件功能
-
WPS文字2012一键输出PDF文件功能轻松将word一键转PDF
-
后台实现word转pdf输出文件流