Libreoffice php使用命令行office轉pdf,pdf轉圖片


我用的方法

word pdf
使⽤的是 libreoffice 開源office 系統。
使⽤命令是 soffice -h
僅僅使⽤了⼀個⽅法:
--convert-to output_file_extension[:output_filter_name] [-outdir ouput_dir]
files
Batch convert files.
If -outdir is not specified then current working dir is used as output_dir.
Eg. -convert-to pdf *.doc
-convert-to pdf:writer_pdf_Export -outdir /home/user *.doc
11 使⽤java jod
libreoffice 第三⽅office⼯具
安裝命令
yum install libreoffice-headless
libreoffice-writer
啟動命令
libreoffice5.4 --headless --accept="socket,host=127.0.0.1,port=8100;urp;" --
nofirststartwizard &
javabridge
java -jar /opt/java/webapps/JavaBridge/WEB-INF/lib/JavaBridge.jar
SERVLET_LOCALb8080
查看tomcat的⽅法
tail -f /opt/java/logs/localhost.2017-09-01.log
tail -f /opt/java/logs/catalina.log
java/opt/java/
程序在 /opt/java/webapps/ 下, enrollCertDemo 天威CA jodconverter為轉換
word to pdf ⼯具
/root/ghostscript-9.21-linux-x86_64/ pdf轉圖⽚⼯具

 

參考1

我用的centos系統版本,是6.5版本64位

1、配置centos的yum源之前我的阿里雲服務器的centos,好像因為沒有配置yum源而使用系統自帶的,通過yum install libreoffice沒找到Libreoffice安裝包(當然,這可能是我系統版本的問題,具體就不得而知了,因為后來搞不定又繼續更換了其他版本的centos)。
yum源配置,因為我使用的是阿里雲服務器,所以我使用阿里雲的yum源。
配置方法:http://mirrors.aliyun.com/help/centos

2、安裝Libreoffice

  1. yum install libreoffice
復制代碼

然后我使用soffice命令轉化doc測試文檔

  1. soffice --headless --invisible --convert-to pdf doctest.docx
復制代碼


然后出現報錯了:

  1. /usr/lib64/libreoffice/program/soffice.bin X11 error: Can't open display: 
  2.    Set DISPLAY environment variable, use -display option
  3.    or check permissions of your X-Server
  4.    (See "man X" resp. "man xhost" for details)
  5. [root@iZ2zec51rnaynn5uqhupucZ ~]# man x
  6. Cannot open the message catalog "man" for locale "zh_CN.UTF-8"
  7. (NLSPATH="/usr/share/locale/%l/LC_MESSAGES/%N")
  8. No manual entry for x
復制代碼

后來在這里找到了解決辦法:http://superuser.com/questions/6 ... r-cant-open-display
我執行下面這個命令,然后解決了上面的那個報錯問題:

  1. yum install libreoffice-headless
復制代碼

然后我再通過soffice命令將doc測試文檔轉成pdf,終於順利轉化成功!

然而又出現問題了。。。

轉化后的pdf文件,我看到了一個一個密密麻麻的小方框。。亂碼!

然后我通過“locale -a”查看了下,是不是系統不支持中文的問題。然后發現系統是支持中文的。

  1. ....
復制代碼



那么問題就可能是出現在libreoffice上,然后通過搜索引擎找到了解決辦法:http://www.linuxidc.com/Linux/2012-12/77017.htm

  1. yum -y install  libreoffice-langpack-zh-Han*
復制代碼

centos上運行上面的命令之后,給libreoffice安裝了中文的語言支持,然后順利地把doc測試文檔無亂碼地轉成了pdf文件。

其實我已經不想說為了解決Libreoffice將office文檔轉pdf的問題已經讓我折騰了三天了。。。Ubuntu和centos系統來回地更換安裝測試。不過,還是終於把問題解決了。

剩下的,pdf.js實現文檔在線瀏覽,請看這個帖子:
http://www.hc-cms.com/forum.php?mod=viewthread&tid=14

 

 

 

 

 

 

 參考2

http://blog.csdn.net/ljihe/article/details/77250206

項目需要,上傳doc、excel、ppt等格式文件到服務器,用戶可以在線閱讀。經過討論,決定在上傳文件的同時,轉換出一份pdf文件保存,用戶閱讀就只需要展示pdf文件即可,下載可以下載原文件。因為pdf文件需要在web頁面上展示還是比較方便的,直接使用html的embed標簽就能實現,也可以使用一些pdf.js的插件實現:

 

[html]  view plain  copy
 
  1. <!DOCTYPE HTML>  
  2. <html>  
  3. <body>  
  4. <embed src="zpdf.pdf" width="100%" height="600">  
  5. </body>  
  6. </html>  


首先我們需要將doc等格式的文檔轉換成pdf,網上搜索一翻,實現方式也就那幾種,最主流的就是通過openoffice.org或者libreoffice兩種方式實現,其實libreoffice也是從openoffice.org分離出來的,功能上面應該相差不大。對於要實現格式轉換,兩種庫都可以。

 

我這里直接使用libreoffice的方式。

首先安裝libreoffice,我的服務器是centos,直接使用:

 

[plain]  view plain  copy
 
  1. [root@instance-32spzihn /]# yum install libreoffice  

 

提示是否是要安裝,執行y就可以了。

一般情況下用yum安裝的包都不會是最新版本的,想要安裝最新版本,只能夠自己下載最新的回來,手動編譯安裝:

libreoffice官網:http://zh-cn.libreoffice.org/

目前最新版本:LibreOffice_5.4.0_Linux_x86-64_rpm.tar.gz

 

[plain]  view plain  copy
 
  1. [root@instance-32spzihn src]# tar -zxvf LibreOffice_5.4.0_Linux_x86-64_rpm.tar.gz  
  2. [root@instance-32spzihn src]# cd LibreOffice_5.4.0.3_Linux_x86-64_rpm/RPMS  
  3. [root@instance-32spzihn RPMS]# yum install *.rpm  

 

 

安裝完成后執行:

 

[plain]  view plain  copy
 
  1. [root@instance-32spzihn /]# /usr/bin/libreoffice  --invisible --convert-to pdf  zzz.docx  

 

如果是自行編譯需要帶版本號:

 

[plain]  view plain  copy
 
  1. [root@instance-32spzihn /]# /usr/bin/libreoffice5.4  --invisible --convert-to pdf  zzz.docx  

具體情況可以先用 find / -name 'libreoffice*' 查找出相關的執行程序再處理。

 

 

竟然報錯:

 

[plain]  view plain  copy
 
  1. [root@instance-32spzihn /]# /usr/bin/libreoffice  --invisible --convert-to pdf  zzz.docx  
  2. /usr/lib64/libreoffice/program/soffice.bin X11 error: Can't open display:   
  3.    Set DISPLAY environment variable, use -display option  
  4.    or check permissions of your X-Server  
  5.    (See "man X" resp. "man xhost" for details)  


此時只需要安裝另外一個庫即可解決:

 

 

[plain]  view plain  copy
 
  1. [root@instance-32spzihn /]# yum install libreoffice-headless  


再執行轉換命令,轉換成功。

 

sz zzz.pdf,下載pdf回到本地打開發現中文亂碼,這是因為缺少中文字體支付所致,所以先把 c:\Windows\Fonts文件夾復制一份到其它盤,然后打包成Fonts.zip,通過rz Fonts.zip 將壓縮包傳到服務器上面。

 

[plain]  view plain  copy
 
  1. [root@instance-32spzihn /]# cd /usr/share/fonts  
  2. [root@instance-32spzihn fonts]# rz  
  3. [root@instance-32spzihn fonts]# unzip Fonts.zip  
  4. [root@instance-32spzihn fonts]# mv Fonts win  
  5. [root@instance-32spzihn fonts]# cd win  
  6. [root@instance-32spzihn win]# chmod  -Rf 755 *  
  7. [root@instance-32spzihn win]# mkfontscale  
  8. [root@instance-32spzihn win]# mkfontdir  
  9. [root@instance-32spzihn win]# fc-cache –fv  

 

若沒有生效可以試下重啟服務器,再重新執行轉換命令就可以了。

 

完成對文件轉換后,那接下來就要將此功能加入項目開發上面,當前需要加入到一個php項目:

 

[php]  view plain  copy
 
  1. $retval = 1;  
  2. // exec() might be disabled  
  3. $cmd = '/usr/bin/libreoffice  --invisible --convert-to pdf  zzz.docx';  
  4. if (function_exists('exec')){  
  5.     @exec($cmd, $output, $retval);  
  6. }  
  7. // Did it work?  
  8. if ($retval > 0){  
  9.     exit('process_failed');  
  10. }  


具體實現邏輯可以根據自己實際需求做更改,原理就是程序內執行shell命令處理。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM