首页 IT程序员内容详情

java将Word转换成PDF

2021-06-06 14717 编程艺术家

网上有很多将Word转换成PDF的方式,这里找了两种比较简单的工具:jacob和aspose。

1.jacob

使用Jacob需要一些环境的准备,首先需要Jacob的jar包:

然后还需要将jacob版本对应的ddl文件放到jdk或jre的bin目录里:

下面只需要使用写好的工具类就可以了:

public class Word2PdfJacobUtil {	/* 转PDF格式值 */	private static final int wdFormatPDF = 17;	/**	 * Word文档转换	 * 	 * @param inputFile	 * @param pdfFile	 */	public static boolean word2PDF(String inputFile, String pdfFile) {		ComThread.InitMTA(true);	long start = System.currentTimeMillis();	ActiveXComponent app = null;	Dispatch doc = null;	try {	app = new ActiveXComponent("Word.Application");// 创建一个word对象	app.setProperty("Visible", new Variant(false)); // 不可见打开word	app.setProperty("AutomationSecurity", new Variant(3)); // 禁用宏	Dispatch docs = app.getProperty("Documents").toDispatch();// 获取文挡属性	System.out.println("打开文档 >>> " + inputFile);	// Object[]第三个参数是表示“是否只读方式打开”	// 调用Documents对象中Open方法打开文档,并返回打开的文档对象Document	doc = Dispatch.call(docs, "Open", inputFile, false, true).toDispatch();	System.out.println("转换文档 [" + inputFile + "] >>> [" + pdfFile + "]");// 调用Document对象的SaveAs方法,将文档保存为pdf格式// word保存为pdf格式宏,值为17Dispatch.call(doc, "SaveAs", pdfFile, wdFormatPDF);// word保存为pdf格式宏,值为17	long end = System.currentTimeMillis();	System.out.println("用时:" + (end - start) + "ms.");	return true;	} catch (Exception e) {	e.printStackTrace();	System.out.println("========Error:文档转换失败:" + e.getMessage());	} finally {	Dispatch.call(doc, "Close", false);	System.out.println("关闭文档");	if (app != null)	app.invoke("Quit", new Variant[] {});// 如果没有这句话,winword.exe进程将不会关闭ComThread.Release();ComThread.quitMainSTA();}	return false;	}}

测试运行:

public static void main(String[] arg){		String docPath = "C:\\Users\\Administrator\\Desktop\\test.docx";		String pdfPath = "C:\\Users\\Administrator\\Desktop\\test.pdf";boolean res = Word2PdfJacobUtil.word2PDF(docPath, pdfPath);System.out.println(res);}

结果如下:


2.aspose

使用aspose不需要像jacob那样往jdk里加入ddl文件,但是需要在项目里加入一个license.xml,不然生成的pdf会有水印

license.xml如下:

<?xml version="1.0" encoding="UTF-8" ?> <License><Data><Products><Product>Aspose.Total for Java</Product><Product>Aspose.Words for Java</Product></Products><EditionType>Enterprise</EditionType><SubscriptionExpiry>20991231</SubscriptionExpiry><LicenseExpiry>20991231</LicenseExpiry><SerialNumber>8bfe198c-7f0c-4ef8-8ff0-acc3237bf0d7</SerialNumber></Data><Signature>sNLLKGMUdF0r8O1kKilWAGdgfs2BvJb/2Xp8p5iuDVfZXmhppo+d0Ran1P9TKdjV4ABwAgKXxJ3jcQTqE/2IRfqwnPf8itN8aFZlV3TJPYeD3yWE7IT55Gz6EijUpC7aKeoohTb4w2fpox58wWoF3SNp6sK6jDfiAUGEHYJ9pjU=</Signature></License>

引入jar包:

工具类:

public class Word2PdfAsposeUtil {		public static boolean getLicense() {boolean result = false;try {InputStream is = Test.class.getClassLoader().getResourceAsStream("\\license.xml"); // license.xml应放在..\WebRoot\WEB-INF\classes路径下License aposeLic = new License();aposeLic.setLicense(is);result = true;} catch (Exception e) {e.printStackTrace();}return result;}public static boolean doc2pdf(String inPath, String outPath) {if (!getLicense()) { // 验证License 若不验证则转化出的pdf文档会有水印产生  return false;}FileOutputStream os = null;try {long old = System.currentTimeMillis();File file = new File(outPath); // 新建一个空白pdf文档os = new FileOutputStream(file);Document doc = new Document(inPath); // Address是将要被转化的word文档  doc.save(os, SaveFormat.PDF);// 全面支持DOC, DOCX, OOXML, RTF HTML, OpenDocument, PDF,  // EPUB, XPS, SWF 相互转换  long now = System.currentTimeMillis();System.out.println("pdf转换成功,共耗时:" + ((now - old) / 1000.0) + "秒"); // 转化用时} catch (Exception e) {e.printStackTrace();return false;}finally {if (os != null) {try {os.flush();os.close();} catch (IOException e) {e.printStackTrace();}}}return true;}}

测试运行:

public static void main(String[] arg){String docPath = "C:\\Users\\Administrator\\Desktop\\test.docx";String pdfPath = "C:\\Users\\Administrator\\Desktop\\test.pdf";Word2PdfAsposeUtil.doc2pdf(docPath,pdfPath);}

结果:

转载于:https://blog.csdn.net/coolwindd/article/details/85233421

相关标签: # java

 暂无评论,快来抢沙发吧~

发布评论