这些都是“文本字段”,一些信息和宏示例在 Andrew Pitonyak 的 OpenOffice Macros Explained 一书中(可从http://www.pitonyak.org/oo.php免费下载 pdf 文件)。wiki 页面也有一些很好的背景。
表单控件(来自工具栏“表单控件”)被命名,因此在使用宏时它们具有优势。但是,文本字段 - 您在文档中拥有的那种 - 没有命名,因此您必须循环浏览文档中的所有字段,或突出显示特定的文本运行并循环浏览突出显示区域内的字段以找到一个你在追求。Pitonyak 文档包含两种方法的示例。
假设文档只有一个输入字段,此 StarBasic 代码将打印其当前值:
Sub DisplayFields
Dim oEnum As Object
Dim oField As Object
oEnum = ThisComponent.getTextFields().createEnumeration()
Do While oEnum.hasMoreElements()
oField = oEnum.nextElement()
If oField.getPresentation(True) = "Input field" Then
Print "Input field contents: " & oField.getPresentation(False)
Exit Do
End If
Loop
End Sub
据我所知,没有 API 可以用指定的内容替换占位符。调度程序可能有一种方法 -调度命令列表诱人地包括“FieldDialog” - 但我找不到任何文档或示例。
我认为您要做的就是找到该字段,将光标放在那里,插入图像,然后删除占位符字段。更多 StarBasic 代码(再次假设文档中只有一个占位符字段):
Sub InsertImage
Dim oEnum As Object
Dim oField As Object
Dim oAnchor As Object
Dim oText As Object
Dim oCursor As Object
Dim FileName As String
Dim FileURL As String
Dim objTextGraphicObject As Object
oEnum = ThisComponent.getTextFields().createEnumeration()
Do While oEnum.hasMoreElements()
oField = oEnum.nextElement()
If oField.getPresentation(True) = "Placeholder" Then
oAnchor = oField.Anchor
oText = oAnchor.getText()
oCursor = oText.createTextCursorByRange(oAnchor.getEnd)
FileName = "C:\after zoo.JPG"
FileURL = convertToURL(FileName)
objTextGraphicObject = ThisComponent.createInstance("com.sun.star.text.TextGraphicObject")
REM Optional to set the size
' Dim objSize as New com.sun.star.awt.Size
' objSize.Width = 3530
' objSize.Height = 1550
' objTextGraphicObject.setSize(objSize)
objTextGraphicObject.GraphicURL = FileURL
oText.insertTextContent(oCursor.Start, objTextGraphicObject, false)
oField.dispose()
Exit Do
End If
Loop
End Sub