`
guochunyang2004
  • 浏览: 80224 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

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");  
    }  
}  


分享到:
评论

相关推荐

    java+pdf转word+word转pdf 无水印 无页数限制

    - **PDFCreator**:虽然通常用在Windows环境下,但可以通过Java的JNI(Java Native Interface)接口调用,将Word文档打印为PDF。 3. **无水印**: - 转换工具必须具有不添加任何标识(如水印)的能力。这可能意味...

    C#的wps转PDF类

    有些第三方工具提供了命令行接口,可以在C#程序中通过调用这些工具实现转换。例如,PDFCreator是一个开源软件,可以通过创建虚拟打印机来生成PDF,虽然不是直接的转换,但也能达到目的。 在实际应用中,选择哪种...

    java语言实现Text格式转换成pdf文件

    本篇文章将探讨如何使用Java实现Text格式的文件转换为PDF。在实际应用中,这样的功能广泛应用于文档保存、打印预览或者在线阅读场景。 首先,我们需要一个可靠的库来处理这种转换。Apache PDFBox是一个开源的Java库...

    纯Java实现的WORD转PDF,免费

    本篇文章将深入探讨如何使用纯Java实现Word转PDF的免费解决方案。 首先,我们关注的是“纯Java实现”。这意味着所有的转换过程都在Java环境中进行,无需依赖外部的桌面应用程序或者特定的操作系统组件。这样的实现...

    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 ...

    PDFCREATOR

    PDFCreator是一款功能强大的PDF生成工具,它允许用户在Windows操作系统上轻松将各种文档格式转换为标准的PDF(Portable Document Format)文件。这款软件的核心优势在于其便捷性和兼容性,能够处理来自不同应用程序...

    飞腾PS转PDFCreator3.0(3108)

    飞腾PS转PDFCreator3.0(3108)是一款专为报刊排版行业设计的工具,旨在将飞腾软件生成的PostScript (PS) 文件转换为更通用且易于分发的PDF(Portable Document Format)文件。在当前数字化的趋势下,PDF文件格式因其...

    网页转PDF格式PDFCreator

    下面我们将深入探讨这款软件的工作原理、使用方法以及其在网页转PDF过程中的优势。 首先,PDFCreator的工作机制基于“虚拟打印机”的概念。当您选择打印一个文件或网页时,而不是选择物理打印机,您可以选择...

    word转pdf office文档转pdf

    这些控件通常提供API(应用程序接口),开发者可以通过编程调用来实现文件的转换。例如,Aspose、Spire.Doc、PDFCreator等都是知名的第三方控件,它们支持多种文件格式的转换,包括Word到PDF。 以Aspose为例,这是...

    pdf虚拟打印机,适用于doc转pdf

    在使用PDFCreator进行DOC到PDF转换时,用户可以自定义PDF的设置,例如设置密码保护、添加水印、调整页面大小和质量等。这些高级功能使得PDFCreator不仅是一个简单的转换工具,还具备了文档安全管理的特性。同时,...

    Excel格式转换PDF格式DEMO

    3. 调用API接口:在代码中,我们通常会使用Java或Python等编程语言,通过OpenOffice或LibreOffice的API来实现Excel到PDF的转换。这通常涉及到打开Excel文件,指定输出的PDF路径,然后触发转换操作。 4. 实现转换...

    itextpdf java 转pdf jar 包

    本文将深入探讨iTextPDF库在Java中的使用以及如何通过它来实现PDF的转换。 首先,我们来了解iTextPDF的基本概念。iTextPDF库由iText公司开发,其核心功能包括: 1. **创建PDF文档**:你可以从头开始创建PDF文档,...

    pdfcreator pdf 打印机

    PDFCreator是一款功能强大的虚拟PDF打印机,它允许用户将任何能够打印的文档转换为PDF格式。这个工具通过模拟一个打印机驱动程序来实现这一功能,当用户选择“打印”操作时,实际上是在创建一个PDF文件。以下是关于...

    pdfCreator sample

    要集成PDFCreator,开发者需要使用PDFCreator提供的DLL或ActiveX控件,通过调用相应的函数来实现PDF的生成。例如,可以使用`StartJob`、`AddPage`和`EndJob`等方法来控制PDF的创建过程。 3. **UNIGUI与PDFCreator的...

    最新doc合并转换.zip

    合并多个DOC或DOCX文件通常可以通过以下步骤实现: - 打开一个空白的Word文档。 - 使用“插入”菜单选择“对象”,然后在弹出窗口中选择“由文件创建”,浏览并添加需要合并的DOC或DOCX文件。 - 另一种方法是...

    PDFCreator PDF打印机

    PDFCreator是一款功能强大的虚拟PDF打印机,它允许用户将任何能够打印的文档转换成高质量的PDF格式。这款软件基于GPL授权,意味着它是免费且开源的,用户可以自由地使用、修改和分享。PDFCreator的核心功能包括: 1...

Global site tag (gtag.js) - Google Analytics