Fórum pro uživatele kancelářského balíku OpenOffice | LibreOffice
 

#1 12. 5. 2014 07:35:42

ludviktrnka
Člen
Registrace: 9. 7. 2009
Příspěvků: 697

zobrazení seznamu dostupných tiskáren VYŘEŠENO

Dobrý den, lze nějak v Calcu při tisku pomocí makra (okopíroval jsem jej z pořadu malá makra - díky za ně) zpřístupnit volbu tiskárny? Jde o to že zadání natrvdo do makra by mohlo být uživatelsky nepřívětivé. Mohl bych to načíst z nějaké buňky v dokumentu, ale i tam by bylo dobré mít pravdivý vždy aktuální výběr dostupných tiskáren, jinak to uživatel určitě poplete. Lze ten seznam z Windows nějak vytáhnout? Já pracuji na Win XP, ale má to běžet na Vistách a sedmičkách.

Makrem tisknu vždy jednu stránku postupně při změněných hodnotách, takže ruční tisk je v tomto případě nepohodlný.

Dim vl_tisku (2)as new com.sun.star.beans.PropertyValue
Dim velikost As New com.sun.star.awt.Size
velikost.Width = 20000 ' tj 20 cm šířky
velikost.Height = 10000 ' tj 10 cm výšky
vl_tisku (0).Name = "Name"
vl_tisku (0).Value = "Moje_tiskárna" ' název Vaší tiskárny
vl_tisku (1).Name = "PaperOrientation"
vl_tisku (1).Value = com.sun.star.view.PaperOrientation.LANDSCAPE
' nebo com.sun.star.view.PaperOrientation.PORTRAIT
vl_tisku (2).Name = "PaperSize"
vl_tisku (2). Value = velikost
Doc.Printer = vl_tisku ()

Editoval ludviktrnka (12. 5. 2014 20:02:26)


LibreOffice 5.4.

Offline

#2 12. 5. 2014 09:25:18

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,435

Re: zobrazení seznamu dostupných tiskáren VYŘEŠENO

Najděte si v nápovědě téma
Nastavení tiskáren
Na unixových platformách podporuje LibreOffice přímo pouze tiskárny používající technologii PostScript. Jiné tiskárny je třeba nastavit, jak je popsáno v části Ovladače tiskáren v LibreOffice. LibreOffice automaticky poskytuje tiskárnu s výchozím ovladačem pro každou systémovou frontu. Podle potřeby můžete přidat další tiskárny.
     Existeje možnost nastavit předvolby pro určité případy. Systém automaticky vybere sám existující primární tiskárnu - je li tam tiskáren více. Pokud chcete tisknout na jiné tak to by mohl být problém. Ale obecně bych to jako problém neviděl. Je-li tam tiskárna - makro ji najde.
     Existuje jedna málo používaná metoda - tisk do souboru. Toto bych doporučil zejména v případě tisku na síťové tiskárně. Ovšem to už se z OOo neovládá - nebo jen pomocí Shell-u.
     V případě předvoleb to můžete udělat mimo buňky v sešitě makrem například dále popsaným způsobem :
Máte určitě více možností řešení.
- Udělejte proměnnou pro všechny různé tiskárny :

vl_tisku (0).Value = "Moje_tiskárna" 

Do makra zadáte například deklaraci a kód :
Dim tisk As string
tisk = inputbox("zadejte název tiskárny tak jak je uvedeno v systému Windows","ZADÁNÍ TISKÁRNY","PŘEDNASTAVENÁ TISKÁRNA")

vl_tisku (0).Value = tisk 

      Lze také iterovat například několik tiskáren dokud se nenajde ta správná. Takže jako "string" nadefinujete všechny alternativy, které přichází do úvahy a názvy zadáte do array tisk(počet) a iterujete pomocí cyklu For..Next. Podmínkou IF OnErrorGoTo přeskočíte chybové volby.
      Ale já bych doporučil jednodušší způsob, který může být také uložen v makru jako poslední možnost v případě, že makro tiskárnu nenajde. Nahrajte makro pomocí UNO. Stačí například toto:

sub tisk
dim document   as object
dim dispatcher as object
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Print", "", 0, Array())
end sub

     Tiskárny systému se dají volat pomocí Shell. Shell obecně volá externí programy a procedury. Existuje asi více návodů, ale také například pomocí pythonu. Shell - Příkazy Shellu



     K otestování spuštění služby lze použít makro :

Sub oHowmanyServiceSupported
	Dim oManager
	Dim uService
		oManager = GetProcessServiceManager()
		uService = oManager.GetAvailableServiceNames()
		for i = 0 to UBound(uService)
			otmp = mid(uService(i),14,11)
			If otmp = "awt.Printer" then
				oDisp = oDisp & uService(i) & Chr$(10)
			End If
		next i
		msgbox(oDisp,0,"Uno Service")
End Sub

      Takže vidíte, že se volá modul UNO "awt.Printer". Pokud si vyhledáte na netu toto heslo, najdete jistě další možnosti. UNO obecně také umí pracovat s operačním systémem (Basic nikoliv).
      Ovšem obavy, že uživatel něco zkazí při volbě není příliš důvodné. Podle mne jde spíš o tiskové oblasti a podobné záležitosti jako je tisk levých a pravých stran aj....). Můžete například vsunout na konec MsgBox s informací o spuštění klvesové zkratky pro výběr tiskové oblasti a tisk.


Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#3 12. 5. 2014 13:46:14

sedlacekdan
Moderátor
Místo Nehvizdy
Registrace: 21. 6. 2010
Příspěvků: 617

Re: zobrazení seznamu dostupných tiskáren VYŘEŠENO

Používám toto makro:

sub nastav_tiskarnu
pomocnik = CreateUnoService("com.sun.star.frame.DispatchHelper") 
pomocnik.executeDispatch(thisComponent.getCurrentController(),".uno:PrinterSetup", "_self", 0, Array()) 
end sub

Makro vyvolá dialog pro nastavení výchozí tiskárny, v makru pro tisk pak již nemusíte tiskárnu vůbec uvádět.


Cesta přes menu:
Soubor - Nastavení tiskárny
kde se vypíší všechny dostupné tiskárny


;o)


Linux Mint 16 Petra - Apache OpenOffice 4.0.1
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#4 12. 5. 2014 19:59:27

ludviktrnka
Člen
Registrace: 9. 7. 2009
Příspěvků: 697

Re: zobrazení seznamu dostupných tiskáren VYŘEŠENO

Díky moc, to je přesně co jsem potřeboval. To jsem ani nevěděl že tam takové nstavení je ... vždy jsem to přenastavoval přímo ve Windows. A to makro to krásně a jednoduše zpřístupňuje - supr.


LibreOffice 5.4.

Offline

Zápatí