Java将Excel文件、Word文件转为PDF

因为要做文件在线预览 . 网上找了方法是需要调用公网微软地址传入我的文件路径

<iframe src='https://view.officeapps.live.com/op/view.aspx?src=http://storage.xuetangx.com/public_assets/xuetangx/PDF/1.xls' width='100%' height='100%' frameborder='1'> </iframe>

但是, 我们项目是内网项目, 无法实现

PDF在页面预览已经实现 , 因此想着可否将Excel 与 Word文件首次预览的时候 , 转为PDF在页面显示 , 第二次预览直接调用就行

下面这个方法只支持Windows系统

首先需要在电脑安装 SaveAsPDFandXPS

需要下载 jacob-1.19  (jar包放入项目 , 两个dll文件放入你本地的jre下的bin目录)

下面是代码(亲测)

	private static final int wdFormatPDF = 17;// PDF 格式    
	
	/**
	 * 将word转为pdf
	 * @param wordPath
	 * @param pdfPath
	 */
	public String wordToPDF(String wordPath, String pdfPath){    
		ActiveXComponent app = null;  
		Dispatch doc = null;  
		try {      
			app = new ActiveXComponent("Word.Application");      
			app.setProperty("Visible", new Variant(false));  
			Dispatch docs = app.getProperty("Documents").toDispatch();    
			doc = Dispatch.call(docs,  "Open" , wordPath).toDispatch();  
			File tofile = new File(pdfPath);      
			if (tofile.exists()) {      
				tofile.delete();      
			}      
			Dispatch.call(doc,"SaveAs", pdfPath, wdFormatPDF); 
			if(app != null){
				app.invoke("Quit",new Variant[]{});
				app = null;
			}
			ComThread.Release();
			return "";
		} catch (Exception e) {      
			e.printStackTrace();
			return e.toString();   
		}
	}
	
	/**
	 * 将excel转为pdf
	 * @param wordPath
	 * @param pdfPath
	 */
	public String excelToPdf(String excelPath, String pdfPath){
		ComThread.InitSTA(true);
		ActiveXComponent ax=new ActiveXComponent("Excel.Application");
		try{
			ax.setProperty("Visible", new Variant(false));
			ax.setProperty("AutomationSecurity", new Variant(3)); //禁用宏
			Dispatch excels=ax.getProperty("Workbooks").toDispatch();
			// 读取Excel
			Dispatch excel=Dispatch.invoke(excels,"Open",Dispatch.Method,new Object[]{
				excelPath,
				new Variant(false),
				new Variant(false)
			},
			new int[9]).toDispatch();
			// 转换格式
			Dispatch.invoke(excel,"ExportAsFixedFormat",Dispatch.Method,new Object[]{
				new Variant(0),  // PDF 格式 = 0
				pdfPath,
				new Variant(0)   // 0 = 标准 (生成的PDF图片不会变模糊) 1 = 最小文件 (生成的PDF图片糊的一塌糊涂)
			},new int[1]);
			Dispatch.call(excel, "Close",new Variant(false));
			if(ax!=null){
				ax.invoke("Quit",new Variant[]{});
				ax=null;
			}
			ComThread.Release();
			return "";
		}catch(Exception es){
			es.printStackTrace();
			return es.toString();
		}
	}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值