是否有OpenOffice's formula renderer的独立库?我正在寻找可以采用与OpenOffice相同的语法的纯文本(例如E = mc^2)并将其转换为png或pdf片段的东西。

(注意:我不需要WYSIWYG编辑器,只需要渲染器。基本上,我想在OpenOffice中工作以交互方式编辑我的公式,然后复制源文本以用于其他上下文,而无需OpenOffice渲染它们。 )

最佳答案

我正在使用unoconv将OpenOffice / LibreOffice文档转换为PDF。

但是,首先我必须使用公式创建一些输入文档。
不幸的是,不能仅使用公式编辑器来创建ODF文件,因为输出的PDF文件将包含奇怪的页眉和页脚。

因此,我创建了一个简单的文本文档(在Writer中),并将该公式嵌入为单个对象(对齐为字符)。我保存了ODT文件,将其解压缩(因为ODT只是一个ZIP文件)并编辑了内容。然后,我确定了可以删除哪些文件,并对其余文件进行了格式化,以得到一个最小的示例。

在我的示例中,公式本身位于Formula/content.xml中。以自动方式仅更改<annotation>...</annotation>标记内的代码应该很容易。

最后,我压缩了目录并生成了一个新的ODT文件。
然后,使用unoconvpdfcrop,我生成了一个不错的PDF公式。



# this trick prevents zip from creating an additional directory
cd formula.odt.unzipped
zip -r ../formula.odt .
cd ..

unoconv -f pdf formula.odt  # ODT to PDF
pdfcrop formula.pdf         # keep only the formula

# you can convert the PDF to bitmap as follows
convert -density 300x300 formula-crop.pdf formula.png


解压缩的ODT目录的内容:

这是ODT文件formula.odt的最少内容。

formula.odt.unzipped/Formula/content.xml
formula.odt.unzipped/META-INF/manifest.xml
formula.odt.unzipped/content.xml


文件formula.odt.unzipped/Formula/content.xml包含:

<?xml version="1.0" encoding="UTF-8"?>
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
  <semantics>
    <annotation encoding="StarMath 5.0">
        f ( x ) = sum from { { i = 0 } } to { infinity } { {f^{(i)}(0)} over {i!} x^i}
    </annotation>
  </semantics>
</math>


文件formula.odt.unzipped/content.xml包含:

<?xml version="1.0" encoding="UTF-8"?>
<office:document-content
    xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
    xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
    xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
    xmlns:xlink="http://www.w3.org/1999/xlink">

  <office:body>
    <office:text>
      <text:p>
        <draw:frame>
          <draw:object xlink:href="./Formula"/>
        </draw:frame>
      </text:p>
    </office:text>
  </office:body>

</office:document-content>


文件formula.odt.unzipped/META-INF/manifest.xml包含:

<?xml version="1.0" encoding="UTF-8"?>
<manifest:manifest xmlns:manifest="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0" manifest:version="1.2">
 <manifest:file-entry manifest:full-path="/" manifest:version="1.2" manifest:media-type="application/vnd.oasis.opendocument.text"/>
 <manifest:file-entry manifest:full-path="content.xml" manifest:media-type="text/xml"/>
 <manifest:file-entry manifest:full-path="Formula/content.xml" manifest:media-type="text/xml"/>
 <manifest:file-entry manifest:full-path="Formula/" manifest:version="1.2" manifest:media-type="application/vnd.oasis.opendocument.formula"/>
</manifest:manifest>

07-27 13:21