如何将 ODT 文件转换为 PDF?

如何将 ODT 文件转换为 PDF?

有人知道如何将ODT文件(LibreOffice)转换为吗PDF

答案1

您还可以使用命令行libreoffice来实现您的目的。这为您提供了批量转换的优势。但单个文件也是可能的。此示例将当前目录中的所有 ODT 文件转换为 PDF:

libreoffice --convert-to pdf *.odt

在 LibreOffice 7.5.5.2 50(Build:2)、Ubuntu 23.04 上测试。

早期版本的 libreoffice 可能还需要--headless阻止 GUI 打开的选项:

libreoffice --headless --convert-to pdf *.odt

但 7.5.5.2--help规定这--convert-to意味着--headless

--convert-to OutputFileExtension[:OutputFilterName]

批量转换文件(隐含 --headless)。如果未指定 --outdir,则当前工作目录将用作 output_dir。

使用以下命令获取有关命令行选项的更多信息:

man libreoffice

答案2

只需使用 libre office 打开文档并选择导出为 PDF...

在此处输入图片描述

对于命令行解决方案反卷积从命令行转换文件:

unoconv -f pdf mydocument.odt

笔记:unoconv 依赖于 Libre Office。

答案3

以下是有关“非 GUI”方法的更多细节。

  1. 您可以使用此方法不仅将 ODT 文件转换为 PDF。它还适用于 MS Word DOCX 文件(只要 LibreOffice 能够处理特定的 ODT,它就可以很好地工作),并且一般来说,适用于 LibreOffice 可以打开的所有文件类型。

  2. 我不认为存在libreoffice像其他答案建议的那样命名的二进制文件。但是,存在soffice(.bin)可用于从命令行启动 LibreOffice 的二进制文件。它通常位于/usr/lib/libreoffice/program/;并且通常有一个符号链接/usr/bin/soffice指向该位置。

  3. 然后,在大多数情况下,参数--headless --convert-to pdf是不够的。需要:

    --headless --convert-to pdf:writer_pdf_Export
    

    请务必严格遵循此大写字母!

  4. 接下来,如果您的系统上已经启动并运行了 LibreOffice GUI 实例,则该命令将不起作用。这是由错误引起的#37531,自 2011 年起为人所知. 将此附加参数添加到您的命令中:

     "-env:UserInstallation=file:///tmp/LibreOffice_Conversion_${USER}"
    

    这将创建一个新的、独立的环境,可以由第二个无头 LO 实例使用,而不会干扰同一用户启动的可能正在运行的第一个 GUI LO 实例。

  5. 另外,请确保--outdir /pdf您指定的目录确实存在,并且您有写入权限。或者,使用不同的输出目录。即使只是第一次测试和调试:

    $ mkdir ${HOME}/lo_pdfs
    
  6. 因此:

    /path/to/soffice                                                     \
      --headless                                                         \
      "-env:UserInstallation=file:///tmp/LibreOffice_Conversion_${USER}" \
      --convert-to pdf:writer_pdf_Export                                 \
      --outdir ${HOME}/lo_pdfs                                           \
    /path/to/test.docx
    

    在我使用 LibreOffice v5.1.2.2 的 Mac OS X Yosemite 10.10.5 上,此方法有效(使用我指定的二进制文件路径,soffice但在 Ubuntu 上会有所不同...)。它也适用于 Debian Jessie 8.0(使用路径/usr/lib/libreoffice/program/soffice)。抱歉,目前无法在 Ubuntu 上测试它...

    如果所有这些都不起作用,当您尝试处理 DOCX 时:

  7. 您尝试使用该命令的特定 DOCX 文件可能存在问题...因此,请先创建一个非常简单的 DOCX 文档。使用 LibreOffice 本身即可完成此操作。在空白页面上写上“Hello World!”。将其保存为 DOCX。

  8. 再试一次。它能与简单的 DOCX 一起使用吗?

  9. 如果再次不起作用,请重复步骤 7,但这次保存为 ODT。

  10. 重复步骤 8,但这次一定要参考 ODT。

  11. 最后:使用sofficesoffice.bin和 的完整路径libreoffice并使用参数运行每个路径-h

    $ /path/to/libreoffice -h  # if that path exists, which I doubt!
    $ /path/to/soffice -h
    $ /path/to/soffice.bin -h
    
    • 你在这里得到输出了吗?
    • 对于这三个二进制文件/符号链接中的哪一个?
    • 记录输出。
    • 告诉我们您的输出!
       

    将它们与您使用的命令行进行比较:

    • 参数名称、大小写、使用的破折号数量等是否有变化?
       

    为了比较,我自己的(Mac OS X)输出在这里:

     $ /Applications/LibreOffice.app/Contents/MacOS/soffice -h 
    
     LibreOffice 5.1.2.2 d3bf12ecb743fc0d20e0be0c58ca359301eb705f
    
     Usage: soffice [options] [documents...]
    
     Options:
     --minimized    keep startup bitmap minimized.
     --invisible    no startup screen, no default document and no UI.
     --norestore    suppress restart/restore after fatal errors.
     --quickstart   starts the quickstart service
     --nologo       don't show startup screen.
     --nolockcheck  don't check for remote instances using the installation
     --nodefault    don't start with an empty document
     --headless     like invisible but no user interaction at all.
     --help/-h/-?   show this message and exit.
     --version      display the version information.
     --writer       create new text document.
     --calc         create new spreadsheet document.
     --draw         create new drawing.
     --impress      create new presentation.
     --base         create new database.
     --math         create new formula.
     --global       create new global document.
     --web          create new HTML document.
     -o             open documents regardless whether they are templates or not.
     -n             always open documents as new files (use as template).
    
     --display <display>
           Specify X-Display to use in Unix/X11 versions.
     -p <documents...>
           print the specified documents on the default printer.
     --pt <printer> <documents...>
           print the specified documents on the specified printer.
     --view <documents...>
           open the specified documents in viewer-(readonly-)mode.
     --show <presentation>
           open the specified presentation and start it immediately
     --accept=<accept-string>
           Specify an UNO connect-string to create an UNO acceptor through which
           other programs can connect to access the API
     --unaccept=<accept-string>
           Close an acceptor that was created with --accept=<accept-string>
           Use --unnaccept=all to close all open acceptors
     --infilter=<filter>[:filter_options]
           Force an input filter type if possible
           Eg. --infilter="Calc Office Open XML"
               --infilter="Text (encoded):UTF8,LF,,,"
     --convert-to output_file_extension[:output_filter_name[:output_filter_options]] [--outdir output_dir] files
           Batch convert files (implies --headless).
           If --outdir is not specified then current working dir is used as output_dir.
           Eg. --convert-to pdf *.doc
               --convert-to pdf:writer_pdf_Export --outdir /home/user *.doc
               --convert-to "html:XHTML Writer File:UTF8" *.doc
               --convert-to "txt:Text (encoded):UTF8" *.doc
     --print-to-file [-printer-name printer_name] [--outdir output_dir] files
           Batch print files to file.
           If --outdir is not specified then current working dir is used as output_dir.
           Eg. --print-to-file *.doc
               --print-to-file --printer-name nasty_lowres_printer --outdir /home/user *.doc
     --cat files
           Dump text content of the files to console
           Eg. --cat *.odt
     --pidfile=file
           Store soffice.bin pid to file.
     -env:<VAR>[=<VALUE>]
           Set a bootstrap variable.
           Eg. -env:UserInstallation=file:///tmp/test to set a non-default user profile path.
    
     Remaining arguments will be treated as filenames or URLs of documents to open.
    
  12. soffice在打开 DOCX 文件时,在命令行中添加一个参数以强制应用输入过滤器:

    --infilter="Microsoft Word 2007/2010/2013 XML"
    

    或者

    --infilter="Microsoft Word 2007/2010/2013 XML"
    --infilter="Microsoft Word 2007-2013 XML"
    --infilter="Microsoft Word 2007-2013 XML Template"
    --infilter="Microsoft Word 95 Template"
    --infilter="MS Word 95 Vorlage"
    --infilter="Microsoft Word 97/2000/XP Template"
    --infilter="MS Word 97 Vorlage"
    --infilter="Microsoft Word 2003 XML"
    --infilter="MS Word 2003 XML"
    --infilter="Microsoft Word 2007 XML Template"
    --infilter="MS Word 2007 XML Template"
    --infilter="Microsoft Word 6.0"
    --infilter="MS WinWord 6.0"
    --infilter="Microsoft Word 95"
    --infilter="MS Word 95"
    --infilter="Microsoft Word 97/2000/XP"
    --infilter="MS Word 97"
    --infilter="Microsoft Word 2007 XML"
    --infilter="MS Word 2007 XML"
    --infilter="Microsoft WinWord 5"
    --infilter="MS WinWord 5"
    

答案4

我正在添加一个新答案,因为最近一系列新的转换路径被打开了潘多克获得读取 ODT 文件的能力。

当 Pandoc 读取文件格式时,它会将其转换为内部格式“本机”(JSON 的一种形式)。

然后,它可以将文档从其原始格式导出为一系列其他格式。不仅是 PDF,还有 DocBook、HTML、EPUB、DOCX、ASCIIdoc、DokuWiki、MediaWiki 等等……

由于这里想要的输出格式是 PDF,我们还有另一种不同的路径选择,由 Pandoc 所称的pdf 引擎。以下是当前可用的 PDF 引擎列表(适用于 Pandoc v2.7.2 及更高版本 - 以前的版本可能仅支持较小的列表):

  • pdflatex:这需要乳胶除了 Pandoc 之外还需要安装。

  • xelatex:这需要西拉特克斯除了 Pandoc 之外还要安装(也可以作为一般TeX 发行版)。

  • 语境:这需要语境除了 Pandoc 之外还需要安装;ConTeXt 可作为大多数通用TeX 发行版)。

  • lualatex:这需要LuaTeX除了 Pandoc 之外还要安装(也可以作为一般TeX 发行版)。

  • pdfroff:这需要GNU罗夫除了 Pandoc 之外还需要安装。

  • wkhtml2pdf:这需要转PDF除了 Pandoc 之外还需要安装。

  • 王子:这需要PrinceXML除了 Pandoc 之外还需要安装。

  • weeasyprint:这需要韋斯印除了 Pandoc 之外还需要安装。

Pandoc 中现在集成了一些更新的 PDF 引擎,我自己还没有使用过,目前无法更详细地描述:构造latexmk

警告:不要指望原始文档的外观在所有 PDF 输出中都与 ODT 的打印预览或 PDF 导出完全相同!Pandoc 在转换时不保留布局,它保留了内容结构文档:段落仍然是段落,强调的单词仍然是强调的,标题仍然是标题等等。但整体外观可能会发生很大变化。

示例命令

pdflatex:

 pandoc -f odt -o mydoc.pdf mydoc.odt --pdf-engine=pdflatex

XeLaTeX:

 pandoc -f odt -o mydoc.pdf mydoc.odt --pdf-engine=xelatex

LuaLaTeX:

 pandoc -f odt -o mydoc.pdf mydoc.odt --pdf-engine=lualatex

语境:

 pandoc -f odt -o mydoc.pdf mydoc.odt --pdf-engine=context

GNU troff:

 pandoc -f odt -o mydoc.pdf mydoc.odt --pdf-engine=pdfroff

wkhtmltopdf:

 pandoc -f odt -o mydoc.pdf mydoc.odt --pdf-engine=wkhtml2pdf

PrinceXML:

 pandoc -f odt -o mydoc.pdf mydoc.odt --pdf-engine=prince

weeasyprint:

 pandoc -f odt -o mydoc.pdf mydoc.odt --pdf-engine=weasyprint

以上命令是转换的最基本命令。根据您选择的 PDF 引擎,可能还有许多其他选项可以控制输出 PDF 文件的外观。例如,可以将以下附加参数添加到所有通过 LaTeX 路由的路径中:

 -V geometry:"paperwidth=23.3cm, paperheight=1000pt, margin=11.2mm, top=2cm"

将使用自定义页面尺寸(比 DIN A4 稍大),顶部边缘的边距为 2 厘米,其他三个边缘的边距为 1.12 厘米)。

相关内容