因为公司前端需要在线查看word和PDF,后台上传需求将word等文件转换为PDF,原本使用的是liboffice进行转换,后来部署到服务器端之后,发现并不是很适合,由此找到com.aspose.words。直接贴代码,大部分代码复制百度。
public class WordToPdf {
private static final Logger logger = LoggerFactory.getLogger(WordToPdf.class);
/** * 获取license * * @return */
private static boolean getLicense() {
boolean result = false;
try {
// 凭证
String licenseStr =
"<License>\n"
+ " <Data>\n"
+ " <Products>\n"
+ " <Product>Aspose.Total for Java</Product>\n"
+ " <Product>Aspose.Words for Java</Product>\n"
+ " </Products>\n"
+ " <EditionType>Enterprise</EditionType>\n"
+ " <SubscriptionExpiry>20991231</SubscriptionExpiry>\n"
+ " <LicenseExpiry>20991231</LicenseExpiry>\n"
+ " <SerialNumber>8bfe198c-7f0c-4ef8-8ff0-acc3237bf0d7</SerialNumber>\n"
+ " </Data>\n"
+ " <Signature>sNLLKGMUdF0r8O1kKilWAGdgfs2BvJb/2Xp8p5iuDVfZXmhppo+d0Ran1P9TKdjV4ABwAgKXxJ3jcQTqE/2IRfqwnPf8itN8aFZlV3TJPYeD3yWE7IT55Gz6EijUpC7aKeoohTb4w2fpox58wWoF3SNp6sK6jDfiAUGEHYJ9pjU=</Signature>\n"
+ "</License>";
InputStream license = new ByteArrayInputStream(
licenseStr.getBytes("UTF-8"));
License asposeLic = new License();
asposeLic.setLicense(license);
result = true;
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* Word 转换 Pdf
* @param inPath
* @param outPath
*/
public static void doc2pdf(String inPath, String outPath) {
if (!getLicense()) { // 验证License 若不验证则转化出的pdf文档会有水印产生
logger.debug("doc2pdf,解析水印失败,请重试");
return;
}
try {
long old = System.currentTimeMillis();
File file = new File(outPath); // 新建一个pdf文档
FileOutputStream os = new FileOutputStream(file);
Document doc = new Document(inPath); // Address是将要被转化的word文档
logger.debug("开始解析word文档"+inPath);
doc.save(os, com.aspose.words.SaveFormat.PDF);// 全面支持DOC, DOCX,
// OOXML, RTF HTML,
// OpenDocument,
// PDF, EPUB, XPS,
// SWF 相互转换
long now = System.currentTimeMillis();
os.close();
logger.debug("转换成功,共耗时:"+((now - old) / 1000.0) + "秒");
} catch (Exception e) {
logger.debug("doc2pdf", new Object[] { "1082", "转换失败,请重试", MsgLevel.D });
e.printStackTrace();
}
}
}