test.pptx (111.0 KB)
impress打开此pptx,表格中,最后一行不显示,鼠标点击后可显示。PowerPoint打开正常。
作为一个统一的答案,以后看到谁再用LO打开MSO的文件(特别是用命令行的),我就把这个答案转发给他
定义:
在验证中发现,Win LO中的默认字体 (Noto Sans SC) 和Linux LO中的依赖字体 (Noto Sans CJK SC) 不一致;而在 Linux 中安装了 Noto Sans SC 并采用该字体后,显示出的效果正常了 (和 Win LO 一致)。而且,由于这个稿件没有指定字体(体现在:用 MSO 开为等线,用 Win LO 开为 Noto Sans SC,用树莓派 LO 开,因为装过思源,就成 Source Han Sans CN,而用我的笔电上的 Ubuntu 开,就是 Noto Sans CJK SC。而上述选项只有 MSO 和 Win LO 排版无遮挡),因此字体会显著影响排版。
在此,我从Win11中拷贝了常用字体,放到个人网盘上给大家:Huang1111网盘。该网盘右上角弹出的均为广告,请小心翼翼×掉,然后下载按钮就会显现。
当然,也有其他网友的版本,比我的更全,比如Gitee上的 onlyoffice-chinese-fonts。
然而… LO的命令行又不能指定用什么字体当默认字体开,因此换字体这一招仅适用于个人用户。
详见:推广 LibreOffice 常见问题:文件的兼容性,推广 LibreOffice 常见问题:文件的兼容性(二)排版跑掉
从附件看,文章可能是台湾人写的。台湾省那边很早就在推广 ODF 文件格式,因此他们更知道转档的各种障碍。
考虑到大家可能不想注册中文论坛的账号,我就断章取义地搞点文字过来:
文档格式的兼容问题是所有推广 LibreOffice 一定会碰到的。要「破解」这个说法或现实,首先我们要来看看文档格式这件事。
「对微软 Office 文档格式的兼容问题。」这句话是完全以微软为中心的说法。但是各位知道吗?微软的每一个版本之间也有兼容性问题。
例如,使用 2013/2016 做的 docx 档,在 2007 是打不开的。使用 2007 做的 docx 档,在 2010/2013/2016 必须是在「兼容模式」下(我不清楚简体中文版是用什么名词)才能开得起来。而且一经储存,再回去 2007 又不能开了。
微软 Office 在 2003 以前预设格式为 doc/ppt/xls,那是封闭的专有格式,依照专利与授权条款是不得逆向工程(reverse engineering),换言之是不能「破解」的。
在 2007 以后预设格式改为 docx/pptx/xlsx 也就是称为 Office Open XML (OOXML)。它的格式是开放的,有拿到国际 ISO29500 标准。
照理说,如果格式开放,有国际标准,其他软件要支援、兼容这种格式应该要更容易才对。为什么实际情况不是这样?
原因在于:微软自己都没有依照这个格式在做。
虽然 OOXML 是一个标准,但是它在 2007/2010/2013/2016 对 OOXML 的实作都不一样。连自己的版本间都不能兼容了,更何况其他软件?
从文档格式角度来看,LibreOffice 还有其前身 OpenOffice 所产生的格式称为开放文档格式(Open Document Format, ODF),存成的档案为 odt/ods/odp/odf…
它是 Sun Microsystem 把 StarOffice 变成 OpenOffice.org 后,将其格式在 2001 年送去申请为国际标准,花了五年的时间通过成为 ISO26300 (ODF 1.1),后来在 2015 年更新一次 (ISO26300:2015)。
这个格式的其中一个最大的好处,就是稳定。稳定到什么程度?我使用 LibreOffice 5.x 版产生的 odt / odp 档,在 LibreOffice 3.5/4.0 开起来是没有问题的。我在很多场演讲中都有实际展示过。
至于微软的 Office 能不能兼容 ODF?理论上可以,读取 ODF 文档实际上也没有太多问题。问题在另存新档成 ODF 时,微软同样没有依照其规格在做。所以由微软 Office 另存成的 odt 档、ods 档、odp 档,在其他支持 ODF 格式的软件开起来一样是有问题的。这一点我在去年罗马的 ODF Plugfest 2017 有证明过,也有写出报告。
为什么有些 MSO 文档就可以正常打开呢?作者说:
过去我们在做文档时,其实并不是拿文档直接来传递的。而是把文档做好之后,透过印表机打印出来,用纸本来传递的。所以很多制作文档的习惯,都是从过去打字机时代,到后来的 pe2 等等累积起来的。
在那个时代的习惯有一个特色:我们只要「设法」把字放到该有的位置就好了。因为如此,所以我们会用空白键移到要打字的位置(打字机就是这种模式啊!)然后再开始加入文字。我们也会用 Enter 移到下一页再开始打字。因为最终是要打印成纸本的,所以怎么做都没差别。
问题在哪里呢?问题在「软件所看到的文档,跟我们用人眼所看到的文档,认知是完全不同的」。
好,我们回到重点来。在 Office (一样,不管是 MSO, OOo 或 LibO 甚至 Abiword 等)中,正确的标题做法是:把标题打上去之后,去找样式(Style,抱歉我不清楚简体中文版的翻译为何),里面找到题名(Title),把那一段文字设定成题名样式。如果题名样式的大小、字型等不符所需,那么就去调整样式设定(不是调整文字喔!),把它调整成你要的样子。
中文论坛有网友说:对 MSO 文档兼容性最好的,微软 MSO 排第一,金山 WPS 排第二。因此,大家非要追求格式全部在,那就去做 MSO 的开发。方法很简单:在 Win 主机上部署一个 MSO,选装 Word, PowerPoint, Excel(没图形界面的可以试一下 Office 部署工具,Office 无人值守安装,但我还没试过)。部署完以后就用调用 Office COM的方法,比如Python库 docx2pdf,pptxtopdf。
金山也可以有命令行呀。已经有人写了利用 WPS 转换的工具。至于 WPS for Linux,我只找到 CSDN 的文章,而且是收费文章,没看,仅放个链接吧。wps office 2019 for linux 通过命令行进行文档格式转换。这种文档,大概率 AI 水文,图个乐就好。
先上效果图,最好右键查看:
test-2.pdf (395.9 KB)
为什么推荐这个套件呢?是因为它能在 Linux 上正常打开题主的文件。虽然字体有点不一致,但显示是完整的。关键是大家都在想命令行的事情,而 OnlyOffice Docs 就是干这一行的。 同行 CODE,还有台湾的 OxOffice Online 虽然功能差不多,但都是基于 LibreOffice Online 开发的,实际上也不能做到像题主要求的这样完整的排版。
事实上,OnlyOffice自己打的广告都是开docx的。参见OnlyOffice 主页。
想必大家非用 LO 不可,鼓着不用 MSO,不是因为对LO的钟情:可能是系统非 Win,还可能是没有购买软件的预算。
如果从 OnlyOffice 的首页进去,可能会被高昂的授权费吓到:但事实上,那些都是商业版。社区版的链接似乎只能在搜索引擎上搜“onlyoffice community”找到。我已经找好了:下载 ONLYOFFICE 产品的社区版本 。
安装 OnlyOffice 可以用 Windows,这相对简单些;用 Linux 的话,得调数据库,这可能会和您的现有库冲突。如果追求一键安装,可以用 Snap,要慢一些。不过,有一个全平台兼容(手机除外,因为SELinux)的选项:Docker。可以注意到,OnlyOffice也为arm64做了适配。
OnlyOffice Docs是一个服务器端,本来是用于做在线文档编辑器的后端的,因此也是基于HTTP的。这里,我们采用它的一个Api:Conversion API (”转换 API“ 的开发文档,右上角可调中文),要做的工作就是从HTTP调用这个接口。呵,有点大才小用的意思。
各位不是要做在线文档转PDF的服务吗?来,OnlyOffice官方已经为大家写好了一份教程:使用 ONLYOFFICE 转换 API 构建在线文档转换器。只不过,这篇文章写的是网页端,用的是NodeJS。而各位的需求嘛,千差万别。
落地时需要注意的问题:
JWT_ENABLED=false
停用 JWT。但我没有开发经验,请大家自行考虑安全性。另外,把图中的两个命令贴给大家(为了能跑 curl,用了 Git Bash):
docker run -i -t -d -p 80:80 -e JWT_ENABLED=false onlyoffice/documentserver
curl --location --request POST 'http://localhost/converter' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{
"async": false,
"filetype": "pptx",
"key": "Khirz6zTPdfd7",
"outputtype": "pdf",
"title": "test.pptx",
"url": "http://192.185.254.132:8080/test.pptx"
}'
curl 这条命令里的每一个参数都是必须的。其中,key
不是密钥,而是自己拟的所传文档的“键”。其他的自己参阅上面提到的 API 文档。使用 curl 发请求不是我的原创。
凡非 MSO 的套件必然有兼容性问题,比如控件。请看下面文章的文件。
这文件就神了:做表格的选项,不是用 数据验证(LO称为数据有效性) 的方法做下拉框,而是用控件的方法做,然后一个个把控件拉到和单元格差不多的位置。。。
LO 倒是可以加载出控件,但是文字全部丢失,原因已经写在那个主题的回答里了。OnlyOffice加载时,控件会全部丢失,连个影子都没有。
那么什么东西能正常加载出控件呢?答案是:金山文档\WPS 云文档。要做 WPS 的工作的话,可以掉头去看广告前部分了。
还有,文档字体的问题,各种格式的问题……想用开源的方法处理闭源的东西,这些问题你就接受它吧。
总之,这些开源的方案,如LO,CODE,OxOffice,OnlyOffice,OpenOffice…最适合用它们的人不是商业伙伴,而是热爱 Linux 的人。 因为,Linux 用户最爱的就是折腾嘛,不爱折腾的 Linux 用户早晚要停止使用 Linux。
想要开源方案完全兼容 Office Open XML?呵,LO 的兼容性本来就是按照 ISO标准设计的。(参见论点2)而且,LO 就是 LO,LO 主打的就是 ODF。它不可能把开发主力放在对 MSO 格式的适应上。相反,连 LO 都会出些连 MSO 里都找不到的功能。比如中文论坛的一篇文章:请教有关移动平均趋势线的相关中文术语。
林肯 发表于 2021-7-5 21:59:19
震惊,是mso和wps没有的功能,这个可能需要统计学方面的人来帮忙才行了
鉴于不同平台上的 LO(本例),甚至不同版本的 LO 的情况都不同(案例:使用libreoffice7.6将docx转pdf,批注消失 ),因此大家在说“XXX不见了”时,一定要明确的在自己的主题中点出以下要点:
如果这篇文章对您有帮助,请点个赞,因为我正在冲刺“ 成员”用户组。
您好。您的问题在Ubuntu 25.04上可复现,在Windows 11上无法复现。软件采用Office19和LibreOffice 25.2。
如果您需要使用Impress编辑,只需调整一下第一行的行高即可。您也可以调整行距(1.5x → 1.15x),调整后的效果更美观些。
一般的,LibreOffice和MS Office均会在您编辑表格内文本时,自动调整行高。然而,在用LibreOffice打开MS Office文档时,软件不会在文件一打开时就调整好所有格式,因此出现排版错误很正常。
建议您始终使用专门的软件来编辑对应的文档。MS Office适于编辑doc(x)、xls(x)、ppt(x),而LibreOffice适于编辑odt、ods、odp。
同时,字体问题值得关注。即使在同一操作系统中打开您的文件,两软件的主要字体也不同:MS Office会选择等线字体,而LibreOffice会选择Noto Sans CJK SC,这也可能造成差异。
感谢,我需要java程序在命令行下,使用 soffice --headless --convert-to pdf 进行pdf转换,在此种pptx下,会导致转出的pdf显示不完整,请问有没有办法处理。
尝试libreoffice升到25.2,加参数:EmbedStandardFonts和SelectPdfVersion,没有作用。
(动图,2.5秒1帧,共4帧,可右键查看图像)
版本 | Windows 11 家庭中文版 |
---|---|
版本号 | 24H2 |
安装日期 | 2025/2/14 |
操作系统版本 | 26100.4652 |
序列号 | PF2FATTQ |
体验 | Windows 功能体验包 1000.26100.128.0 |
若您方便,请您提供一下您的系统信息和LibreOffice版本信息(在菜单栏的帮助->关于LibreOffice->版本信息),以及是否方便在系统上安装MS Office。
看来,问题的不是出在字体或Pdf版本,而是LibreOffice打开文件时,将表格的行高变得小于正常行高,导致文字被遮挡了。而且,MS Office, LibreOffice(win), LibreOffice(linux)产生的结果互不相同。
由于Python现存库都必须依赖于某一个办公套件才能运作,我的思路有:
(仅当完全不能利用图形化界面调整时)
我不是专业人员,也不熟悉Java中操作pptx的原生方法,甚至没有Java开发的经验,不了解最佳实践。依我看,Java里调用Jython已经是相当臃肿的事情了,所以上面的方法您可完全不听取。如要考虑编程细节,请您查阅相关文档,谢谢。
还有,我好好奇为什么中文贴里10个贴有9个是用LibreOffice硬开MS Office文件的,而且清一色的都是玩命令行((
因为很多情况下,是利用libreoffice的命令行转换功能,开发一套程序来做文档转换服务,提供给客户端使用。而用户很多情况下是上传的MS Office文件来转成pdf
因为是做一个文档转换的服务,用户上传的文件,里面的内容和格式无法控制,所以不可能通过编辑文档,修改它内容和格式的方式,进行导出。
请您提供一下您的系统信息和LibreOffice版本信息,以及是否方便在系统上安装MS Office。我始终不清楚您的情况,自然无法针对您设计。即使是服务器,也分Linux和Windows Server Core吧。
不然,要给您推荐湾湾的ODF转档工具了馁。