java調用WPS或pdfcreator的com接口實現doc轉pdf
使用了jacob.jar來調用activex控件,本機需安裝WPS或pdfcreator。
package test;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 Doc2Pdf {
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(Doc2Pdf.class.getName()).log(Level.SEVERE, null, ex); return false; } catch (Error ex) { Logger.getLogger(Doc2Pdf.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(Doc2Pdf.class.getName()).log(Level.SEVERE, null, ex); return false; } catch (Exception ex) { Logger.getLogger(Doc2Pdf.class.getName()).log(Level.SEVERE, null, ex); return false; } catch (Error ex) { Logger.getLogger(Doc2Pdf.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:\\input.doc", "d:\\output.pdf"); }
}</pre>
本文由用戶 fmms 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!