上一篇记录了安装libreoffice的方式将office文档转换成pdf,接下来将使用openoffice实现同样的功能。

首先到openoffice官网下载最新的rpm压缩包:

https://www.openoffice.org/download/index.html

目前我下载最的的是:Apache_OpenOffice_4.1.3_Linux_x86-64_install-rpm_zh-CN.tar.gz

解压并进入到相关目录安装rpm包:

[root@instance-32spzihn src]# tar -zxvf Apache_OpenOffice_4.1.3_Linux_x86-64_install-rpm_zh-CN.tar.gz
[root@instance-32spzihn src]# cd zh-CN/RPMS
[root@instance-32spzihn RPMS]# yum install *.rpm
[root@instance-32spzihn RPMS]# cd /opt/openoffice4/program

安装完成并进入到对应的program目录之后,启动openoffice:

[root@instance-32spzihn program]# ./soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard &

发现报错:

[root@instance-32spzihn program]# javaldx: Could not find a Java Runtime Environment!

不过openoffice服务已经启动,由于只需要用到转换接口命令,不影响功能的情况下,我就不深究了。

接下来就需要一份python的脚本程序,因为转换需要通过py程序去调用api处理,将下面程序保存到topdf.py文件:

#
# PyODConverter (Python OpenDocument Converter) v1.1 - 2009-11-14
#
# This script converts a document from one office format to another by
# connecting to an OpenOffice.org instance via Python-UNO bridge.
#
# Copyright (C) 2008-2009 Mirko Nasato <mirko@artofsolving.com>
# Licensed under the GNU LGPL v2.1 - http://www.gnu.org/licenses/lgpl-2.1.html
# - or any later version.
#
DEFAULT_OPENOFFICE_PORT = 8100import uno
from os.path import abspath, isfile, splitext
from com.sun.star.beans import PropertyValue
from com.sun.star.task import ErrorCodeIOException
from com.sun.star.connection import NoConnectExceptionFAMILY_TEXT = "Text"
FAMILY_WEB = "Web"
FAMILY_SPREADSHEET = "Spreadsheet"
FAMILY_PRESENTATION = "Presentation"
FAMILY_DRAWING = "Drawing"#---------------------#
# Configuration Start #
#---------------------## see http://wiki.services.openoffice.org/wiki/Framework/Article/Filter# most formats are auto-detected; only those requiring options are defined here
IMPORT_FILTER_MAP = {"txt": {"FilterName": "Text (encoded)","FilterOptions": "utf8"},"csv": {"FilterName": "Text - txt - csv (StarCalc)","FilterOptions": "44,34,0"}
}EXPORT_FILTER_MAP = {"pdf": {FAMILY_TEXT: { "FilterName": "writer_pdf_Export" },FAMILY_WEB: { "FilterName": "writer_web_pdf_Export" },FAMILY_SPREADSHEET: { "FilterName": "calc_pdf_Export" },FAMILY_PRESENTATION: { "FilterName": "impress_pdf_Export" },FAMILY_DRAWING: { "FilterName": "draw_pdf_Export" }},"html": {FAMILY_TEXT: { "FilterName": "HTML (StarWriter)" },FAMILY_SPREADSHEET: { "FilterName": "HTML (StarCalc)" },FAMILY_PRESENTATION: { "FilterName": "impress_html_Export" }},"odt": {FAMILY_TEXT: { "FilterName": "writer8" },FAMILY_WEB: { "FilterName": "writerweb8_writer" }},"doc": {FAMILY_TEXT: { "FilterName": "MS Word 97" }},"rtf": {FAMILY_TEXT: { "FilterName": "Rich Text Format" }},"txt": {FAMILY_TEXT: {"FilterName": "Text","FilterOptions": "utf8"}},"ods": {FAMILY_SPREADSHEET: { "FilterName": "calc8" }},"xls": {FAMILY_SPREADSHEET: { "FilterName": "MS Excel 97" }},"csv": {FAMILY_SPREADSHEET: {"FilterName": "Text - txt - csv (StarCalc)","FilterOptions": "44,34,0"}},"odp": {FAMILY_PRESENTATION: { "FilterName": "impress8" }},"ppt": {FAMILY_PRESENTATION: { "FilterName": "MS PowerPoint 97" }},"swf": {FAMILY_DRAWING: { "FilterName": "draw_flash_Export" },FAMILY_PRESENTATION: { "FilterName": "impress_flash_Export" }}
}PAGE_STYLE_OVERRIDE_PROPERTIES = {FAMILY_SPREADSHEET: {#--- Scale options: uncomment 1 of the 3 ---# a) 'Reduce / enlarge printout': 'Scaling factor'"PageScale": 100,# b) 'Fit print range(s) to width / height': 'Width in pages' and 'Height in pages'#"ScaleToPagesX": 1, "ScaleToPagesY": 1000,# c) 'Fit print range(s) on number of pages': 'Fit print range(s) on number of pages'#"ScaleToPages": 1,"PrintGrid": False}
}#-------------------#
# Configuration End #
#-------------------#class DocumentConversionException(Exception):def __init__(self, message):self.message = messagedef __str__(self):return self.messageclass DocumentConverter:def __init__(self, port=DEFAULT_OPENOFFICE_PORT):localContext = uno.getComponentContext()resolver = localContext.ServiceManager.createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver", localContext)try:context = resolver.resolve("uno:socket,host=localhost,port=%s;urp;StarOffice.ComponentContext" % port)except NoConnectException:raise DocumentConversionException, "failed to connect to OpenOffice.org on port %s" % portself.desktop = context.ServiceManager.createInstanceWithContext("com.sun.star.frame.Desktop", context)def convert(self, inputFile, outputFile):inputUrl = self._toFileUrl(inputFile)outputUrl = self._toFileUrl(outputFile)loadProperties = { "Hidden": True }inputExt = self._getFileExt(inputFile)if IMPORT_FILTER_MAP.has_key(inputExt):loadProperties.update(IMPORT_FILTER_MAP[inputExt])document = self.desktop.loadComponentFromURL(inputUrl, "_blank", 0, self._toProperties(loadProperties))try:document.refresh()except AttributeError:passfamily = self._detectFamily(document)self._overridePageStyleProperties(document, family)outputExt = self._getFileExt(outputFile)storeProperties = self._getStoreProperties(document, outputExt)try:document.storeToURL(outputUrl, self._toProperties(storeProperties))finally:document.close(True)def _overridePageStyleProperties(self, document, family):if PAGE_STYLE_OVERRIDE_PROPERTIES.has_key(family):properties = PAGE_STYLE_OVERRIDE_PROPERTIES[family]pageStyles = document.getStyleFamilies().getByName('PageStyles')for styleName in pageStyles.getElementNames():pageStyle = pageStyles.getByName(styleName)for name, value in properties.items():pageStyle.setPropertyValue(name, value)def _getStoreProperties(self, document, outputExt):family = self._detectFamily(document)try:propertiesByFamily = EXPORT_FILTER_MAP[outputExt]except KeyError:raise DocumentConversionException, "unknown output format: '%s'" % outputExttry:return propertiesByFamily[family]except KeyError:raise DocumentConversionException, "unsupported conversion: from '%s' to '%s'" % (family, outputExt)def _detectFamily(self, document):if document.supportsService("com.sun.star.text.WebDocument"):return FAMILY_WEBif document.supportsService("com.sun.star.text.GenericTextDocument"):# must be TextDocument or GlobalDocumentreturn FAMILY_TEXTif document.supportsService("com.sun.star.sheet.SpreadsheetDocument"):return FAMILY_SPREADSHEETif document.supportsService("com.sun.star.presentation.PresentationDocument"):return FAMILY_PRESENTATIONif document.supportsService("com.sun.star.drawing.DrawingDocument"):return FAMILY_DRAWINGraise DocumentConversionException, "unknown document family: %s" % documentdef _getFileExt(self, path):ext = splitext(path)[1]if ext is not None:return ext[1:].lower()def _toFileUrl(self, path):return uno.systemPathToFileUrl(abspath(path))def _toProperties(self, dict):props = []for key in dict:prop = PropertyValue()prop.Name = keyprop.Value = dict[key]props.append(prop)return tuple(props)if __name__ == "__main__":from sys import argv, exitif len(argv) < 3:print "USAGE: python %s <input-file> <output-file>" % argv[0]exit(255)if not isfile(argv[1]):print "no such input file: %s" % argv[1]exit(1)try:converter = DocumentConverter()    converter.convert(argv[1], argv[2])except DocumentConversionException, exception:print "ERROR! " + str(exception)exit(1)except ErrorCodeIOException, exception:print "ERROR! ErrorCodeIOException %d" % exception.ErrCodeexit(1)

将文件保存到program目录下面,然后就可以执行转换命令了:

[root@instance-32spzihn program]# ./python topdf.py zzz.docx zzz_1.pdf

同样的命令也可以转换其它格式的文件,如:

[root@instance-32spzihn program]# ./python topdf.py zzz.docx zzz_1.html

相对来说,libreoffice实现起来要比openoffice要简单点,转换效果差不多,若转换中文文档乱码,请参数libreoffice的字体部分。

openoffice命令行方式将word、excel、ppt转成pdf相关推荐

  1. libreoffice命令行方式将word、excel、ppt转成pdf

    项目需要,上传doc.excel.ppt等格式文件到服务器,用户可以在线阅读.经过讨论,决定在上传文件的同时,转换出一份pdf文件保存,用户阅读就只需要展示pdf文件即可,下载可以下载原文件.因为pd ...

  2. 用C#实现实时监测文件夹,把word/excel/ppt自动转为pdf

    很久没更新了,前段时间在准备软考,最近也忙着单位新系统的开发.所以也就没更新了,等后面几个项目做好了,我在项目分享出来!! 由于新开发的信息系统,原来旧版的信息系统,在查看文件时,都需要下载到本地,然 ...

  3. java word excel ppt 图片转pdf

    第一步将jar导入mvn库 下载地址 0积分 https://download.csdn.net/download/qq_35908944/18549670 mvn install:install-f ...

  4. Java通过openOffice实现word,excel,ppt转成pdf实现在线预览

    Java通过openOffice实现word,excel,ppt转成pdf实现在线预览 一.OpenOffice 1.1 下载地址 1.2 JodConverter 1.3 新建实体类PDFDemo ...

  5. php word/excel/ppt 转pdf

    转载至:https://blog.csdn.net/sangjinchao/article/details/78053545 把代码放到了github上,点击进入 前阶段有个项目用到了线上预览功能, ...

  6. vba 保存word里面的图片_笔记7 【office精华课】一套课程学会Word+Excel+PPT(一)【Word】(2020年第37周 周五)...

    [office精华课] <一套课程学会Word+Excel+PPT> 课程目录:(总时长合计:28:56:25) =================================== [ ...

  7. Office 办公软件 word Excel PPT(3)

    Office 办公软件 word Excel PPT(3) Excel 2007中有很多函数,其中函数SUM(区域)的功能是什么? ■使用Excel 2007复制数据,则( ) A.不能把-个区域的数 ...

  8. php如何将文档转成flas,PHP_PHP实现仿百度文库,豆丁在线文档效果(word,excel,ppt转flash),本文实例讲述了PHP实现仿百度 - phpStudy...

    PHP实现仿百度文库,豆丁在线文档效果(word,excel,ppt转flash) 本文实例讲述了PHP实现仿百度文库,豆丁在线文档效果.分享给大家供大家参考,具体如下: 由于项目要实现类似百度文库的 ...

  9. Office 办公软件 word Excel PPT(2)

    Office 办公软件 word Excel PPT(2) 今天分析一下Excle表格 Excel是Microsoft Office系列办公软件中的一个电子表格软件.它的主要功能有建立表格.填充数据. ...

最新文章

  1. PNAS顶刊文:情侣分手3个月前就有预兆!聊天记录还能反映分手后遗症
  2. 微信如何实施微服务?
  3. 网站的高性能架构--应用服务器优化
  4. iserdese2接口详解_Xilinx Notes.docx
  5. 【问链-Eos公开课】第二课 EOS环境搭建(Ubuntu系统下)
  6. .NET Core 使用RSA算法 加密/解密/签名/验证签名
  7. Java EE安全性API向前发展
  8. suse required-start: mysql_suse linux 安装MySql步骤
  9. 怎么把计算机的网络设置弄成家庭,如何设置家庭Wi-Fi网络
  10. MySQL学习第三弹——约束与多表查询详解
  11. 2021年新年元旦,新年开篇两首毛泽东诗词——沁园春:恰同学少年,风华正茂。书生意气,挥斥方遒……...
  12. android+字体+动画效果怎么做的,字体动画效果怎么做?原来这么简单!
  13. feign.codec.DecodeException: Error while extracting response for type报错记录
  14. Python v / s PHP:2019年选择哪种编程语言?
  15. qtabwidget设置表头_Qt GUI图形图像开发之QT表格控件QTableView,QTableWidget复杂表头(多行表头) 及冻结、固定特定的行的详细方法与实例...
  16. 0PP0升级android版本,oppo哪些手机可以升级安卓11 oppo手机升级安卓11方法
  17. GameObject.Find()能否查找隐藏属性的游戏对象?
  18. FPGA学习笔记(十二)IP核之FIFO的学习总结
  19. 基于matlab的神经网络设计,神经网络模型matlab例子
  20. 要想文章上Google搜索引擎首页,SEO 要做好下面7个点优化

热门文章

  1. mac os上配置CDH4.1.1版hbase并启用snappy
  2. 阿里人打车不给钱?内部自研神器“欢行”首次曝光
  3. 一站式地图服务平台“地图易”——平台架构解析
  4. Factorio Headless 服务器搭建教程
  5. python怎样画立体图-python绘制三维图
  6. 2017-2018-2 20179216 《网络攻防与实践》第六周总结
  7. ESP32-IDF开发实例-传感器模块编程-DS18B20数字温度传感器
  8. CI24R1低成本2.4G无线收发器芯片替代XN297精简版SI24R1
  9. 2020省赛填空 门牌制作 java
  10. 一些python的记录