java web 开发之 office(exceldoc等)文件转pdf

Posted zhufeiwu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java web 开发之 office(exceldoc等)文件转pdf相关的知识,希望对你有一定的参考价值。

一、开发工具: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 
View Code

 

以上是关于java web 开发之 office(exceldoc等)文件转pdf的主要内容,如果未能解决你的问题,请参考以下文章

Java解析OFFICE(word,excel,powerpoint)以及PDF的实现方案及开发中的点滴分享

PageOffice 使用Dome

PageOffice 使用Dome

java操作office和pdf文件java读取word,excel和pdf文档内容

office组件导出excel问题

163. Microsoft Office 之 开发Word 的故事(上)