`

java调用WPS或pdfcreator的com接口实现doc转pdf

    博客分类:
  • java
阅读更多
使用了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");
    }
}


分享到:
评论

相关推荐

    纯Java实现的WORD转PDF,免费

    纯Java实现的WORD转PDF 免费使用,呵呵。。。

    Solid Converter PDF 5.0 pdf转doc doc转pdf 破解版 压缩包2

    若是要将WORD格式的DOC档转成PDF文件,市面上有不少软件如Open Office、pdf995、PDFCreator等都拥有这个功能;但若是反过来要将PDF文件转DOC檔呢?那就需要Solid Converter PDF这套软件来帮忙了! Solid Converter ...

    Solid Converter PDF 5.0 pdf转doc doc转pdf 破解版 压缩包1

    若是要将WORD格式的DOC档转成PDF文件,市面上有不少软件如Open Office、pdf995、PDFCreator等都拥有这个功能;但若是反过来要将PDF文件转DOC檔呢?那就需要Solid Converter PDF这套软件来帮忙了! Solid Converter ...

    Solid Converter PDF 5.0 pdf转doc doc转pdf 破解版 压缩包3

    若是要将WORD格式的DOC档转成PDF文件,市面上有不少软件如Open Office、pdf995、PDFCreator等都拥有这个功能;但若是反过来要将PDF文件转DOC檔呢?那就需要Solid Converter PDF这套软件来帮忙了! Solid Converter ...

    方正 PDFCreator3.0_3108

    方正飞腾PDF插件功能,转换飞腾、书版PS大样文件为PDF 方正文易方正文件转换功能全包括 可转换像素达2400点,完全可直接印刷

    PDFCREATOR

    用于转换PDF的软件,非常非常的好用! 对于外销人员来说非常好的。

    PDF 虚拟打印机 PDFCreator

    PDF 虚拟打印机 PDFCreator,能够将多个打印的 文件 合成为 一个 PDF文件

    用PDFCreator创建、编辑PDF电子文档

    PDFCreator,用PDFCreator创建、编辑PDF电子文档用PDFCreator创建、编辑PDF电子文档用PDFCreator创建、编辑PDF电子文档

    PDF打印机(pdfcreator)

    PDF打印机(pdfcreator)

    Solid Converter PDF v5.0.672 中文绿色版_PDF2DOC

    若是要将Word格式的DOC档转成PDF文件,市面上有不少软件像是Open Office、pdf995、PDFCreator等,都拥有将Word格式的DOC档转成PDF文件的功能。但若是反过来要将PDF文件转DOC文件的软件就不多见了;Solid Converter ...

    飞腾PS转PDFCreator3.0(3108)

    用于报刊排版行业飞腾PS转PDFCreator3.0(3108),飞腾软件确实该淘汰了

    网页转PDF格式PDFCreator

    好用的网页转PDF格式软件,一键转换.安装软件后即安装了虚拟打印机,可以把任何可打印的文件转为PDF,超好用。

    PDFCreator PDF打印机

    PDFCreator PDF打印机,测试通过,非常好用。

    PDFCreator-2_1_2-setup

    PDFCreator是一个在Microsoft Windows转换文件成PDF文件的软件。 一旦安装此软件后,它允许用户选择 PDFCreator 作为打印机, 允许大部分程序将文件打印成PDF。 PDF Creator是一个遵循GNU通用公共许可证和自由软件...

    PDFCreator v3.5.1.zip

    PDFCreator是一款专业的在Microsoft Windows环境下将文件转换成PDF文件的软件。软件允许用户选择 PDFCreator 作为打印机,也能生成PNG,BMP,JPEG,PCX,TIFF图形格式文件,并允许大部分程序将文件打印成PDF。软件...

    PDF生成器(PDFCreator-0_9_5)

    PDF生成器(PDFCreator-0_9_5)

    PDFCreator

    PDFCreator

    PDFCreator 0.9.6 虚拟打印机(免注册) 文件B

    PDFCreator是一个开源应用程序,支持windows打印功能的任何程序都可以使用它创建PDF文档。使用PDFCreator能够创建 PDF文档,Postscript文档,Encapsulated Postscript 文件;它也能生成PNG,BMP,JPEG,PCX,TIFF...

    PDFCreator3.0

    PDFCreator3.0正真的ps转pdf(1)

Global site tag (gtag.js) - Google Analytics