如何使用 Delphi 在 OpenOffice 文档中插入图像
How to insert image in OpenOffice Document using Delphi
我正在使用可接受的解决方案中提到的方法
How to Search and Replace in odt Open Office document?
使用 Delphi
搜索和替换 odt 文档中的文本
现在我的要求是用图片替换文字。
例如,我的 odt 文件的标签为 "SHOW_CHART=ID",我将从数据库中检索给定 ID 的图表作为图像文件,然后将其替换为 "SHOW_CHART=ID"。
所以我的问题是如何将文件中的图像插入到 ODT 文档中。
我发现另一个 link 问同样的问题但使用 java。
How to insert an image in to an openoffice writer document with java?
但我不知道 java.
以下代码改编自 Andrew Pitonyak's Macro Document 的清单 5.24。
ServiceManager := CreateOleObject('com.sun.star.ServiceManager');
Desktop := ServiceManager.createInstance('com.sun.star.frame.Desktop');
NoParams := VarArrayCreate([0, -1], varVariant);
Document := Desktop.loadComponentFromURL('private:factory/swriter', '_blank', 0, NoParams);
Txt := Document.getText;
TextCursor := Txt.createTextCursor;
{TextCursor.setString('Hello, World!');}
Graphic := Document.createInstance('com.sun.star.text.GraphicObject');
Graphic.GraphicURL := 'file:///C:/path/to/my_image.jpg';
Graphic.AnchorType := 1; {com.sun.star.text.TextContentAnchorType.AS_CHARACTER;}
Graphic.Width := 6000;
Graphic.Height := 8000;
Txt.insertTextContent(TextCursor, Graphic, False);
有关将 OpenOffice 与 Pascal 结合使用的更多信息,请访问 https://www.freepascal.org/~michael/articles/openoffice1/openoffice.pdf。
编辑:
此代码以插入SHOW_CHART=123
和SHOW_CHART=456
为例。然后它找到这些字符串并用相应的图像替换它们。
Txt.insertString(TextCursor, 'SHOW_CHART=123' + #10, False);
Txt.insertString(TextCursor, 'SHOW_CHART=456' + #10, False);
SearchDescriptor := Document.createSearchDescriptor;
SearchDescriptor.setSearchString('SHOW_CHART=[0-9]+');
SearchDescriptor.SearchRegularExpression := True;
Found := Document.findFirst(SearchDescriptor);
While Not (VarIsNull(Found) or VarIsEmpty(Found) or VarIsType(Found,varUnknown)) do
begin
IdNumber := copy(String(Found.getString), Length('SHOW_CHART=') + 1);
Found.setString('');
Graphic := Document.createInstance('com.sun.star.text.GraphicObject');
If IdNumber = '123' Then
Graphic.GraphicURL := 'file:///C:/path/to/my_image123.jpg'
Else
Graphic.GraphicURL := 'file:///C:/path/to/my_image456.jpg';
Graphic.AnchorType := 1; {com.sun.star.text.TextContentAnchorType.AS_CHARACTER;}
Graphic.Width := 6000;
Graphic.Height := 8000;
TextCursor.gotoRange(Found, False);
Txt.insertTextContent(TextCursor, Graphic, False);
Found := Document.findNext(Found.getEnd, SearchDescriptor);
end;
编辑 2:
嵌入在 Andrew 文档的下一部分,清单 5.26 中解释。
Bitmaps := Document.createInstance('com.sun.star.drawing.BitmapTable');
While...
If IdNumber = '123' Then begin
Bitmaps.insertByName('123Jpg', 'file:///C:/OurDocs/test_img123.jpg');
Graphic.GraphicURL := Bitmaps.getByName('123Jpg');
end Else begin
Bitmaps.insertByName('456Jpg', 'file:///C:/OurDocs/test_img456.jpg');
Graphic.GraphicURL := Bitmaps.getByName('456Jpg');
end;
我正在使用可接受的解决方案中提到的方法 How to Search and Replace in odt Open Office document? 使用 Delphi
搜索和替换 odt 文档中的文本现在我的要求是用图片替换文字。 例如,我的 odt 文件的标签为 "SHOW_CHART=ID",我将从数据库中检索给定 ID 的图表作为图像文件,然后将其替换为 "SHOW_CHART=ID"。
所以我的问题是如何将文件中的图像插入到 ODT 文档中。 我发现另一个 link 问同样的问题但使用 java。 How to insert an image in to an openoffice writer document with java? 但我不知道 java.
以下代码改编自 Andrew Pitonyak's Macro Document 的清单 5.24。
ServiceManager := CreateOleObject('com.sun.star.ServiceManager');
Desktop := ServiceManager.createInstance('com.sun.star.frame.Desktop');
NoParams := VarArrayCreate([0, -1], varVariant);
Document := Desktop.loadComponentFromURL('private:factory/swriter', '_blank', 0, NoParams);
Txt := Document.getText;
TextCursor := Txt.createTextCursor;
{TextCursor.setString('Hello, World!');}
Graphic := Document.createInstance('com.sun.star.text.GraphicObject');
Graphic.GraphicURL := 'file:///C:/path/to/my_image.jpg';
Graphic.AnchorType := 1; {com.sun.star.text.TextContentAnchorType.AS_CHARACTER;}
Graphic.Width := 6000;
Graphic.Height := 8000;
Txt.insertTextContent(TextCursor, Graphic, False);
有关将 OpenOffice 与 Pascal 结合使用的更多信息,请访问 https://www.freepascal.org/~michael/articles/openoffice1/openoffice.pdf。
编辑:
此代码以插入SHOW_CHART=123
和SHOW_CHART=456
为例。然后它找到这些字符串并用相应的图像替换它们。
Txt.insertString(TextCursor, 'SHOW_CHART=123' + #10, False);
Txt.insertString(TextCursor, 'SHOW_CHART=456' + #10, False);
SearchDescriptor := Document.createSearchDescriptor;
SearchDescriptor.setSearchString('SHOW_CHART=[0-9]+');
SearchDescriptor.SearchRegularExpression := True;
Found := Document.findFirst(SearchDescriptor);
While Not (VarIsNull(Found) or VarIsEmpty(Found) or VarIsType(Found,varUnknown)) do
begin
IdNumber := copy(String(Found.getString), Length('SHOW_CHART=') + 1);
Found.setString('');
Graphic := Document.createInstance('com.sun.star.text.GraphicObject');
If IdNumber = '123' Then
Graphic.GraphicURL := 'file:///C:/path/to/my_image123.jpg'
Else
Graphic.GraphicURL := 'file:///C:/path/to/my_image456.jpg';
Graphic.AnchorType := 1; {com.sun.star.text.TextContentAnchorType.AS_CHARACTER;}
Graphic.Width := 6000;
Graphic.Height := 8000;
TextCursor.gotoRange(Found, False);
Txt.insertTextContent(TextCursor, Graphic, False);
Found := Document.findNext(Found.getEnd, SearchDescriptor);
end;
编辑 2:
嵌入在 Andrew 文档的下一部分,清单 5.26 中解释。
Bitmaps := Document.createInstance('com.sun.star.drawing.BitmapTable');
While...
If IdNumber = '123' Then begin
Bitmaps.insertByName('123Jpg', 'file:///C:/OurDocs/test_img123.jpg');
Graphic.GraphicURL := Bitmaps.getByName('123Jpg');
end Else begin
Bitmaps.insertByName('456Jpg', 'file:///C:/OurDocs/test_img456.jpg');
Graphic.GraphicURL := Bitmaps.getByName('456Jpg');
end;