StarDesktop

一、StarDesktop是什么

com.sun.star.frame.Desktop服务,相当于应用程序。
com.sun.star.frame.Desktop服务对象是在启动libreOffice时自动创建的。
在libreOffice Basic中,可以使用全局变量StarDesktop 获得该服务的对象。

二、loadComponentFromURL方法

StarDesktop的com.sun.star.frame.XComponentLoader接口包含loadComponentFromURL方法,此方法负责创建、导入和打开文档。

com::sun::star::lang::XComponent loadComponentFromURL([in] string URL, [in] string TargetFrameName,	[in] long SearchFlags, [in] sequence<com::sun::star::beans::PropertyValue>	Arguments)

1.第一个参数是文件的URL。

(1)用URL表示的文件名
由于libreOffice是一种与平台无关的应用程序,因此,它使用Internet Standard RFC 1738中的URL表示法。此表示法以前缀file:///开头,后跟本地路径。如果文件名包含子目录,则使用/分隔这些子目录。

以下路径引用C: 驱动器上的doc目录中的 test.odt文件。
file:///C:/doc/test.odt
ConvertToUrl函数将本地文件名转换为URL。
ConvertFromUrl函数将URL转换为本地文件名

MsgBox ConvertToUrl("C:\doc\test.odt") ' supplies file:///C:/doc/test.odt
MsgBox ConvertFromUrl("file:///C:/doc/test.odt") ' supplies (under Windows) c:\doc\test.odt

文件名中ascii字符只允许使用 0-9、a-z 和 A-Z 字符。其他ascii字符必须使用转义编码。转义编码是ascii码的十六进制值,并在前面加上百分号。例如,本地文件名中的空格为%20。

(2)用于创建新文档的URL。

URL文件类型
“private:factory/scalc”Calc document 表格文档
“private:factory/swriter”Writer document 文本文档
“private:factory/swriter/web”Writer HTML Web document
“private:factory/swriter/GlobalDocument”Master document 主文档
“private:factory/sdraw”Draw document 绘图文档
“private:factory/smath”Math formula document 数学公式文档
“private:factory/simpress”Impress presentation document 演示文稿
“private:factory/schart”Chart 图表
“.component:Bibliography/View1”Bibliography—Edit the bibliography entries 参考书目-编辑参考书目条目
“.component:DB/QueryDesign”Database components 数据库组件
“.component:DB/TableDesign”
“.component:DB/RelationDesign”
“.component:DB/DataSourceBrowser”
“.component:DB/FormGridView”

2.第二个参数是框架的名称。
特殊框架名称。

框架名称说明
“_blank”创建新框架。
“_default”检测已加载的文档,如果未找到,则创建新框架。
“_self”使用或返回此框架。
“”使用或返回此框架。
“_parent”使用或返回此框架的直接父框架。
“_top”使用或返回最高级别的父框架。
“_beamer”使用或返回特殊子框架。

3.第三个是如何查找指定框架名称的标志
com.sun.star.frame.FrameSearchFlag常量。

#名称Description 说明
0AUTODeprecated. Use 6 = SELF+CHILDREN.
1PARENT包括父框架。
2SELF包括此框架。
4CHILDREN包括此框架的子框架。
8CREATE如果未找到请求的框架,则创建一个框架。
16SIBLINGS包括此框架的父框架的子框架。
32TASKS在当前框架层次结构中的所有任务中的所有框架。
23ALL包括除TASKS以外的所有框架。23 = 1+2+4+16 = PARENT + SELF + CHILDREN + SIBLINGS
55GLOBAL包括每个框架。55 = 1+2+4+16+32 = PARENT + SELF + CHILDREN + SIBLINGS + TASKS.

4.第四个指定了特殊行为。

参数说明
AsTemplate (Boolean)如果为true,则创建一个新的无标题文档。如果为false,则加载模板文件以进行编辑。
Author如果组件可以跟踪当前版本的作者,则设置作者
CharacterSet (String)定义文档所基于的字符集。
Comment与Author参数类似,但设置每个版本。
ComponentDataAllows component-specific properties. 允许特定于零部件的特性。
DocumentTitleSets the Document title. 设置文档标题。
FilterDataAdditional properties for a filter if it is required. 过滤器的其他属性(如果需要)。
FilterName (String)指定特殊过滤器。可用过滤器名称是在\share\config\registry\instance\org\openoffice\office\TypeDetection.xml文件中定义的。

三、创建文档

Url = "private:factory/swriter"
Doc = StarDesktop.loadComponentFromURL(Url, "_blank", 0, array())

四、打开文档

Url = "file:///C:/test.odt"
Doc = StarDesktop.loadComponentFromURL(Url, "_blank", 0, array())

替换文档窗口的内容

SearchFlags = com.sun.star.frame.FrameSearchFlag.CREATE + _
com.sun.star.frame.FrameSearchFlag.ALL
Url = "file:///C:/test.odt"
Doc = StarDesktop.loadComponentFromURL(Url, "MyFrame", SearchFlags, array())
MsgBox "Press OK to display the second document."
Url = "file:///C:/test2.odt"
Doc = StarDesktop.loadComponentFromURL(Url, "MyFrame", SearchFlags, array())

本示例首先在框架名称为MyFrame的新窗口中打开 test.odt文件。在消息框中进行确认后,本示例使用 test2.odt 文件替换了窗口的内容。

设置过滤器

Dim FileProperties(0) As New com.sun.star.beans.PropertyValue
Url = "file:///C:/csv.doc"
FileProperties(0).Name = "FilterName"
FileProperties(0).Value ="scalc: Text - txt - csv ({{OOo}} Calc)"
Doc = StarDesktop.loadComponentFromURL(Url, "_blank", 0, FileProperties())

五、获得当前文档

com.sun.star.document.OfficeDocument服务,相当于单个文档。
loadComponentFromURL函数返回一个com.sun.star.document.OfficeDocument服务对象。
如果想要获得当前活动文档对象,可以使用全局变量ThisComponent或者StarDesktop.CurrentComponent。

doc = ThisComponent
doc = StarDesktop.CurrentComponent

ThisComponent比StarDesktop.CurrentComponent有个优点,就是如果从Basic IDE中运行程序,则StarDesktop返回Basic IDE本身。这可能并不是您想要的结果。而ThisComponent总是返回最后一个活动文档。
com.sun.star.document.OfficeDocument 服务又提供了两个主要接口:
com.sun.star.frame.XStorable 接口,此接口负责保存文档。
com.sun.star.view.XPrintable 接口,此接口包含用于打印文档的方法。

六、保存文档

com.sun.star.frame.XStorable 接口提供了 store 方法:
Doc.store()

对于新文档,需要使用 storeAsURL 方法。
此方法也是在 com.sun.star.frame.XStorable 中定义的,它可用于定义文档的位置:

Url = "file:///C:/test3.odt"
Doc.storeAsURL(URL, array())

com.sun.star.frame.XStorable 还提供了一些帮助方法,这些方法在保存文档时非常有用。这些方法是:
hasLocation()
指定是否已经为文档指定了URL。
isReadonly()
指定文档是否具有只读保护。
isModified()
指定在上次保存后是否修改了文档。

If (Doc.isModified) Then
	If (Doc.hasLocation And (Not Doc.isReadOnly)) Then
		Doc.store()
	Else
		Doc.storeAsURL(URL, array())
	End If
End If

本示例首先检查在上次保存后是否修改了相关文档。只有进行了修改,它才会继续执行保存过程。如果已经为文档指定了URL并且文档不是只读文档,则在现有URL下保存该文档。如果文档没有URL或以只读状态打开文档,则在新URL下保存文档。

storeAsURL 提供了以下选项:
CharacterSet (String)
定义文档所基于的字符集。
FilterName (String)
为 loadComponentFromURL 函数指定特殊过滤器。可用过滤器名称是在 \share\config\registry\instance\org\openoffice\office\TypeDetection.xml 文件中定义的。
FilterOptions (String)
为过滤器定义其他选项。
Overwrite (Boolean)
无需查询即可覆盖已存在的文件。
Password (String)
为受保护的文件传送密码。
Unpacked (Boolean)
在子目录中保存文档(未压缩)。
以下示例说明了如何将 Overwrite 选项与 storeAsURL 一起使用:

Dim FileProperties(0) As New com.sun.star.beans.PropertyValue
Url = "file:///c:/test3.odt"
FileProperties(0).Name = "Overwrite"
FileProperties(0).Value = True
Doc.storeAsURL(sUrl, FileProperties())

如果已存在同名文件,本示例将使用指定的文件名保存 Doc。

七、打印文档

与文档保存类似,文档打印也是直接通过文档对象进行的。为此,com.sun.star.view.Xprintable 接口提供了 Print 方法。最简单的print调用形式为:

Dim Dummy()
Doc.print(Dummy())

print 方法要求将 PropertyValue 数据字段作为参数,此字段反映了libreOffice打印对话框的设置:
CopyCount (Integer)
指定要打印的份数。
FileName (String)
打印指定文件中的文档。
Collate (Boolean)
建议打印机逐份打印。
Sort (Boolean)
打印多份文档时对页面进行排序 (CopyCount > 1)。
Pages (String)
包含要打印的页面列表(使用打印对话框中指定的语法)。
以下示例说明了如何使用 Pages 选项打印文档的几个页面:

Dim PrintProperties(0) As New com.sun.star.beans.PropertyValue
PrintProperties(0).Name="Pages"
PrintProperties(0).Value="1-3; 7; 9"
Doc.print(PrintProperties())

打印机选择和设置
com.sun.star.view.XPrintable 接口提供了 Printer 属性,该属性可选择打印机。该属性接收包含以下设置的 PropertyValue 数据字段:
Name (String)
指定打印机的名称。
PaperOrientation (Enum)
指定纸张方向(com.sun.star.view.PaperOrientation.PORTRAIT值表示纵向格式,com.sun.star.view.PaperOrientation.LANDSCAPE 值表示横向格式)。
PaperFormat (Enum)
指定纸张格式(例如,com.sun.star.view.PaperFormat.A4 表示DIN A4,com.sun.star.view.PaperFormat.Letter 表示US Letter)。
PaperSize (Size)
指定纸张大小,以百分之一毫米为单位。
以下示例说明了如何借助 Printer 属性更改打印机和设置纸张大小。

Dim PrinterProperties(1) As New com.sun.star.beans.PropertyValue
Dim PaperSize As New com.sun.star.awt.Size
PaperSize.Width = 20000 ' corresponds to 20 cm
PaperSize.Height = 20000 ' corresponds to 20 cm
PrinterProperties (0).Name="Name"
PrinterProperties (0).Value="My HP Laserjet"
PrinterProperties (1).Name="PaperSize"
PrinterProperties (1).Value=PaperSize
Doc.Printer = PrinterProperties()

本示例定义了一个名为 PaperSize 的对象,其类型为com.sun.star.awt.Size。在指定纸张大小时需要使用该对象。另外,本示例还为两个 PropertyValue 条目创建了一个名为 PrinterProperties 的数据字段。然后,使用要设置的值初始化该数据字段,并将其赋值给 Printer 属性。从UNO的角度看,Printer并不是一个真实属性,而是一个模拟属性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值