JAVA 实现 Word转PDF

JAVA 实现 Word转PDF

  • 需要的包 SaveAsPDFandXPS + jacob
  • 代码
  • 另外一种方法效果可能不太好
    • 包链接

需要的包 SaveAsPDFandXPS + jacob

SaveAsPDFandXPS .
jacob.jar .

  1. 先安装SaveAsPDFandXPS
  2. 打开 jacob-1.19.zip
    把jacob.jar 放到项目下 , 然后 这里注意把两个后缀为dll的文件放到 jre目录bin的里面,必须放进去,不然会报错(java.lang.NoClassDefFoundError)。
    注意 jacob 不要有版本冲突。
    JAVA 实现 Word转PDF_第1张图片

代码

package utils.report;


import java.io.File;

import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;

public class WordToPdf {

	private static final int wdFormatPDF = 17;// PDF 格式

	public static void wordToPDF() {

		ActiveXComponent app = null;
		Dispatch doc = null;
		try {
			app = new ActiveXComponent( "Word.Application" );
			app.setProperty( "Visible", new Variant( false ) );
			Dispatch docs = app.getProperty( "Documents" ).toDispatch();
			// 转换前的文件路径
			String startFile = "C:/Users/Desktop/aaaab24.docx";
			// 转换后的文件路劲
			String overFile = "C:/Users/Desktop/我是结果3.pdf";
			doc = Dispatch.call( docs, "Open", startFile ).toDispatch();
			File tofile = new File( overFile );
			if( tofile.exists() ) {
				tofile.delete();
			}
			Dispatch.call( doc, "SaveAs", overFile, wdFormatPDF );
		} catch( Exception e ) {
			System.out.println( e.getMessage() );
		} finally {
			Dispatch.call( doc, "Close", false );
			if( app != null )
				app.invoke( "Quit", new Variant[] {} );
		}
		// 结束后关闭进程
		ComThread.Release();
	}

	public static void main( String[] args ) {
		wordToPDF();
	}
}

另外一种方法效果可能不太好

使用 aspose 相关包

包链接

SaveAsPDFandXPS
1:首先需要引入相关的jar
word转pdf需要引入 aspose-words-15.8.0-jdk16.jar
excel转pdf需要引入aspose-cells-8.5.2.jar
2:引入License.xml文件(备注:此License文件只能破解Word版本),将其放入src文件目录下

<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>

3.代码

package utils.report;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;

import com.aspose.cells.Workbook;
import com.aspose.words.Document;
import com.aspose.words.License;

/**
* Word或Excel 转Pdf 帮助类
* 备注:需要引入 aspose-words-15.8.0-jdk16.jar / aspose-cells-8.5.2.jar
*/
public class WordToPdf {

	private static boolean getLicense() {
		boolean result = false;
		try {
			InputStream is = WordToPdf3.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;
	}

	/**
	* @param wordPath 需要被转换的word全路径带文件名
	* @param pdfPath 转换之后pdf的全路径带文件名
	*/
	public static void doc2pdf( String wordPath, String pdfPath ) {
		if( !getLicense() ) { // 验证License 若不验证则转化出的pdf文档会有水印产生
			return;
		}
		try {
			long old = System.currentTimeMillis();
			File file = new File( pdfPath ); // 新建一个pdf文档
			FileOutputStream os = new FileOutputStream( file );
			Document doc = new Document( wordPath ); // Address是将要被转化的word文档
			doc.save( os, com.aspose.words.SaveFormat.PDF );// 全面支持DOC, DOCX, OOXML, RTF HTML, OpenDocument, PDF, EPUB, XPS, SWF 相互转换
			long now = System.currentTimeMillis();
			os.close();
			System.out.println( "共耗时:" + ( ( now - old ) / 1000.0 ) + "秒" ); // 转化用时
		} catch( Exception e ) {
			e.printStackTrace();
		}
	}

	/**
	* @param excelPath 需要被转换的excel全路径带文件名
	* @param pdfPath 转换之后pdf的全路径带文件名
	*/
	public static void excel2pdf( String excelPath, String pdfPath ) {
		if( !getLicense() ) { // 验证License 若不验证则转化出的pdf文档会有水印产生
			// return;
		}
		try {
			long old = System.currentTimeMillis();
			Workbook wb = new Workbook( excelPath );// 原始excel路径
			FileOutputStream fileOS = new FileOutputStream( new File( pdfPath ) );
			wb.save( fileOS, com.aspose.cells.SaveFormat.PDF );
			fileOS.close();
			long now = System.currentTimeMillis();
			System.out.println( "共耗时:" + ( ( now - old ) / 1000.0 ) + "秒" ); // 转化用时
		} catch( Exception e ) {
			e.printStackTrace();
		}
	}

	public static void main( String[] args ) {
		// word 和excel 转为pdf
		String filePaths = "D:/logs/Java.doc";
		String fileName = "123";
		String pdfPath = "D:/logs/" + fileName + ".pdf";
		doc2pdf( "C:/Users/Desktop/aaaab24.docx", "C:/Users/Desktop/2.pdf" );// filePaths需要转换的文件位置 pdfPath为存储位置
		String excel2pdf = "D:/logs/excel.xlsx";
		excel2pdf( excel2pdf, pdfPath );
	}

生成的pdf效果没第一种好

你可能感兴趣的:(WordToPdf)