Makrá v OpenOffice.org: Vkladanie, embedovanie a ukotvenie obrázkov (I.)

Július Pastierik  /  12. 01. 2011, 11:13

Potrebujete v OpenOffice.org previesť hromadnú zmenu ukotvenia všetkých obrázkov? Alebo ich potrebujete embedovať (vložiť) obrázky priamo do dokumentu? Naprogramujte si na tieto účely makro.

Pri vkladaní obrázkov do OpenOffice.org chýba v súčasnosti možnosť, ako chcete vkladaný obrázok ukotviť a pokiaľ robíte s veľa obrázkami, je následná práca pomerne nepohodlná. Podobný prípad vzniká aj vtedy, ak už máte dokument predpripravený a z ľubovoľného dôvodu potrebujete zmeniť ukotvenie všetkých obrázkov.

Ďalšia problematika je aj priehľadnosť obrázkov, pretože napr. pri exporte do PDF/A formátu nie je priehľadnosť podporovaná a preto je vhodné, aby ste prípadné nastavenia priehľadnosti obrázkov zrušili ešte v pôvodnom dokumente, aby ste videli, ako bude výsledok vyzerať skôr, ako export spustíte.

Posledným problémom, ktorým sa budeme teraz zaoberať, je otázka embedovania obrázkov dovnútra dokumentu. Tento problém vzniká napr. pri kopírovaní dokumentu z internetu, kde sa vám, samozrejme, namiesto reálnych obrázkov vložia ich internetové odkazy. Toto však pri ďalšom spracovávaní mnohokrát nepostačuje a preto je potrebné previesť embedovanie, t. j. fyzické vloženie obrázkov do dokumentu.

Na všetky tieto účely si pripravíme makrá, ktoré budú spomínané problémy riešiť za vás. Preto, aby ste dokázali vkladať obrázky, hromadne zmeniť ich ukotvenie či priehľadnosť, si musíte pripraviť príslušné dialógové okná.

V našom príklade si pripravíme iba jedno okno, kde vložíme prepínač, čo chceme robiť (vložiť obrázok, nastaviť ukotvenie všetkých obrázkov, nastaviť priehľadnosť všetkých obrázkov) a podľa hodnoty tohto prepínača budeme následne nastavovať ďalšie parametre (pri vkladaní či zmene ukotvenia typ ukotvenia – ako znak, k stránke, k odseku alebo ku znaku; pri vkladaní či zmene priehľadnosti percento priehľadnosti).

V dnešnom, prvom dieli si uvedieme na začiatok makrá pre prácu s dialógom, t. j. makrá pre jazykovú lokalizáciu, zobrazovanie parametrov podľa hodnoty prepínača a vlastné makro pre zobrazenie dialógu.



dim dlg as object

REM Funkcia pre zistenie jazyka OO.o
function Jazyk_OOo as string
 dim ConfigProvider, MasterKey as object
 dim NodePath(0) as new com.sun.star.beans.PropertyValue

 NodePath(0).Name = "nodepath"
 NodePath(0).Value = "org.openoffice.Setup/L10N/"

 ConfigProvider = createUnoService("com.sun.star.configuration.ConfigurationProvider")
 MasterKey = ConfigProvider.createInstanceWithArguments("com.sun.star.configuration.ConfigurationAccess", NodePath())
 Jazyk_OOo = left(MasterKey.getByName("ooLocale"),2) '"sk", "cs", ...
end function

REM Procedúra pre nastavenie jazyka dialógu
Sub Set_jazyk_dialgu(oDlg, sNazov, sZahlavie)
 dim riadok, premenna, definicia as string
 dim rovna as integer
 dim sf, inStream, inFile ' Pre čítanie z lokalizačného súboru

 on error resume next

 if fileexists(sNazov) then ' Ak lokalizačný súbor existuje, tak načítame definície do premenných
  sf = createUnoService("com.sun.star.ucb.SimpleFileAccess")
  inStream = sf.openFileRead(sNazov) 
  inFile = createUnoService("com.sun.star.io.TextInputStream") 
  inFile.InputStream = inStream
  inFile.Encoding = "UTF-8" ' lokalizačný súbor musí byť v UTF-8, inak nebude dobrá diakritika

  Do While not inFile.IsEOF
   riadok = inFile.readLine ' namiesto Line Input #subor, riadok
   rovna=instr(riadok,"=")
   if rovna<>0 then
    premenna=trim(left(riadok,rovna-1)) ' Budeme ignorovať medzery
    definicia=trim(right(riadok,len(riadok)-rovna))
    if premenna=sZahlavie then
     oDlg.Title=definicia
    else
     oDlg.model.getByName(premenna).setpropertyvalue("Label",definicia)
    endif
   end if
  loop 
  ' Zatvorenie definičného súboru – namiesto close #subor
  inStream.closeInput
  inFile.closeInput
 end if
end sub

REM Procedúra pre zmenu viditeľnosti okna pre vstup názvu súboru
sub Vkladanie_Initiated
 if dlg.model.Vloz.State=1 then ' Ak vkladáme obrázok, vidíme výber súboru, nastavenie ukotvenia aj priehľadnosti
  dlg.getControl("Subor").Visible=True
  dlg.getControl("Label1").Visible=True
  dlg.getControl("AS_CHARACTER").Visible=True
  dlg.getControl("AT_PAGE").Visible=True
  dlg.getControl("AT_PARAGRAPH").Visible=True
  dlg.getControl("AT_CHARACTER").Visible=True
  dlg.getControl("Label2").Visible=True
  dlg.getControl("PriehlCis").Visible=True
 elseif dlg.model.Ukotvi.State=1 then ' Ak ukotvujeme všetky obrázky, nevidíme výber súboru a priehľadnosť
  dlg.getControl("Subor").Visible=False
  dlg.getControl("Label1").Visible=True
  dlg.getControl("AS_CHARACTER").Visible=True
  dlg.getControl("AT_PAGE").Visible=True
  dlg.getControl("AT_PARAGRAPH").Visible=True
  dlg.getControl("AT_CHARACTER").Visible=True
  dlg.getControl("Label2").Visible=False
  dlg.getControl("PriehlCis").Visible=False
 else ' Ak nastavujeme priehľadnosť, nevidíme výber súboru a ukotvenie
  dlg.getControl("Subor").Visible=False
  dlg.getControl("Label1").Visible=False
  dlg.getControl("AS_CHARACTER").Visible=False
  dlg.getControl("AT_PAGE").Visible=False
  dlg.getControl("AT_PARAGRAPH").Visible=False
  dlg.getControl("AT_CHARACTER").Visible=False
  dlg.getControl("Label2").Visible=True
  dlg.getControl("PriehlCis").Visible=True
 endif
end sub

REM Procedúra pre vkladanie a zmenu ukotvenia obrázkov
Sub Nastav_ukotvenie_obrazkov
 dim iUkotvenie, iPriehladnost
 dim nazov as string

 DialogLibraries.LoadLibrary("JP_ukotvi_obrazok")
 dlg=CreateUnoDialog(DialogLibraries.JP_ukotvi_obrazok.Dialog_ukotvenie) ' Sprístupnenie dialógu

 kde=basiclibraries.getLibraryLinkURL("JP_ukotvi_obrazok") ' Adresár, kde je rozšírenie nainštalované
 nazov=left(kde,len(kde)-10)+"jp_ukotvi_obrazok_"+Jazyk_OOo+".txt" ' Súbor s jazykovou lokalizáciou 

 Set_jazyk_dialgu(dlg, nazov, "Dialog_ukotvenie") ' Nastavenie jazyka dialógu

 dlg.model.Vloz.State=1 ' Prednastavené nastavenie vkladania obrázku
 dlg.model.Ukotvi.State=0

 dlg.model.AS_CHARACTER.State=1 ' Prednastavené nastavenie ukotvenia je "Ako znak"
 dlg.model.AT_PAGE.State=0
 dlg.model.AT_PARAGRAPH.State=0
 dlg.model.AT_CHARACTER.State=0

 if dlg.execute() then
  if dlg.model.AS_CHARACTER.State=1 then iUkotvenie=com.sun.star.text.TextContentAnchorType.AS_CHARACTER ' Ako znak
  if dlg.model.AT_PAGE.State=1 then iUkotvenie=com.sun.star.text.TextContentAnchorType.AT_PAGE ' K strane
  if dlg.model.AT_PARAGRAPH.State=1 then iUkotvenie=com.sun.star.text.TextContentAnchorType.AT_PARAGRAPH ' K odseku
  if dlg.model.AT_CHARACTER.State=1 then iUkotvenie=com.sun.star.text.TextContentAnchorType.AT_CHARACTER ' K znaku

  iPriehladnost=dlg.model.PriehlCis.Value  

  if dlg.model.Vloz.State=1 then ' Vkladáme obrázok
   nazov=trim(dlg.model.Subor.text)
   if nazov<>"" then
    Vloz_obrazok(ConvertToURL(dlg.model.Subor.text), iUkotvenie, iPriehladnost)
   end if
  elseif dlg.model.Ukotvi.State=1 then ' Ukotvujeme všetky obrázky
   Zmen_ukotvenie(iUkotvenie)
  else ' Nastavujeme priehľadnosť všetkých obrázkov
   Zmen_priehladnost(iPriehladnost)
  end if 
 end if
 dlg.dispose() ' Zatvorenie dialógu
end sub

Neprehliadnite: