首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > PowerDesigner >

java调用WPS或pdfcreator的com接话柄现doc转pdf

2012-09-08 
java调用WPS或pdfcreator的com接口实现doc转pdf使用了jacob.jar来调用activex控件,本机需安装WPS或pdfcrea

java调用WPS或pdfcreator的com接口实现doc转pdf
使用了jacob.jar来调用activex控件,本机需安装WPS或pdfcreator。
还需要jacob.jar以及jacob.dll 请看附件
jacob.dll 需要放置在系统system32下,如果系统是c盘:C://windows/system32/下面



import com.jacob.activeX.ActiveXComponent;import com.jacob.com.Dispatch;import com.jacob.com.DispatchEvents;import com.jacob.com.Variant;import java.io.File;import java.util.logging.Level;import java.util.logging.Logger;public class DocChangePdfForJco {    public static Converter newConverter(String name) {        if (name.equals("wps")) {            return new Wps();        } else if (name.equals("pdfcreator")) {            return new PdfCreator();        }        return null;    }    public synchronized static boolean convert(String word, String pdf) {        return newConverter("pdfcreator").convert(word, pdf);    }    public abstract static interface Converter {        public boolean convert(String word, String pdf);    }    public static class Wps implements Converter {        public synchronized boolean convert(String word, String pdf) {            File pdfFile = new File(pdf);            File wordFile = new File(word);            ActiveXComponent wps = null;            try {                wps = new ActiveXComponent("wps.application");                ActiveXComponent doc = wps.invokeGetComponent("Documents").invokeGetComponent("Open", new Variant(wordFile.getAbsolutePath()));                doc.invoke("ExportPdf", new Variant(pdfFile.getAbsolutePath()));                doc.invoke("Close");                doc.safeRelease();            } catch (Exception ex) {                Logger.getLogger(DocChangePdfForJco.class.getName()).log(Level.SEVERE, null, ex);                return false;            } catch (Error ex) {                Logger.getLogger(DocChangePdfForJco.class.getName()).log(Level.SEVERE, null, ex);                return false;            } finally {                if (wps != null) {                    wps.invoke("Terminate");                    wps.safeRelease();                }            }            return true;        }    }    public static class PdfCreator implements Converter {        public static final int STATUS_IN_PROGRESS = 2;        public static final int STATUS_WITH_ERRORS = 1;        public static final int STATUS_READY = 0;        private ActiveXComponent pdfCreator;        private DispatchEvents dispatcher;        private volatile int status;        private Variant defaultPrinter;        private void init() {            pdfCreator = new ActiveXComponent("PDFCreator.clsPDFCreator");            dispatcher = new DispatchEvents(pdfCreator, this);            pdfCreator.setProperty("cVisible", new Variant(false));            pdfCreator.invoke("cStart", new Variant[]{new Variant("/NoProcessingAtStartup"), new Variant(true)});            setCOption("UseAutosave", 1);            setCOption("UseAutosaveDirectory", 1);            setCOption("AutosaveFormat", 0);            defaultPrinter = pdfCreator.getProperty("cDefaultPrinter");            status = STATUS_IN_PROGRESS;            pdfCreator.setProperty("cDefaultprinter", "PDFCreator");            pdfCreator.invoke("cClearCache");            pdfCreator.setProperty("cPrinterStop", false);        }        private void setCOption(String property, Object value) {            Dispatch.invoke(pdfCreator, "cOption", Dispatch.Put, new Object[]{property, value}, new int[2]);        }        private void close() {            if (pdfCreator != null) {                pdfCreator.setProperty("cDefaultprinter", defaultPrinter);                pdfCreator.invoke("cClearCache");                pdfCreator.setProperty("cPrinterStop", true);                pdfCreator.invoke("cClose");                pdfCreator.safeRelease();                pdfCreator = null;            }            if (dispatcher != null) {                dispatcher.safeRelease();                dispatcher = null;            }        }        public synchronized boolean convert(String word, String pdf) {            File pdfFile = new File(pdf);            File wordFile = new File(word);            try {                init();                setCOption("AutosaveDirectory", pdfFile.getParentFile().getAbsolutePath());                setCOption("AutosaveFilename", pdfFile.getName());                pdfCreator.invoke("cPrintfile", wordFile.getAbsolutePath());                int seconds = 0;                while (isInProcess()) {                    Thread.sleep(1000);                    seconds++;                    if (seconds > 20) { // timeout                        break;                    }                }                if (seconds > 20 || isWithError()) return false;            } catch (InterruptedException ex) {                Logger.getLogger(DocChangePdfForJco.class.getName()).log(Level.SEVERE, null, ex);                return false;            } catch (Exception ex) {                Logger.getLogger(DocChangePdfForJco.class.getName()).log(Level.SEVERE, null, ex);                return false;            } catch (Error ex) {                Logger.getLogger(DocChangePdfForJco.class.getName()).log(Level.SEVERE, null, ex);                return false;            } finally {                close();            }            return true;        }        private boolean isInProcess() {            return status == STATUS_IN_PROGRESS;        }        private boolean isWithError() {            return status == STATUS_WITH_ERRORS;        }        // eReady event        public void eReady(Variant[] args) {            status = STATUS_READY;        }        // eError event        public void eError(Variant[] args) {            status = STATUS_WITH_ERRORS;        }    }    public static void main(String[] args) {        convert("d:\\Itext\\tt.xls","d:\\Itext\\xssss.pdf");    }}

热点排行