Fellesfunksjoner: StarDesktop

From Apache OpenOffice Wiki
Jump to: navigation, search


Felles funksjoner er samlet i to tjenester. Den første heter com.sun.star.frame.Desktop og heter på kortform bare "StarDesktop" og tar seg av åpning av dokument. Den andre heter com.sun.star.document.OfficeDocument og ordner lagring, utskrift og konvertering.

Det dokument man arbeider med har navnet StarDesktop.CurrentComponent er det dokument man arbeider med. Det globale ThisComponent er identisk (en snarvei).

URL navneformat

Dokumenter åpnes ved å oppgi en URL (Universal Resource Locator, definert i RFC1738). URL til et webdokument starter med det velkjente "http://" mens lokale filer har URL som f.eks. "file:///c/Windows/glupeord.txt". Konvertering mellom filnavn og URLer gjøres med ConvertToURL(n) og ConvertFromURL(u), som:

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

XML filformat

Apache OpenOffice lagrer dokument som XML (et format), og i ZIP-komprimert og pakket form, da disse blir ganske store. Dokument åpnes so:

StarDesktop.loadComponentFromURL(URL, Frame, SearchFlags, FileProperties)

der "URL" angir dokumentets navn, "Frame" angir hvilket vindu som skal brukes ("_blank" gir nytt, men en kan jo ønske å bruke et vindu man allerede har), "SearchFlags" brukes i tilfelle leting er nødvendig og "FileProperties" er en tabell med filegenskaper. En enkel åpning er å ignorere de to siste parametrene:

Dim Doc As Object
Dim Url As String
Dim Dummy() ' tom tabell
Url = "file:///C:/gode_ord.odt"
Doc = StarDesktop.loadComponentFromURL(URL, "_blank", 0, Dummy)
.

Vil en derimot bruke eksisterende vindu "MyFrame" og angi spesielle leteflagg kan en vel:

Dim Doc As Object
Dim Dummy() 
Dim Url As String
Dim SearchFlags As Long
 
SearchFlags = com.sun.star.frame.FrameSearchFlag.CREATE + _
              com.sun.star.frame.FrameSearchFlag.ALL
Url = "file:///C:/test.odt"
Doc = StarDesktop.loadComponentFromURL(Url, "MyFrame", SearchFlags, Dummy)

Det fjerde parameter har varierte muligheter som ikke beskrives her.

Hvis URL angir en malfil åpnes et nytt dokument som baserer seg på den malen. Vil en ha et dokument uten slik tilpassning brukes et private:factory som URL:

Dim Dummy() 
Dim Url As String
Dim Doc As Object
 
Url = "private:factory/swriter"
Doc = StarDesktop.loadComponentFromURL(Url, "_blank", 0, Dummy())

Dette vil åpne et tomt tekstdokument.

Lagring av dokument

Lagring skjer med d.store() eller d.storeAsURL():

Dim URL As String
Dim Dummy()
 
Url = "file:///C:/test3.odt"
Doc.storeAsURL(URL, Dummy())

Andre metoder er hasLocation() for å avgjøre om dokumentet har en URL, isReadOnly() og isModified() som gir boolsk metainfo om tilstanden til dokumentet:

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

En ser at en kun lagrer hvis dokumentet er endret.

Detaljer om lagringen er en tabell der man legger CharacterSet (streng som angir tegnsett), Filtername (streng), FilterData (streng), FilterOptions (streng), Overwrite (boolsk, False hvis en ikke skal overskrive), Password (streng som angir passord som skal benyttes ved senere gjenåpning). Flere fins. Et eksempel er:

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

En ser at overskrift tillates!

Oppsett av utskrift

Utskrift skjer med d.print (props) der props er en tabell som gir detaljer om utskriften: CopyCount (heltall) er antallet kopier, FileName (streng) legger utskriften til fil istedet for skriver, Collate (boolsk) ber skriveren kollatere sidene, Sort (boolsk) ber skriveren sortere kopiene, Pages (streng) angir hvilke sider som skal skrives ut, Wait (boolsk) er True hvis en skal vente til utskriften er over. Et eksempel:

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

Skriveroppsett

Vil en si litt om skriveren i seg selv (og ikke utskriften) gjøres det tilsvarende, i en tabell der man angir Name (en streng med skriverens navn), PaperOrientation (f.eks. com.sun.star.view.PaperOrientation.PORTRAIT), PaperFormat (f.eks. com.sun.star.view.PaperFormat.A4), PaperSize (en "Size", d.v.s. i 1/100 mm). Et eksempel:

Dim Doc As Object
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()


Content on this page is licensed under the Public Documentation License (PDL).
Personal tools