一、开发工具:office 16、jacob-1.18-M2、jboss 1.6
二、开发配置:
1、解压缩
---》
2、配置jacob:
A C:\Windows\System32 jacob-1.18-M2-x64.dll
B C:\Program Files\Java\jdk1.6.0_43\jre\bin jacob-1.18-M2-x64.dll
C D:\jboss-6.0.0.Final\server\default\lib jacob.jar
三、编写代码:

1 package dh.hongyi.wed.asset;
2
3 import java.io.BufferedInputStream;
4 import java.io.File;
5
6
7
8
9
10 import java.io.FileInputStream;
11 import java.io.IOException;
12 import java.io.OutputStream;
13 import java.io.UnsupportedEncodingException;
14
15 import javax.servlet.http.HttpServletResponse;
16
17 import com.jacob.activeX.ActiveXComponent;
18 import com.jacob.com.ComFailException;
19 import com.jacob.com.ComThread;
20 import com.jacob.com.Dispatch;
21
22
23 public class ToPdf {
24 private static final int wdFormatPDF = 17;
25 private static final int xlTypePDF = 0;
26 private static final int ppSaveAsPDF = 32;
27 private static final int msoTrue = -1;
28 private static final int msofalse = 0;
29 public static void main(String[] args) {
30 // TODO Auto-generated method stub
31 //excelTohtml001();
32 //convert2PDF("F:/googledowload/1564733032856.xlsx","F:/googledowload/1564733032856.pdf");
33 //convert2PDF("http://testgq1.yuhong.com.cn/resource/accountStatement/20190802/1564733052458.xlsx","F:/googledowload/w.pdf");
34 // HttpServletResponse response = new HttpServletResponse();
35 // downloadFile();
36
37 }
38
39 //直接调用这个方法即可
40 public static boolean convert2PDF(String inputFile, String pdfFile) {
41 String suffix = getFileSufix(inputFile);
42 String suffixF = getFileSufixF(inputFile);
43 File file = new File(inputFile);
44 if(!file.exists()){
45 System.out.println("文件不存在!");
46 return false;
47 }
48 if(suffix.equals("pdf")){
49
50 return false;
51 }
52 if(suffix.equals("doc")||suffix.equals("docx")||suffix.equals("txt")){
53 return word2PDF(inputFile,pdfFile);
54 }else if(suffix.equals("ppt")||suffix.equals("pptx")){
55 return ppt2PDF(inputFile,pdfFile);
56 }else if(suffix.equals("xls")||suffix.equals("xlsx")||suffix.equals("XLSX")){
57 return excel2PDF(inputFile,pdfFile);
58 }else{
59
60 return false;
61 }
62 }
63 public static String getFileSufix(String fileName){
64 int splitIndex = fileName.lastIndexOf(".");
65 return fileName.substring(splitIndex + 1);
66 }
67 public static String getFileSufixF(String fileName){
68 int splitIndex = fileName.lastIndexOf("resource")+7;
69 int splitIndexF = fileName.lastIndexOf(".");
70 int splitIndexM = fileName.lastIndexOf("/");
71 System.out.println(fileName.substring(splitIndex + 1));
72 System.out.println(fileName.substring(splitIndex));
73 System.out.println(fileName.substring(splitIndexF));
74 System.out.println(fileName.substring(splitIndexM+1, splitIndexF));
75 return fileName.substring(splitIndex + 1);
76 }
77 public static boolean word2PDF(String inputFile,String pdfFile){
78 ActiveXComponent app = null;
79 Dispatch doc = null;
80 boolean result=true;
81 try{
82 //打开word应用程序
83 app = new ActiveXComponent("Word.Application");
84 //设置word不可见
85 app.setProperty("Visible", false);
86 //获得word中所有打开的文档,返回Documents对象
87 Dispatch docs = app.getProperty("Documents").toDispatch();
88 //调用Documents对象中Open方法打开文档,并返回打开的文档对象Document
89 doc = Dispatch.call(docs,
90 "Open",
91 inputFile,
92 false,
93 true
94 ).toDispatch();
95
96 Dispatch.call(doc,
97 "ExportAsFixedFormat",
98 pdfFile,
99 wdFormatPDF //word保存为pdf格式宏,值为17
100 );
101
102 result= true;
103 }catch(Exception e){
104 result= false;
105 }finally {
106 if (doc != null) {
107 Dispatch.call(doc, "Close");
108 }
109 if (app != null) {
110 app.invoke("Quit");
111 }
112 }
113 return result;
114 }
115
116 public static boolean excel2PDF(String inputFile,String pdfFile){
117 ActiveXComponent app = null;
118 Dispatch excel = null;
119 boolean result=true;
120 try{
121 app = new ActiveXComponent("Excel.Application");
122 app.setProperty("Visible", false);
123 Dispatch excels = app.getProperty("Workbooks").toDispatch();
124 excel = Dispatch.call(excels,
125 "Open",
126 inputFile,
127 false,
128 true
129 ).toDispatch();
130 Dispatch.call(excel,
131 "ExportAsFixedFormat",
132 xlTypePDF,
133 pdfFile
134 );
135 result= true;
136 }catch(Exception e){
137 result= false;
138 }finally {
139 if (excel != null) {
140 Dispatch.call(excel, "Close");
141 }
142 if (app != null) {
143 app.invoke("Quit");
144 }
145 }
146 System.out.println("excel转pdf结束");
147 return result;
148 }
149
150 public static boolean ppt2PDF(String srcFilePath, String pdfFilePath){
151 ActiveXComponent app = null;
152 Dispatch ppt = null;
153 boolean result=true;
154 try {
155 ComThread.InitSTA();
156 app = new ActiveXComponent("PowerPoint.Application");
157 Dispatch ppts = app.getProperty("Presentations").toDispatch();
158
159 // 因POWER.EXE的发布规则为同步,所以设置为同步发布
160 ppt = Dispatch.call(ppts, "Open", srcFilePath, true,// ReadOnly
161 true,// Untitled指定文件是否有标题
162 false// WithWindow指定文件是否可见
163 ).toDispatch();
164
165 Dispatch.call(ppt, "SaveAs", pdfFilePath, 32); //ppSaveAsPDF为特定值32
166
167 result=true; // set flag true;
168 } catch (ComFailException e) {
169 result=false;
170 } catch (Exception e) {
171 result=false;
172 } finally {
173 if (ppt != null) {
174 Dispatch.call(ppt, "Close");
175 }
176 if (app != null) {
177 app.invoke("Quit");
178 }
179 ComThread.Release();
180 }
181 return result;
182 }
183
184 /*文件下载*/
185 public static void downloadFile(HttpServletResponse response,String fileName,String path){
186 if (fileName != null) {
187 //设置文件路径
188 File file = new File(path);
189 if (file.exists()) {
190 response.setHeader("content-type", "application/octet-stream");
191 response.setContentType("application/octet-stream");
192 try {
193 response.setHeader("Content-Disposition", "attachment;filename="+new String(fileName.getBytes("utf-8"),"ISO-8859-1"));
194 } catch (UnsupportedEncodingException e) {
195 e.printStackTrace();
196 }
197 byte[] buffer = new byte[1024];
198 FileInputStream fis = null;
199 BufferedInputStream bis = null;
200 try {
201 fis = new FileInputStream(file);
202 bis = new BufferedInputStream(fis);
203 OutputStream os = response.getOutputStream();
204 int i = bis.read(buffer);
205 while (i != -1) {
206 os.write(buffer, 0, i);
207 i = bis.read(buffer);
208 }
209 } catch (Exception e) {
210 e.printStackTrace();
211 } finally {
212 if (bis != null) {
213 try {
214 bis.close();
215 } catch (IOException e) {
216 e.printStackTrace();
217 }
218 }
219 if (fis != null) {
220 try {
221 fis.close();
222 } catch (IOException e) {
223 e.printStackTrace();
224 }
225 }
226 }
227 }
228 }
229 }
230
231 }
来源:https://www.cnblogs.com/zhufeiwu/p/11359543.html
