Libreoffice在命令行将HTML转换为PDF会生成空白页面

6
当我使用一个包含以下内容的HTML文档('SimplePage.html')时:
<!DOCTYPE html> 
<html>
  <title>Page Title</title>
  <body>
    This is just a simple Hello World
  </body>
</html>

LibreOffice (在Windows 7上使用LibreOffice_5.1.2)生成的pdf文件第一页为空白,接着写入的不是完整的文本 - 而是只显示了"a simple Hello World"。

我正在使用以下命令行:

soffice.exe --headless --convert-to pdf SimplePage.html

当我不使用无头模式进行转换时(打开Libreoffice writer并使用“导出”),生成的PDF是正确的。因此,我认为这不是所使用HTML的问题。 有人知道这个问题的原因和解决方案吗?


文本在哪里显示?如果它从页面的左边缘开始,那么可能是句子的开头“超出页面”,即文本的起始坐标由于某种原因为负数(当我们将左边缘视为零坐标时)。此外,您可以查看PDF文件以查看文本是否实际存在(如果页面的内容流未经过滤,则更容易)。 - ain
是的,在第二页左上角显示了测试。看起来文本不在文件内,因为几个PDF阅读器都找不到任何字符串的部分。我还尝试通过Notepad++查看内部,但没有成功。奇怪的是,通过Libre Office的图形界面创建的PDF是正确的。 - Shannon
2个回答

9
你应该尝试写这个:
soffice.exe --headless --norestore --writer --convert-to pdf YOURFILE

对我来说起作用了,关键是要添加 --writer option


3
进一步说明,Open/LibreOffice默认使用writer_web_pdf_Export过滤器将HTML转换为PDF。使用--writer选项或*writer.exe二进制文件会将默认设置更改为writer_pdf_Export,对许多文档来说这种方式似乎效果更好。另一个选项是指定您希望使用的确切过滤器:--convert-to pdf:writer_pdf_Export,以及任何特定于过滤器的选项。 - Tobia

1
我最近遇到了这个问题,即使使用writer_pdf_Export,我发现添加Content-Security-Policy元标签似乎可以解决它。我使用了...
<meta http-equiv="Content-Security-Policy" content="sandbox">

这似乎也能解决上面的hello-world案例...
<!DOCTYPE html> 
<html>
  <head>
      <meta http-equiv="Content-Security-Policy" content="sandbox">
      <title>Page Title</title>
  </head>
  <body>
      This is just a simple Hello World
  </body>
</html>

(使用当前的LibreOffice 7.0.4.2进行检查)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接