Libreoffice .xls 到 .pdf 的转换在 Ubuntu 18.04 上将单页内容分成多页
Posted
技术标签:
【中文标题】Libreoffice .xls 到 .pdf 的转换在 Ubuntu 18.04 上将单页内容分成多页【英文标题】:Libreoffice .xls to .pdf conversion breaks single page content into multiple pages on Ubuntu 18.04 【发布时间】:2020-02-07 07:00:28 【问题描述】:我在通过下面提到的 libreoffice 命令行 将 .xls 转换为 .pdf 时遇到问题。
sudo /usr/bin/soffice --headless --nologo --nofirststartwizard --norestore --convert-to pdf:calc_pdf_Export --outdir '/home/user/Downloads/' '/home/user/Downloads/file.xlsx'
它已成功转换,但是它将 .xls 单个内容页面分解为 pdf 中的多个页面。我想通过页面缩放将 xls 单内容页面转换为 pdf 单页面。我们可以通过菜单Formatting -> Page ->Sheet ->Scale Scaling mode手动完成(可以参考https://***.com/a/19947539)。但我不希望用户在将 Xls 转换为 Pdf 的过程中受到干扰!
我浏览了很多文章,但没有找到我想要的通过命令行的正确解决方案。 命令行语法中是否有任何选项可以动态缩放它?
【问题讨论】:
【参考方案1】:我们可以通过在运行时和之后在特定的 XLSX 上应用宏来实现这一点,然后我们可以执行 PDF 转换命令。我为实现下面提到的此解决方案所遵循的步骤。
第 1 步:- 在服务器上存储宏。
在我的情况下,我存储在这里 (/opt/libreoffice/presets/basic/Standard/Module1.xba)。 Module1.xba 的内容是
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
-->
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="Module1" script:language="StarBasic">REM ***** BASIC *****
Sub FitToPage
Dim document As Object, pageStyles As Object
document = ThisComponent
pageStyles = document.StyleFamilies.getByName("PageStyles")
For i = 0 To document.Sheets.Count - 1
Dim sheet As Object, style As Object
sheet = document.Sheets(i)
style = pageStyles.getByName(sheet.PageStyle)
style.ScaleToPagesX = 1
Next
On Error Resume Next
document.storeSelf(Array())
document.close(true)
End Sub
Sub Main
End Sub
</script:module>
第 2 步:- 通过以下命令将上述宏应用于 xls 文件。
$cmd = 'export HOME=/var/www && /opt/libreoffice/program/soffice --headless --nologo --nofirststartwizard --norestore /home/usr/demo.xls macro:///Standard.Module1.FitToPage';
第 3 步:- 通过命令行应用宏后生成 Pdf。
$cmd = 'export HOME=/var/www && /opt/libreoffice/program/soffice --headless --nologo --nofirststartwizard --norestore --convert-to pdf:writer_web_pdf_Export --outdir /home/usr/ /home/usr/demo.xls';
注意:- 在这个实现中唯一的问题是电子表格文件不应该是只读的。
【讨论】:
当我在 step-2 执行时,会出现以下错误javaldx failed!
Warning: failed to read path from javaldx
。【参考方案2】:
添加到@ABHI 的答案,用户默认宏文件的正确路径是在
Linux:
~/.config/libreoffice/4/user/basic/Standard/Module1.xba
Windows:
%AppData%\LibreOffice\4\user\basic\Standard\Module1.xba
【讨论】:
以上是关于Libreoffice .xls 到 .pdf 的转换在 Ubuntu 18.04 上将单页内容分成多页的主要内容,如果未能解决你的问题,请参考以下文章
libreoffice --convert-to xls 改为写入 OpenDocument 格式
LibreOffice 停止工作,同时使用 C# 应用程序将 XLS 转换为 XHTML 文件
Ubuntu 14.x/LibreOffice 4.2 - 如何打印到 PS 文件(不是 PDF)
带有 LibreOffice 的 JodConverter 在 docx 到 pdf 转换后将所有字母输出为正方形