linuxjavapdf
『壹』 在linux環境下,java怎麼實現從word格式轉換為pdf格式
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
/**
* @author XuMing Li
*
* @version 1.00, 2007-4-9
*
*/
public class D2P {
private ActiveXComponent wordCom = null;
private Object wordDoc = null;
private final Variant False = new Variant(false);
private final Variant True = new Variant(true);
/**
* 打開word文檔
*
* @param filePath
* word文檔
* @return 返回word文檔對象
*/
public boolean openWord(String filePath) {
//建立ActiveX部件
wordCom = new ActiveXComponent( "Word.Application ");
try {
//返回wrdCom.Documents的Dispatch
Dispatch wrdDocs = wordCom.getProperty( "Documents ").toDispatch();
//調用wrdCom.Documents.Open方法打開指定的word文檔,返回wordDoc
wordDoc = Dispatch.invoke(wrdDocs, "Open ", Dispatch.Method,
new Object[] { filePath }, new int[1]).toDispatch();
return true;
} catch (Exception ex) {
ex.printStackTrace();
}
return false;
}
/**
* 關閉word文檔
*/
public void closeWord() {
//關閉word文件
wordCom.invoke( "Quit ", new Variant[] {});
}
/**
* * 將word文檔列印為PS文件後,使用Distiller將PS文件轉換為PDF文件 *
*
* @param sourceFilePath
* 源文件路徑 *
* @param destinPSFilePath
* 首先生成的PS文件路徑 *
* @param destinPDFFilePath
* 生成PDF文件路徑
*/
public void docToPDF(String sourceFilePath, String destinPSFilePath,
String destinPDFFilePath) {
if (!openWord(sourceFilePath)) {
closeWord();
return;
}
//建立Adobe Distiller的com對象
ActiveXComponent distiller = new ActiveXComponent(
"PDFDistiller.PDFDistiller.1 ");
try {
//設置當前使用的列印機,我的Adobe Distiller列印機名字為 "Adobe PDF "
wordCom.setProperty( "ActivePrinter ", new Variant( "Adobe PDF "));
//設置printout的參數,將word文檔列印為postscript文檔。目前只使用了前5個參數,如果要使用更多的話可以參考MSDN的office開發相關api
//是否在後台運行
Variant Background = False;
//是否追加列印
Variant Append = False;
//列印所有文檔
int wdPrintAllDocument = 0;
Variant Range = new Variant(wdPrintAllDocument);
//輸出的postscript文件的路徑
Variant OutputFileName = new Variant(destinPSFilePath);
Dispatch.callN((Dispatch) wordDoc, "PrintOut ", new Variant[] {
Background, Append, Range, OutputFileName });
System.out.println( "由word文檔列印為ps文檔成功! ");
//調用Distiller對象的FileToPDF方法所用的參數,詳細內容參考Distiller Api手冊
//作為輸入的ps文檔路徑
Variant inputPostScriptFilePath = new Variant(destinPSFilePath);
//作為輸出的pdf文檔的路徑
Variant outputPDFFilePath = new Variant(destinPDFFilePath);
//定義FileToPDF方法要使用adobe pdf設置文件的路徑,在這里沒有賦值表示並不使用pdf配置文件
Variant PDFOption = new Variant( " ");
//調用FileToPDF方法將ps文檔轉換為pdf文檔
Dispatch.callN(distiller, "FileToPDF ", new Variant[] {
inputPostScriptFilePath, outputPDFFilePath, PDFOption });
System.out.println( "由ps文檔轉換為pdf文檔成功! ");
} catch (Exception ex) {
ex.printStackTrace();
} finally {
closeWord();
}
}
public static void main(String[] argv) {
D2P d2p = new D2P();
// d2p.openWord( "c:/12.doc ");
// d2p.callWordMacro( "c:/12.docc ", "MyWordMacro ",
// new String[] { "這是調用word宏的測試程序 " });
d2p.docToPDF( "d:/12.doc ", "c:/1p.ps ", "c:/1p.pdf ");
}
}
『貳』 wps支持linux下java文檔轉換成pdf嗎
你好,是支持的,WPS2019版本有正式的linux版本,將word轉成pdf的功能,永久免費,穩定不亂
1、打開所需轉換的文檔
『叄』 如何在linux下 使用java代碼正確獲取夏令時的時間
一:環境搭建
OpenOffice 下載地址http://www.openoffice.org/JodConverter
下載地址http://sourceforge.net/projects/jodconverter/files/JODConverter/
解壓後將目錄下的所有jar包放在工程的lib下面或者採用引用的方式調用這些jar包。
下載後安裝,我安裝的路徑為D:/openOffice/install/
二:啟動服務
可以通過cmd調用服務, " cd D:/openOffice/install/program"
執行
soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard
查看是否安裝成功,查看埠對應的pid
netstat -ano|findstr 8100
查看pid對應的服務程序名
tasklist|findstr pid值
也可以把這一步省略,放到java程序中調用服務,因為啟動服務佔用內存比較大,在java中可以在使用
的時候調用,然後馬上銷毀。
三:程序代碼
1:將word轉換為pdf方法
1 // 將word格式的文件轉換為pdf格式
2 public void Word2Pdf(String srcPath, String desPath) throws IOException {
3 // 源文件目錄
4 File inputFile = new File(srcPath);
5 if (!inputFile.exists()) {
6 System.out.println("源文件不存在!");
7 return;
8 }
9 // 輸出文件目錄
10 File outputFile = new File(desPath);
11 if (!outputFile.getParentFile().exists()) {
12 outputFile.getParentFile().exists();
13 }
14 // 調用openoffice服務線程
15 String command = "D:/openOffice/install/program/soffice.exe -headless -accept=\"socket,host=127.0.0.1,port=8100;urp;\"";
16 Process p = Runtime.getRuntime().exec(command);
17
18 // 連接openoffice服務
19 OpenOfficeConnection connection = new SocketOpenOfficeConnection(
20 "127.0.0.1", 8100);
21 connection.connect();
22
23 // 轉換word到pdf
24 DocumentConverter converter = new OpenOfficeDocumentConverter(
25 connection);
26 converter.convert(inputFile, outputFile);
27
28 // 關閉連接
29 connection.disconnect();
30
31 // 關閉進程
32 p.destroy();
33 System.out.println("轉換完成!");
34 }
2:調用方法
1 @Test
2 public void testWord2Pdf() throws IOException {
3 String srcPath = "E:/test.docx";
4 String desPath = "E:/test.pdf";
5 Word2Pdf(srcPath, desPath);
6 }
以上代碼經過驗證,可以正常運行。
四:遇到問題
錯誤信息:
java.net.ConnectException: connection failed: socket,host=10.101.50.71,port=8100,tcpNoDelay=1: java.net.ConnectException: Connection refused: connect
at com.artofsolving.jodconverter.openoffice.connection.AbstractOpenOfficeConnection.connect(AbstractOpenOfficeConnection.java:79)
原因以及解決方法:第一次調用,soffice需要注冊,所以到soffice.exe的安裝路徑下雙擊soffice.exe,注冊即可。