word、excel、图片转PDF文件

word、excel、图片转PDF文件

package test.pdf;

import java.io.File;
import java.io.FileOutputStream;
import java.util.Date;

import com.itextpdf.text.Document;
import com.itextpdf.text.Image;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.pdf.PdfWriter;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;

public class ToPDF {
	
	public static void main(String[] args) {
		String docPath = "D:\\test\01.doc";
		String docToPdfOutPath = "D:\\test\\02.pdf";
		convertDoc2Pdf(docPath,docToPdfOutPath);
		
		String imgPath = "D:\\test\03.jpg";
		String imgToPdfOutPath = "D:\\test\\04.pdf";
		convertImgToPdf(imgPath,imgToPdfOutPath);
		
		String excelPath = "D:\\test\05.xlsx";
		String excelToPdfOutPath = "D:\\test\\06.pdf";
		convertExcelToPdf(excelPath,excelToPdfOutPath);
	}
	
	public static void convertDoc2Pdf(String docPath,String pdfPath){
		
		ComThread.InitSTA();
		// 实例化 objWord
		ActiveXComponent objWord = new ActiveXComponent("Word.Application");

		// 将本地word对象赋到 wordObject上
		Dispatch wordObject = objWord.getObject();

		// 使 word 为"可见",主要是方便调试。正式应用时,把true改为false
		Dispatch.put(wordObject, "Visible", new Variant(true));

		// 获得Documents对象
		Dispatch documents = objWord.getProperty("Documents").toDispatch();

		// 调用 Open 打开 Document
		Dispatch document = Dispatch.call(documents, "Open", docPath).toDispatch();

		Dispatch.call(document, "ExportAsFixedFormat", pdfPath,	new Integer(17));
		
		Dispatch.call(document, "Close");
		Dispatch.call(wordObject, "quit");
		ComThread.Release();
	}
	
	public static void convertImgToPdf(String imgFilePath, String pdfFilePath) {
		File file = new File(imgFilePath);
		if (file.exists()) {
			Document document = new Document();
			FileOutputStream fos = null;
			try {
				fos = new FileOutputStream(pdfFilePath);
				PdfWriter.getInstance(document, fos);

				// 添加PDF文档的某些信息,比如作者,主题等等
//				document.addAuthor("arui");
//				document.addSubject("test pdf.");
				// 设置文档的大小
				document.setPageSize(PageSize.A4);
				// 打开文档
				document.open();
				// 写入一段文字
				// document.add(new Paragraph("JUST TEST ..."));
				// 读取一个图片
				Image image = Image.getInstance(imgFilePath);
				float imageHeight = image.getScaledHeight();
				float imageWidth = image.getScaledWidth();
				int i = 0;
				while (imageHeight > 500 || imageWidth > 500) {
					image.scalePercent(100 - i);
					i++;
					imageHeight = image.getScaledHeight();
					imageWidth = image.getScaledWidth();
				}

				image.setAlignment(Image.ALIGN_CENTER);
				// 设置图片的绝对位置
				// image.setAbsolutePosition(0, 0);
				// image.scaleAbsolute(500, 400);
				// 插入一个图片
				document.add(image);
			} catch (Exception ioe) {
			}
			document.close();
			try {
				fos.flush();
				fos.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
	
	public static void convertExcelToPdf(String inputFile, String pdfFile) {
		final int xlTypePDF = 0;
		ComThread.InitSTA(true);
		ActiveXComponent ax = new ActiveXComponent("Excel.Application");
		long date = new Date().getTime();
		ax.setProperty("Visible", new Variant(false));
		ax.setProperty("AutomationSecurity", new Variant(3)); // 禁用宏
		try {
			Dispatch excels = ax.getProperty("Workbooks").toDispatch();
			Dispatch excel = Dispatch.invoke(excels, "Open", Dispatch.Method, new Object[] { inputFile, new Variant(false), new Variant(false) },
					new int[9]).toDispatch();
			File tofile = new File(pdfFile);
			if (tofile.exists()) {
				tofile.delete();
			}
			// 转换格式
			Dispatch.invoke(excel, "ExportAsFixedFormat", Dispatch.Method, new Object[] {
					new Variant(0), // PDF格式=0
					pdfFile, new Variant(xlTypePDF), Variant.VT_MISSING, Variant.VT_MISSING, Variant.VT_MISSING, Variant.VT_MISSING,
					new Variant(false), Variant.VT_MISSING }, new int[1]);
 
			long date2 = new Date().getTime();
			int time = (int) ((date2 - date) / 1000);
			Dispatch.call(excel, "Close", new Variant(false));
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (ax != null) {
				ax.invoke("Quit", new Variant[] {});
				ax = null;
			}
			ComThread.Release();
		}
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值