1# usage: runpy.sh fixtures/page-fill/make.py <port> <out.odt> <png> (office saving ODF 1.2 Extended) 2import sys, uno 3from unohelp import connect, desktop, pv 4from com.sun.star.awt import Gradient 5from com.sun.star.awt.GradientStyle import LINEAR 6from com.sun.star.drawing import Hatch 7from com.sun.star.drawing.HatchStyle import SINGLE 8from com.sun.star.drawing.FillStyle import SOLID, GRADIENT, HATCH, BITMAP 9 10port, out, png = int(sys.argv[1]), sys.argv[2], uno.systemPathToFileUrl(sys.argv[3]) 11d = desktop(connect(port)) 12doc = d.loadComponentFromURL("private:factory/swriter", "_blank", 0, (pv("Hidden", True),)) 13 14def grad(): 15 g = Gradient(); g.Style = LINEAR; g.StartColor = 0xFF0000; g.EndColor = 0x0000FF 16 g.Angle = 0; g.Border = 0; g.XOffset = 50; g.YOffset = 50 17 g.StartIntensity = 100; g.EndIntensity = 100; g.StepCount = 0 18 return g 19 20def hatch(): 21 h = Hatch(); h.Style = SINGLE; h.Color = 0x00AA00; h.Distance = 200; h.Angle = 450 22 return h 23 24def fill(o, pre, kind, color=0xFFCC00): 25 if kind == "solid": 26 setattr(o, pre + "FillStyle", SOLID); setattr(o, pre + "FillColor", color) 27 elif kind == "solid_transp": 28 setattr(o, pre + "FillStyle", SOLID); setattr(o, pre + "FillColor", color); setattr(o, pre + "FillTransparence", 40) 29 elif kind == "gradient": 30 setattr(o, pre + "FillStyle", GRADIENT); setattr(o, pre + "FillGradient", grad()) 31 elif kind == "hatch": 32 setattr(o, pre + "FillStyle", HATCH); setattr(o, pre + "FillHatch", hatch()) 33 setattr(o, pre + "FillColor", 0xFFFFCC); setattr(o, pre + "FillBackground", True) 34 elif kind == "bitmap": 35 setattr(o, pre + "FillStyle", BITMAP); setattr(o, pre + "FillBitmapURL", png) 36 37ps = doc.StyleFamilies.getByName("PageStyles") 38specs = [("P_solid", "solid", "solid", "solid"), ("P_transp", "solid_transp", "solid_transp", "solid_transp"), 39 ("P_grad", "gradient", "gradient", "hatch"), ("P_bitmap", "bitmap", "bitmap", "bitmap")] 40for name, pg, hd, ft in specs: 41 s = doc.createInstance("com.sun.star.style.PageStyle") 42 ps.insertByName(name, s) 43 s.HeaderIsOn = True; s.FooterIsOn = True 44 fill(s, "", pg, 0x66CCFF); fill(s, "Header", hd, 0xCCFF66); fill(s, "Footer", ft, 0xFF66CC) 45 46text = doc.Text 47cur = text.createTextCursor() 48PB = uno.getConstantByName("com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK") 49paras = [] 50for name, *_ in specs: 51 text.insertString(cur, "page " + name, False) 52 text.insertControlCharacter(cur, PB, False) 53 paras.append(name) 54en = text.createEnumeration() 55for name in paras: 56 p = en.nextElement() 57 p.PageDescName = name 58 59doc.storeToURL(uno.systemPathToFileUrl(out), (pv("FilterName", "writer8"),)) 60doc.close(True) 61