openoffice命令行方式将word、excel、ppt转成pdf
上一篇记录了安装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相关推荐
- libreoffice命令行方式将word、excel、ppt转成pdf
项目需要,上传doc.excel.ppt等格式文件到服务器,用户可以在线阅读.经过讨论,决定在上传文件的同时,转换出一份pdf文件保存,用户阅读就只需要展示pdf文件即可,下载可以下载原文件.因为pd ...
- 用C#实现实时监测文件夹,把word/excel/ppt自动转为pdf
很久没更新了,前段时间在准备软考,最近也忙着单位新系统的开发.所以也就没更新了,等后面几个项目做好了,我在项目分享出来!! 由于新开发的信息系统,原来旧版的信息系统,在查看文件时,都需要下载到本地,然 ...
- java word excel ppt 图片转pdf
第一步将jar导入mvn库 下载地址 0积分 https://download.csdn.net/download/qq_35908944/18549670 mvn install:install-f ...
- Java通过openOffice实现word,excel,ppt转成pdf实现在线预览
Java通过openOffice实现word,excel,ppt转成pdf实现在线预览 一.OpenOffice 1.1 下载地址 1.2 JodConverter 1.3 新建实体类PDFDemo ...
- php word/excel/ppt 转pdf
转载至:https://blog.csdn.net/sangjinchao/article/details/78053545 把代码放到了github上,点击进入 前阶段有个项目用到了线上预览功能, ...
- vba 保存word里面的图片_笔记7 【office精华课】一套课程学会Word+Excel+PPT(一)【Word】(2020年第37周 周五)...
[office精华课] <一套课程学会Word+Excel+PPT> 课程目录:(总时长合计:28:56:25) =================================== [ ...
- Office 办公软件 word Excel PPT(3)
Office 办公软件 word Excel PPT(3) Excel 2007中有很多函数,其中函数SUM(区域)的功能是什么? ■使用Excel 2007复制数据,则( ) A.不能把-个区域的数 ...
- php如何将文档转成flas,PHP_PHP实现仿百度文库,豆丁在线文档效果(word,excel,ppt转flash),本文实例讲述了PHP实现仿百度 - phpStudy...
PHP实现仿百度文库,豆丁在线文档效果(word,excel,ppt转flash) 本文实例讲述了PHP实现仿百度文库,豆丁在线文档效果.分享给大家供大家参考,具体如下: 由于项目要实现类似百度文库的 ...
- Office 办公软件 word Excel PPT(2)
Office 办公软件 word Excel PPT(2) 今天分析一下Excle表格 Excel是Microsoft Office系列办公软件中的一个电子表格软件.它的主要功能有建立表格.填充数据. ...
最新文章
- PNAS顶刊文:情侣分手3个月前就有预兆!聊天记录还能反映分手后遗症
- 微信如何实施微服务?
- 网站的高性能架构--应用服务器优化
- iserdese2接口详解_Xilinx Notes.docx
- 【问链-Eos公开课】第二课 EOS环境搭建(Ubuntu系统下)
- .NET Core 使用RSA算法 加密/解密/签名/验证签名
- Java EE安全性API向前发展
- suse required-start: mysql_suse linux 安装MySql步骤
- 怎么把计算机的网络设置弄成家庭,如何设置家庭Wi-Fi网络
- MySQL学习第三弹——约束与多表查询详解
- 2021年新年元旦,新年开篇两首毛泽东诗词——沁园春:恰同学少年,风华正茂。书生意气,挥斥方遒……...
- android+字体+动画效果怎么做的,字体动画效果怎么做?原来这么简单!
- feign.codec.DecodeException: Error while extracting response for type报错记录
- Python v / s PHP:2019年选择哪种编程语言?
- qtabwidget设置表头_Qt GUI图形图像开发之QT表格控件QTableView,QTableWidget复杂表头(多行表头) 及冻结、固定特定的行的详细方法与实例...
- 0PP0升级android版本,oppo哪些手机可以升级安卓11 oppo手机升级安卓11方法
- GameObject.Find()能否查找隐藏属性的游戏对象?
- FPGA学习笔记(十二)IP核之FIFO的学习总结
- 基于matlab的神经网络设计,神经网络模型matlab例子
- 要想文章上Google搜索引擎首页,SEO 要做好下面7个点优化
热门文章
- mac os上配置CDH4.1.1版hbase并启用snappy
- 阿里人打车不给钱?内部自研神器“欢行”首次曝光
- 一站式地图服务平台“地图易”——平台架构解析
- Factorio Headless 服务器搭建教程
- python怎样画立体图-python绘制三维图
- 2017-2018-2 20179216 《网络攻防与实践》第六周总结
- ESP32-IDF开发实例-传感器模块编程-DS18B20数字温度传感器
- CI24R1低成本2.4G无线收发器芯片替代XN297精简版SI24R1
- 2020省赛填空 门牌制作 java
- 一些python的记录