java使用jacob完美不失真實現word轉pdf


 

最近項目中碰到需求,需要將上傳的word文檔轉換為pdf文件,雖然說要實現這個可以使用poi,openOffice,laberOffice,這些都能實現,但是都有一個共同的詬病就是轉出的文件都會失真,但是需求是不能失真,所以這個的話比較難實現,最后,經過反復的查找,終於發現了jacob這個技術,可以說,他實現的word轉pdf功能是能夠不失真實現的,但是在使用的過程中,由於服務器和jdk等各種環境因素的緣故,碰到了很多問題,於是乎在這里做一個筆記,也同時能夠分享一下,希望對各位有幫助。

 

首先是在官網下載對應版本的jacob包,注意,M*版本的最好是不要用,這個是各個版本的更新中間包,最好是現在不帶M*版本的文件。

 

下載好文件后,需要你部署系統的本地轉好word(wps也可以,這個需要自己測試)。

 

然后部署很簡單,不需要裝插件以及各種花式配置環境,只需要將jacob-1.18-x64.dll拷貝至jdk的bin目錄下(這個是64位系統的dll文件,其選擇依據是根據你部署系統的位數去確定的,當然有些把這個文件是放在jdk-》jre-》bin下,這個需要自己試,看你引用的是jdk還是jre),其實很多地方說要部署至這個部署那個,經過本人測試,只需要這一步即可,環境放多了容易出現奇奇怪怪的問題。

 

然后將jacob.jar包放入你的項目中即可,這樣的話,已經配置好了jacob環境。

 

編寫一個測試類word2Pdf.java,如下:

package com.advance.util;

import java.io.File;

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

public class Word2PdfUtil {
    static final int wdFormatPDF = 17;// word轉PDF 格式  
	public static void word2pdf(String source, String target) { 
		ComThread.InitSTA(); 
        ActiveXComponent app = null;  
        try {  
            app = new ActiveXComponent("Word.Application");  
            app.setProperty("Visible", false);  
            Dispatch docs = app.getProperty("Documents").toDispatch();  
            Dispatch doc = Dispatch.call(docs, "Open", source, false, true).toDispatch();  
            File tofile = new File(target);  
            if (tofile.exists()) {  
                tofile.delete();  
            }  
            Dispatch.call(doc, "SaveAs", target, wdFormatPDF);  
            Dispatch.call(doc, "Close", false);  
        } catch (Exception e) {  
            System.out.println(e.toString());  
        } finally {  
            if (app != null) {  
                app.invoke("Quit", 0);  
            }  
            ComThread.Release();
        }  
    }  
}

 這個是可以使用main方法測試的,是沒問題的,當然,在這個過程中會碰到很多問題,有時間我也會做一做筆記的。web測試轉pdf以及pdf加水印的話我下次更新中會提到。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM