package cn.net.cobot.health.web.export.helper;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import org.apache.commons.lang3.StringUtils;
import org.apache.tika.io.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.aspose.words.Document;
import com.aspose.words.License;
import com.aspose.words.PdfSaveOptions;
import com.aspose.words.SaveFormat;
import cn.net.cobot.health.web.util.report.AsposeUtil;
public class AsposeHelper {
private static Logger logger = LoggerFactory.getLogger(AsposeHelper.class);
/**
* word转pdf
*
* @param wordPath word文件路径-含扩展名
* @param pdfPath 转换后pdf文件保存的路径-含扩展名
* @param includeBookmark 转换后的pdf文件中是否包含目录
* @return String<br>
* 为null,成功<br>
* 不是null,失败信息
*/
public static String convertWord2Pdf(String wordPath, String pdfPath, boolean includeBookmark) {
try {
getLicense();
} catch (Exception e) {
//if (logger.isErrorEnabled()) {
logger.error("aspose license无效", e);
//}
return "aspose license无效";
}
if (StringUtils.isBlank(wordPath) || StringUtils.isBlank(pdfPath)) {
String err = "参数无效:请指定word文件名或者pdf文件名";
//if (logger.isErrorEnabled()) {
logger.error(err);
//}
return err;
}
String ret = null;
long st = System.currentTimeMillis();
File pdfFile = new File(pdfPath);
Document asposeDoc = null;
FileOutputStream outputStream = null;
try {
outputStream = new FileOutputStream(pdfFile);
asposeDoc = new Document(wordPath);
PdfSaveOptions pdfSaveOptions = new PdfSaveOptions();
// 输出pdf格式文档
pdfSaveOptions.setSaveFormat(SaveFormat.PDF);
if (includeBookmark) {
// 设置3级doc书签需要保存到pdf的heading中
pdfSaveOptions.getOutlineOptions().setHeadingsOutlineLevels(4);
// 设置pdf中默认展开1级
pdfSaveOptions.getOutlineOptions().setExpandedOutlineLevels(1);
}
asposeDoc.save(outputStream, pdfSaveOptions);
long end = System.currentTimeMillis();
if (logger.isInfoEnabled()) {
logger.info("word转pdf[{}目录]:{},用时{}ms", (includeBookmark ? "含" : "不含"), wordPath, (end - st));
}
ret = null;
} catch (Exception e) {
//if (logger.isErrorEnabled()) {
logger.info("word转pdf异常[" + (includeBookmark ? "含" : "不含") + "目录]:" + wordPath, e);
//}
ret = "word转pdf异常";
} finally {
IOUtils.closeQuietly(outputStream);
}
return ret;
}
private static void getLicense() throws Exception {
try (InputStream is = AsposeUtil.class.getClassLoader()
.getResourceAsStream("Aspose.Total.Product.Family.lic")) {
License license = new License();
license.setLicense(is);
}
}
}