我经常给报纸写文章,但由于公式并不经常出现,所以他们无法处理它们,所以我必须将它们以图像的形式提供。
我写了一篇文章,里面有大约 50 个带编号的公式,还有许多公式嵌入在正文中。我不可能把它们都截屏,那样太疯狂了。
有没有办法可以自动化以下过程(或至少是其部分):
- 从 OOo 文档中提取所有公式(我不需要编号,公式本身就足够了)
- 以指定的 DPI 或尺寸渲染它们?
最绝望的计划是手动解压 zip 文件并深入研究 XML,但我希望也不会发生这种情况。
答案1
Math 组件无法轻松导出图像。因此,请将其复制并粘贴到 LibreOffice Draw 中,然后从那里导出 PNG 文件。
以下是一些用于枚举数学公式对象的代码。
Sub ExportFormulasAsImages
oDoc = ThisComponent
oEmbed = oDoc.getEmbeddedObjects()
filenum = 0
For i = 0 To oEmbed.getCount() - 1
oObj = oEmbed.getByIndex(i)
If oObj.supportsService("com.sun.star.text.TextEmbeddedObject") Then
If oObj.CLSID = "078B7ABA-54FC-457F-8551-6147e776a997" Then
oFormulaDoc = oObj.getEmbeddedObject().Parent
oDrawPage = oFormulaDoc.DrawPage(0)
filenum = filenum + 1
sURL = "file:///path/formula" & Format(filenum, "00") & ".jpg"
End If
End If
Next
MsgBox "Exported " & filenum & " formulas as images."
End Sub
复制到 Draw 然后导出的示例代码位于https://ask.libreoffice.org/en/question/141898/macro-for-saving-sheet-as-single-image-in-calc/。
我把编写代码的具体方法留给了您,但是如果您遇到困难,请随时在 StackOverflow 或 ask.libreoffice.org 上发帖。发布您迄今为止尝试过的代码。
编辑:
开始学习 LibreOffice 宏的一个好地方是http://www.pitonyak.org/oo.php。
要发现对象可以做什么,可以使用自省工具,例如磁共振成像或者Xray工具。
至于 API 文档,编写宏时请忽略 SwX 前缀。这些文档与自省工具一起使用时很有用。单独来看,由于继承结构,它们很难阅读。
- https://www.openoffice.org/api/docs/common/ref/com/sun/star/text/TextEmbeddedObject.html
- https://api.libreoffice.org/docs/idl/ref/servicecom_1_1sun_1_1star_1_1text_1_1TextEmbeddedObject.html
录制并不是开始学习如何编写宏的好方法。但是,它对于某些调度程序操作(例如复制/粘贴)很有用。为此,启用实验性功能在工具 -> 选项 -> 高级. 在 LO 6 中有一个特定的复选框启用宏录制。 然后工具 -> 宏 -> 录制宏。
还有一件事要考虑:对于严肃的工作,Python UNO通常是编写宏的更好方法,例如,由于数据结构、正则表达式和文件处理。(C++ 是可行的,但对大多数宏来说不是那么好。Java 是一个可靠的选择,它紧密遵循 UNO API,但使一些事情变得比需要的更困难)。