gpt4 book ai didi

delphi - 如何使用 Delphi 在 OpenOffice 文档中插入图像

转载 作者:行者123 更新时间:2023-12-03 15:46:06 24 4
gpt4 key购买 nike

我正在使用可接受的解决方案中提到的方法 How to Search and Replace in odt Open Office document?使用 Delphi 在 odt 文档中搜索和替换文本

现在我的要求是用图像替换文本。例如,我的 odt 文件将具有“SHOW_CHART=ID”标签,我将从数据库中检索给定 ID 的图表作为图像文件,然后将其替换为“SHOW_CHART=ID”。

所以我的问题是如何将文件中的图像插入 ODT 文档。我发现另一个链接询问同样的问题,但使用 java。 How to insert an image in to an openoffice writer document with java?但我不懂java。

最佳答案

以下代码改编自 Andrew Pitonyak's Macro Document 的 list 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=123SHOW_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 文档的下一部分( list 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;

关于delphi - 如何使用 Delphi 在 OpenOffice 文档中插入图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46191314/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com