Reálna prax mnohých používateľov ukazuje potrebu ukladania dokumentov nielen do formátov ODT, ale aj do formátov Microsoft Office a PDF. Pravdaže, toto sa dá riešiť tým, že pri každom dokumente ho najprv uložíte v jednom formáte, potom v druhom a nakoniec dokument vyexportujete do PDF. Tento postup je však zbytočne pracný a preto si ukážeme makro, ktoré to urobí za nás.
Pri jeho tvorbe si musíme uvedomiť nielen to, že každý modul OpenOffice.org pracuje s rôznymi príponami, ale aj to, že môžeme práve spracovávať povedzme zošit vo formáte XLS a tento chceme uložiť aj do formátu ODS alebo presne naopak, práve spracovávame povedzme textový dokument vo formáte ODT a chceme ho uložiť aj do formátu DOC. Jediný bezproblematický je export do formátu PDF, pretože tento formát nie je možné v OpenOffice.org priamo otvárať a editovať. Pravdaže, aj tu existuje možnosť jeho editovania v module Draw, týmto sa však nebudeme v makre zaoberať.
Pretože pri ukladaní môžeme pracovať aj s novým súborom, ktorý ešte nebol uložený, musíme v makre volať štandardné funkcie OpenOffice.org „Ulož“ a „Ulož ako...“ a až potom budeme ukladať súbor do ostatných formátov. Pretože makro je, ako obvykle, pomerne dobre okomentované, nemusíme sa tejto problematike viac venovať a uvádzame už priamo jeho zdrojový kód.
REM Procedúra pre uloženie v rôznych formátoch
sub uloz_odf_ms_pdf
dim oDokument
dim args(0) as new com.sun.star.beans.PropertyValue
dim sNazov$, sNovy$, sPripona$
oDokument=ThisComponent
sNazov=trim(oDokument.getURL()) ' Názov dokumentu
if len(sNazov)>3 then ' Ak je zadaný názov dokumentu
args(0).Name="FilterName" ' Ideme ukladať ako...
sPripona=right(sNazov,3) ' Prípona
sNazov=left(sNazov,len(sNazov)-3) ' Názov dokumentu bez prípony
if oDokument.SupportsService("com.sun.star.text.TextDocument") then ' Ak sme v module Writer, tak ukladáme ako ODT, DOC, PDF
' Ak nebol dokument uložený ako ODT, uložíme ho aj ako ODT
if lCase(sPripona)<>"odt" then
args(0).Value="StarOffice XML (Writer)"
sNovy=SNazov+"odt"
oDokument.storeToURL(sNovy,args())
endif
' Ak nebol dokument uložený ako DOC, uložíme ho aj ako DOC
if lCase(sPripona)<>"doc" then
sNovy=SNazov+"doc"
args(0).Value="MS Word 97"
oDokument.storeToURL(sNovy,args())
endif
' Dokument uložíme ako PDF
sNovy=SNazov+"pdf"
args(0).Value="writer_pdf_Export"
oDokument.storeToURL(sNovy,args())
elseif oDokument.SupportsService("com.sun.star.sheet.SpreadsheetDocument") then ' Ak sme v module Calc, tak ukladáme ako ODS, XLS, PDF
' Ak nebol dokument uložený ako ODS, uložíme ho aj ako ODS
if lCase(sPripona)<>"ods" then
args(0).Value="StarOffice XML (Calc)"
sNovy=SNazov+"ods"
oDokument.storeToURL(sNovy,args())
endif
' Ak nebol dokument uložený ako XLS, uložíme ho aj ako XLS
if lCase(sPripona)<>"xls" then
sNovy=SNazov+"xls"
args(0).Value="MS Excel 97"
oDokument.storeToURL(sNovy,args())
endif
' Dokument uložíme ako PDF
sNovy=SNazov+"pdf"
args(0).Value="calc_pdf_Export"
oDokument.storeToURL(sNovy,args())
elseif oDokument.SupportsService("com.sun.star.presentation.PresentationDocument") then ' Ak sme v module Impress, tak ukladáme ako ODP, PPT, PDF
' Ak nebol dokument uložený ako ODP, uložíme ho aj ako ODP
if lCase(sPripona)<>"odp" then
args(0).Value="StarOffice XML (Impress)"
sNovy=SNazov+"odp"
oDokument.storeToURL(sNovy,args())
endif
' Ak nebol dokument uložený ako PPT, uložíme ho aj ako PPT
if lCase(sPripona)<>"ppt" then
sNovy=SNazov+"ppt"
args(0).Value="MS Powerpoint 97"
oDokument.storeToURL(sNovy,args())
endif
' Dokument uložíme ako PDF
sNovy=SNazov+"pdf"
args(0).Value="impress_pdf_Export"
oDokument.storeToURL(sNovy,args())
elseif oDokument.SupportsService("com.sun.star.drawing.DrawingDocument") then ' Ak sme v module Draw, tak ukladáme ako OSG, PDF
' Ak nebol dokument uložený ako ODG, uložíme ho aj ako ODG
if lCase(sPripona)<>"odg" then
sNovy=SNazov+"odg"
args(0).Value="StarOffice XML (Draw)"
oDokument.storeToURL(sNovy,args())
endif
' Dokument uložíme ako PDF
sNovy=SNazov+"pdf"
args(0).Value="draw_pdf_Export"
oDokument.storeToURL(sNovy,args())
endif
endif
end sub
REM Procedúra pre "Ulož ako... odt, doc, pdf"
sub Uloz_ako
dim oDokument, oDispatcher
oDokument=ThisComponent.CurrentController.Frame
oDispatcher=createUnoService("com.sun.star.frame.DispatchHelper")
oDispatcher.executeDispatch(oDokument, ".uno:SaveAs", "", 0, Array()) ' Volanie štandardnej funkcie "Ulož ako..."
uloz_odf_ms_pdf ' Uloženie v ostatných formátoch
end sub
REM Procedúra pre "Uložiť odt, doc, pdf"
sub Uloz
dim oDokument, oDispatcher
oDokument=ThisComponent.CurrentController.Frame
oDispatcher=createUnoService("com.sun.star.frame.DispatchHelper")
oDispatcher.executeDispatch(oDokument, ".uno:Save", "", 0, Array()) ' Volanie štandardnej funkcie "Uložiť"
uloz_odf_ms_pdf ' Uloženie v ostatných formátoch
end sub