Falls in den Bilddateien die Größe nicht in mm, sondern in Pixeln angegeben ist, ermittele ich die Pixelgröße des Monitors und daraus dann die Grafikgröße in mm. Das geht in Basic leicht mit den Funktionen TwipsPerPixelX und TwipsPerPixelY, z.B.
Code: Alles auswählen
' 2540 ist ein Zoll, umgerechnet in 1/100 mm.
' Ein Zoll hat 14440 Twips (na ja, so ungefähr).
oSize.Height = oGraphicDescriptor.SizePixel.Height * 2540.0 * TwipsPerPixelY() / 1440
oSize.Width = oGraphicDescriptor.SizePixel.Width * 2540.0 * TwipsPerPixelX() / 1440
Code: Alles auswählen
def get_screen_resolution():
"""Gibt ein Dictionary der aktuellen Monitorhöhe und -breite
als Integers in mm und in Pixeln zurück, zusätzlich auch die
Ausdehnung eines Pixels in Höhe und Breite als Fließkommazahlen
in 1/100mm."""
import Tkinter
values = {}
w = Tkinter.Tk()
values['HeightInMM'] = w.winfo_screenmmheight()
values['WidthInMM'] = w.winfo_screenmmwidth()
values['HeightInPx'] = w.winfo_screenheight()
values['WidthInPx'] = w.winfo_screenwidth()
values['HeightOfPx'] = values['HeightInMM'] * 100.0 / values['HeightInPx']
values['WidthOfPx'] = values['WidthInMM'] * 100.0 / values['WidthInPx']
return values
Doch wie ich aus viewtopic.php?f=18&t=66448 erfahre, ist das so eine Sache mit Tkinter. Ich habe es unter openSUSE 13.2 mit dem originalen AOO 4.1.2 und dem testweise installierten LO 5.0.1.2 (ich weiß, es gibt Neueres). Tkinter wird nicht eingebunden. Auch nicht mit dem zum System gehörenden LO 4.3.7.2!
Die Fehlermeldung lautet:
Hat jemand eine Idee, anderswie an die Monitordaten zu kommen?[DEBUG] Error during invoking function on_click_convert in module vnd.sun.star.tdoc:/1/Scripts/python/batches.py (<type 'exceptions.ImportError'>: No module named _tkinter
/opt/openoffice4/program/uno.py:244 in function _uno_import() [return _g_delegatee( name, *optargs, **kwargs )]
/opt/openoffice4/program/python-core-2.7.6/lib/lib-tk/Tkinter.py:39 in function <module>() [import _tkinter # If this fails your Python may not be configured for Tk]
/opt/openoffice4/program/uno.py:244 in function _uno_import() [return _g_delegatee( name, *optargs, **kwargs )]
vnd.sun.star.tdoc:/1/Scripts/python/batches.py:276 in function on_click_convert() [None]
/opt/openoffice4/program/pythonscript.py:867 in function invoke() [ret = self.func( *args )]
)
In der API kann ich nur com.sun.star.rendering.XGraphicDevice finden. Aber ich bekomme es nicht ans Laufen.
Für Linux kann man xrandr auslesen. Aber in MS Windows und MacOS kenne ich mich nicht so aus. Eine systemunabhängige Lösung wäre schon schön.
Schöne Grüße
Volker