導航:首頁 > 文檔加密 > doc2pdf

doc2pdf

發布時間:2024-09-28 19:31:21

java代碼doc轉pdf提高效率的方法

使用了jacob.jar來調用activex控制項,本機需安裝WPS或pdfcreator
001 package experiments;
002
003 import com.jacob.activeX.ActiveXComponent;
004 import com.jacob.com.Dispatch;
005 import com.jacob.com.DispatchEvents;
006 import com.jacob.com.Variant;
007 import java.io.File;
008 import java.util.logging.Level;
009 import java.util.logging.Logger;
010
011 public class Doc2Pdf {
012
013 public static Converter newConverter(String name) {
014 if (name.equals("wps")) {
015 return new Wps();
016 } else if (name.equals("pdfcreator")) {
017 return new PdfCreator();
018 }
019 return null;
020 }
021
022 public synchronized static boolean convert(String word, String pdf) {
023 return newConverter("pdfcreator").convert(word, pdf);
024 }
025
026 public static interface Converter {
027
028 public boolean convert(String word, String pdf);
029 }
030
031 public static class Wps implements Converter {
032
033 public synchronized boolean convert(String word, String pdf) {
034 File pdfFile = new File(pdf);
035 File wordFile = new File(word);
036 ActiveXComponent wps = null;
037 try {
038 wps = new ActiveXComponent("wps.application");
039 ActiveXComponent doc = wps.invokeGetComponent("Documents").invokeGetComponent("Open", newVariant(wordFile.getAbsolutePath()));
040 doc.invoke("ExportPdf", new Variant(pdfFile.getAbsolutePath()));
041 doc.invoke("Close");
042 doc.safeRelease();
043 } catch (Exception ex) {
044 Logger.getLogger(Doc2Pdf.class.getName()).log(Level.SEVERE, null, ex);
045 return false;
046 } catch (Error ex) {
047 Logger.getLogger(Doc2Pdf.class.getName()).log(Level.SEVERE, null, ex);
048 return false;
049 } finally {
050 if (wps != null) {
051 wps.invoke("Terminate");
052 wps.safeRelease();
053 }
054 }
055 return true;
056 }
057 }
058
059 public static class PdfCreator implements Converter {
060
061 public static final int STATUS_IN_PROGRESS = 2;
062 public static final int STATUS_WITH_ERRORS = 1;
063 public static final int STATUS_READY = 0;
064 private ActiveXComponent pdfCreator;
065 private DispatchEvents dispatcher;
066 private volatile int status;
067 private Variant defaultPrinter;
068
069 private void init() {
070 pdfCreator = new ActiveXComponent("PDFCreator.clsPDFCreator");
071 dispatcher = new DispatchEvents(pdfCreator, this);
072 pdfCreator.setProperty("cVisible", new Variant(false));
073 pdfCreator.invoke("cStart", new Variant[]{newVariant("/NoProcessingAtStartup"), new Variant(true)});
074 setCOption("UseAutosave", 1);
075 setCOption("UseAutosaveDirectory", 1);
076 setCOption("AutosaveFormat", 0); // 0 = PDF
077 defaultPrinter = pdfCreator.getProperty("cDefaultPrinter");
078 status = STATUS_IN_PROGRESS;
079 pdfCreator.setProperty("cDefaultprinter", "PDFCreator");
080 pdfCreator.invoke("cClearCache");
081 pdfCreator.setProperty("cPrinterStop", false);
082 }
083
084 private void setCOption(String property, Object value) {
085 Dispatch.invoke(pdfCreator, "cOption", Dispatch.Put, new Object[]{property, value}, new int[2]);
086 }
087
088 private void close() {
089 if (pdfCreator != null) {
090 pdfCreator.setProperty("cDefaultprinter", defaultPrinter);
091 pdfCreator.invoke("cClearCache");
092 pdfCreator.setProperty("cPrinterStop", true);
093 pdfCreator.invoke("cClose");
094 pdfCreator.safeRelease();
095 pdfCreator = null;
096 }
097 if (dispatcher != null) {
098 dispatcher.safeRelease();
099 dispatcher = null;
100 }
101 }
102
103 public synchronized boolean convert(String word, String pdf) {
104 File pdfFile = new File(pdf);
105 File wordFile = new File(word);
106 try {
107 init();
108 setCOption("AutosaveDirectory", pdfFile.getParentFile().getAbsolutePath());
109 if (pdfFile.exists()) {
110 pdfFile.delete();
111 }
112 pdfCreator.invoke("cPrintfile", wordFile.getAbsolutePath());
113 int seconds = 0;
114 while (isInProcess()) {
115 seconds++;
116 if (seconds > 30) { // timeout
117 throw new Exception("convertion timeout!");
118 }
119 Thread.sleep(1000);
120 }
121 if (isWithErrors()) return false;
122 // 由於轉換前設置cOption的AutosaveFilename不能保證輸出的文件名與設置的相同(pdfcreator會加入/修改後綴名)
123 // 所以這里讓pdfcreator使用自動生成的文件名進行輸出,然後在保存後將其重命名為目標文件名
124 File outputFile = newFile(pdfCreator.getPropertyAsString("cOutputFilename"));
125 if (outputFile.exists()) {
126 outputFile.renameTo(pdfFile);
127 }
128 } catch (InterruptedException ex) {
129 Logger.getLogger(Doc2Pdf.class.getName()).log(Level.SEVERE, null, ex);
130 return false;
131 } catch (Exception ex) {
132 Logger.getLogger(Doc2Pdf.class.getName()).log(Level.SEVERE, null, ex);
133 return false;
134 } catch (Error ex) {
135 Logger.getLogger(Doc2Pdf.class.getName()).log(Level.SEVERE, null, ex);
136 return false;
137 } finally {
138 close();
139 }
140 return true;
141 }
142
143 private boolean isInProcess() {
144 return status == STATUS_IN_PROGRESS;
145 }
146
147 private boolean isWithErrors() {
148 return status == STATUS_WITH_ERRORS;
149 }
150
151 // eReady event
152 public void eReady(Variant[] args) {
153 status = STATUS_READY;
154 }
155
156 // eError event
157 public void eError(Variant[] args) {
158 status = STATUS_WITH_ERRORS;
159 }
160 }
161
162 public static void main(String[] args) {
163 convert("e:\\test.doc", "e:\\output.pdf");
164 }
165 }

② pdf和word的區別

1、概念不同:

PDF(Portable Document Format的簡稱,意為「可攜帶文檔格式」),是由Adobe Systems用於與應用程序、操作系統、硬體無關的方式進行文件交換所發展出的文件格式。

Microsoft Office Word是微軟公司的一個文字處理器應用程序。差旦它最初是由Richard Brodie為了運行DOS的IBM計算機而在1983年編寫的。

隨後的版本可運行於Apple Macintosh (1984年)、SCO UNIX和Microsoft Windows (1989年),並成為了Microsoft Office的一部分。

2、特點不同:

(1)PDF

文件格式與操作系統平台無關,也就是說,PDF文件不管是在Windows,Unix還是在蘋果公司的Mac OS操作系統中都是通用的。

這一特點使它成為在Internet上進行電子文檔發行和數字化信息傳播的理想文檔格式。越來越多的電子圖書、產品說明、公司文告、網路資料、電子郵件在開始使用PDF格式文件。

(2)Microsoft Office Word

Microsoft Word在當前使用中是佔有巨大優勢的文字處理器,這使得Word專用的檔案格式Word 文件(.doc)成為事實上最通用的標准。

作為 Office 套件的核心程序, Word 提供了許多易於使用的文檔創建工具,同時也提供了豐富的功能集供創建復雜的文檔使用。

哪怕只使用 Word 應用一點文本格式化操作或圖片處理,也可以使簡單的文檔變得比只使用純文本更具吸引力。

(2)doc2pdf擴展閱讀:

PDF主要由三項技術組成:

(1)衍生自PostScript,用以生成和輸出圖形;

(2)字型嵌入系統,可使字型隨文件一起傳輸寬橡;

(3)結構化的存儲系統,用以綁定這些元素和任何相關內容到單個文件,帶有適當的數據壓縮系統。

PDF文件使用了工業標準的壓縮虛巧擾演算法,通常比PostScript文件小,易於傳輸與儲存。它還是頁獨立的,一個PDF文件包含一個或多個「頁」,可以單獨處理各頁,特別適合多處理器系統的工作。

閱讀全文

與doc2pdf相關的資料

熱點內容
acr9000獨立式可編程運動控制器 瀏覽:762
java數據結構書籍 瀏覽:358
lol壓縮秀 瀏覽:528
編譯燒錄失敗 瀏覽:270
安卓如何讓充電快起來 瀏覽:16
手機qqdisk文件夾 瀏覽:935
文件夾怎麼放進U盤 瀏覽:293
手機系統編譯語言 瀏覽:422
華為手機nfc加密卡怎麼復制 瀏覽:19
androidjni開發流程 瀏覽:881
如何解除vivo應用加密鎖 瀏覽:732
菜單創建文件夾方法 瀏覽:376
o型密封圈壓縮率 瀏覽:452
lpilinux認證 瀏覽:205
編譯文法原理是什麼 瀏覽:16
python基礎教程源代碼 瀏覽:521
編程兩個圈是什麼 瀏覽:433
程序員掉頭發怎麼辦 瀏覽:317
csgo電腦命令 瀏覽:590
pop和smtp伺服器地址 瀏覽:524