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 转换后将所有字母输出为正方形

使用命令行使用 Libre Office 将 xls 转换为 dbf

通过matlab为ubuntu启动libreoffice