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

 

最近項目中碰到需求,須要將上傳的word文檔轉換爲pdf文件,雖說要實現這個可使用poi,openOffice,laberOffice,這些都能實現,可是都有一個共同的詬病就是轉出的文件都會失真,可是需求是不能失真,因此這個的話比較難實現,最後,通過反覆的查找,終於發現了jacob這個技術,能夠說,他實現的word轉pdf功能是可以不失真實現的,可是在使用的過程當中,因爲服務器和jdk等各類環境因素的緣故,碰到了不少問題,因而乎在這裏作一個筆記,也同時可以分享一下,但願對各位有幫助。java

 

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

 

下載好文件後,須要你部署系統的本地轉好word(wps也能夠,這個須要本身測試)。服務器

 

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

 

而後將jacob.jar包放入你的項目中便可,這樣的話,已經配置好了jacob環境。測試

 

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

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加水印的話我下次更新中會提到。spa

相關文章
相關標籤/搜索