def add_image(self, path): page = Page(masterpagename=self.masterpage) photoframe = Frame( stylename=self.photostyle, width='%fpt' % self.width, height='%fpt' % self.height, x='0pt', y='0pt') self.doc.presentation.addElement(page) page.addElement(photoframe) href = self.doc.addPicture(path) photoframe.addElement(Image(href=href))
def addImage(self,image_path,name): if not name: name = image_path p = P() self.textdoc.text.addElement(p) href = self.textdoc.addPicture(image_path) f = Frame(name=name, anchortype="paragraph", width="17cm", height="7.5cm", zindex="0") p.addElement(f) img = Image(href=href, type="simple", show="embed", actuate="onLoad") f.addElement(img)
def addImage(self, data_box): format = 'PNG' image_file = tempfile.mkstemp(suffix='.' + format)[1] data_box.image.save(image_file, format=format) x, y, width, height = data_box.getBoundsPrintSize( self.current_page_resolution) photo_frame = Frame(stylename=self.photo_style, x='%sin' % x, y='%sin' % y, width='%sin' % width, height='%sin' % height, anchortype='paragraph') self.current_page.addElement(photo_frame) location = self.document.addPicture(image_file) photo_frame.addElement(Image(href=location)) self.temp_images.append(image_file)
def Page_Rect_get_Text_odf(doc, name, page_num, rects, hierarchy, output, style_p): page = doc[page_num] words = page.getText("words") output.text.addElement(P(stylename=style_p, text="_" * 30)) output.text.addElement(P(stylename=style_p, text=f"page {page_num+1}")) for i in range(rects.shape[0]): if hierarchy[i, 3] == -1: output.text.addElement(P(stylename=style_p, text="")) rect = Rect(rects[i, 0], rects[i, 1], rects[i, 2], rects[i, 3]) mywords = [w for w in words if Rect(w[:4]) in rect] mywords.sort(key=itemgetter(3, 0)) # sort by y1, x0 of the word rect group = groupby(mywords, key=itemgetter(3)) out_text = P(stylename=style_p, text="") for y1, gwords in group: out_text.addText(" ".join(w[4] for w in gwords).replace("\n", " ")) out_text.addText(" ") output.text.addElement(out_text) if hierarchy[i, 3] != -1: output.text.addElement(P(stylename=style_p, text="")) out_img = P() #ncc=int(hierarchy[i,3]) ncc = i clip = Rect(rects[ncc, 0], rects[ncc, 1], rects[ncc, 2], rects[ncc, 3]) pix = page.getPixmap(matrix=Matrix(2, 2), clip=clip) name_image = f"Pictures/image-{page.number}-{i}.png" #liste_tampon.append(name_tampon) #pix.writePNG(name_image) pix_png = pix.getPNGData() h = pix.height / pix.xres w = pix.width / pix.yres frame = Frame(width=f"{w}in", height=f"{h}in", anchortype="paragraph") href = output.addPicture(name_image, mediatype="png", content=pix_png) # frame.addElement(Image(href=f"./{href}")) out_img.addElement(frame) output.text.addElement(out_img) return output
def signature_attestation(attestation, jury): """ Ajoute la signature du chef d'établissement et le tampon de l'établissement sur les attestations passées en argument. Si plusieurs attestations sont présentes dans le document, on n'ajoute qu'une seule fois les images dans le fichier. Cette fonction modifie sur place le paramètre attestation. """ # Substitution des images (signature du chef et tampon du lycée) remplacement_images = { 'signature_proviseur': jury.classe.etablissement.chef_etablissement.signature, 'tampon_lycee': jury.classe.etablissement.tampon_etablissement, } remplacement_href = {} for frame in attestation.getElementsByType(Frame): frame_name = frame.getAttrNS(odf.namespaces.DRAWNS, 'name') if not remplacement_images.get(frame_name): continue # Si c'est la première fois que l'on voit cette image, on # l'attache au fichier. if frame_name not in remplacement_href: remplacement_href[frame_name] = attestation.addPicture( filename="Pictures/{name}{ext}".format( name=frame_name, ext=os.path.splitext( remplacement_images[frame_name].name)[1]), content=remplacement_images[frame_name].read()) for child in frame.childNodes: if child.nodeType == child.ELEMENT_NODE: child.parentNode.removeChild(child) Image(parent=frame, href=remplacement_href[frame_name]) # Un bug de odfpy fait que le cache d'éléments n'est plus à jour à # case de l'ajout des objets Image dans la boucle précédente. On # vide ce cache de force sinon l'appel suivant de getElementsByType # échoue et renvoie une liste vide. attestation.clear_caches()
def write_image(image): """Write to output file image elements. Since, element with title 'Image' has special structure of 'c'(Content) field, that looks like: [[0], [1], [2]] where: [0] - list of attributes: identifier, classes, key-value pairs: ['id', [], [ ... , ['weight', '...in'], ['height', '...in'], ... ] - we get sizes there. [1] - caption. [2] - ['src', 'title'] - source and title of image. we should parse it especially. Args: image - element with title 'Image'. """ global image_counter global saved_hr if image_counter == -1: return if image_counter == 0: saved_hr = load_images(args.input, ods) if len(saved_hr) == 0: image_counter = -1 return if string_to_write: write_text() row = TableRow() cell = TableCell() w, h = count_size(image['c'][0][2], row) frame = Frame(width=w, height=h) img = Image(href=saved_hr[image_counter]) table.addElement(row) row.addElement(cell) cell.addElement(frame) frame.addElement(img) image_counter = image_counter + 1
def addImageHeaderFooter(self,header=None,footer=None): if header or footer: mp = MasterPage(name="Standard", pagelayoutname=self.pliheaderstyle) self.textdoc.masterstyles.addElement(mp) if header: h = Header() p = P() href = self.textdoc.addPicture(header) f = Frame(name="membrete", anchortype="paragraph", width="17cm", height="1.5cm", zindex="0") p.addElement(f) img = Image(href=href, type="simple", show="embed", actuate="onLoad") f.addElement(img) h.addElement(p) mp.addElement(h) if footer: fo = Footer() pn = PageNumber() fp = P(text=footer,stylename=self.footercenterstyle)#FIXME: Pagen number shoulb be better fp.addElement(pn) fo.addElement(fp) mp.addElement(fo)
if w > 720: h = float(h) * 720.0 / float(w) w = 720.0 if h > 540.0: w = float(w) * 540.0 / float(h) h = 540.0 page = Page(stylename=dpstyle, masterpagename=masterpage) doc.presentation.addElement(page) titleframe = Frame(stylename=titlestyle, width="720pt", height="56pt", x="40pt", y="10pt") page.addElement(titleframe) textbox = TextBox() titleframe.addElement(textbox) textbox.addElement(P(text=picture)) offsetx = 400.0 - w / 2.0 photoframe = Frame(stylename=photostyle, width="%fpt" % w, height="%fpt" % h, x="%fpt" % offsetx, y="56pt") page.addElement(photoframe) href = doc.addPicture(pict_dir + "/" + picture) photoframe.addElement(Image(href=href)) doc.save(outputfile)
def do_job(job): """Do something""" warnings = get_warnings(job['sts'], job['ets'], job['wfo'], job['wtype']) mydir = "%s/%s" % (TMPDIR, job['jobid']) if not os.path.isdir(mydir): os.makedirs(mydir) os.chdir(mydir) basefn = "%s-%s-%s-%s-%s" % (job['wfo'], job['wtype'].replace( ",", "_"), job['radar'], job['sts'].strftime("%Y%m%d%H"), job['ets'].strftime("%Y%m%d%H")) outputfile = "%s.odp" % (basefn, ) doc = OpenDocumentPresentation() # We must describe the dimensions of the page pagelayout = PageLayout(name="MyLayout") doc.automaticstyles.addElement(pagelayout) pagelayout.addElement( PageLayoutProperties(margin="0pt", pagewidth="800pt", pageheight="600pt", printorientation="landscape")) # Style for the title frame of the page # We set a centered 34pt font with yellowish background titlestyle = Style(name="MyMaster-title2", family="presentation") titlestyle.addElement(ParagraphProperties(textalign="center")) titlestyle.addElement(TextProperties(fontsize="34pt")) titlestyle.addElement(GraphicProperties(fillcolor="#ffff99")) doc.styles.addElement(titlestyle) # Style for the title frame of the page # We set a centered 34pt font with yellowish background indexstyle = Style(name="MyMaster-title", family="presentation") indexstyle.addElement(ParagraphProperties(textalign="center")) indexstyle.addElement(TextProperties(fontsize="28pt")) indexstyle.addElement(GraphicProperties(fillcolor="#ffffff", stroke="none")) doc.styles.addElement(indexstyle) # Style for the photo frame photostyle = Style(name="MyMaster-photo", family="presentation") doc.styles.addElement(photostyle) # Every drawing page must have a master page assigned to it. masterpage = MasterPage(name="MyMaster", pagelayoutname=pagelayout) doc.masterstyles.addElement(masterpage) dpstyle = Style(name="dp1", family="drawing-page") # dpstyle.addElement(DrawingPageProperties(transitiontype="automatic", # transitionstyle="move-from-top", duration="PT5S")) doc.automaticstyles.addElement(dpstyle) # Title slide page = Page(masterpagename=masterpage) doc.presentation.addElement(page) frame = Frame(stylename=indexstyle, width="720pt", height="500pt", x="40pt", y="10pt") page.addElement(frame) textbox = TextBox() frame.addElement(textbox) textbox.addElement(P(text="IEM Raccoon Report")) frame = Frame(stylename=indexstyle, width="720pt", height="500pt", x="40pt", y="150pt") page.addElement(frame) textbox = TextBox() frame.addElement(textbox) textbox.addElement(P(text="WFO: %s" % (job['wfo'], ))) textbox.addElement( P(text=("Radar: %s Product: %s" "") % (job['radar'], job['nexrad_product']))) textbox.addElement(P(text="Phenomenas: %s" % (job['wtype'], ))) textbox.addElement( P(text="Start Time: %s UTC" % (job['sts'].strftime("%d %b %Y %H"), ))) textbox.addElement( P(text="End Time: %s UTC" % (job['ets'].strftime("%d %b %Y %H"), ))) textbox.addElement(P(text="")) textbox.addElement(P(text="Raccoon Version: %s" % (__REV__, ))) textbox.addElement( P(text="Generated on: %s" % (datetime.datetime.utcnow().strftime("%d %b %Y %H:%M %Z")))) textbox.addElement(P(text="")) textbox.addElement( P(text="Bugs/Comments/Yelling?: daryl herzmann [email protected]")) i = 0 for warning in warnings: # Make Index page for the warning page = Page(masterpagename=masterpage) doc.presentation.addElement(page) titleframe = Frame(stylename=indexstyle, width="700pt", height="500pt", x="10pt", y="10pt") page.addElement(titleframe) textbox = TextBox() titleframe.addElement(textbox) textbox.addElement( P(text="%s.O.NEW.K%s.%s.W.%04i" % (job['sts'].year, job['wfo'], warning['phenomena'], warning['eventid']))) textbox.addElement( P(text="Issue: %s UTC" % (warning['issue'].strftime("%d %b %Y %H:%M"), ))) textbox.addElement( P(text="Expire: %s UTC" % (warning['expire'].strftime("%d %b %Y %H:%M"), ))) textbox.addElement( P(text="Poly Area: %.1f sq km (%.1f sq mi) [%.1f%% vs County]" % (warning['polyarea'], warning['polyarea'] * 0.386102, warning['polyarea'] / warning['countyarea'] * 100.0))) textbox.addElement( P(text="County Area: %.1f square km (%.1f square miles)" % (warning['countyarea'], warning['countyarea'] * 0.386102))) url = ("http://iem.local/GIS/radmap.php?" "layers[]=places&layers[]=legend&layers[]=ci&layers[]=cbw" "&layers[]=sbw&layers[]=uscounties&layers[]=bufferedlsr" "&lsrbuffer=15") url += "&vtec=%s.O.NEW.K%s.%s.W.%04i" % (job['sts'].year, job['wfo'], warning['phenomena'], warning['eventid']) cmd = "wget -q -O %i.png '%s'" % (i, url) os.system(cmd) photoframe = Frame(stylename=photostyle, width="480pt", height="360pt", x="160pt", y="200pt") page.addElement(photoframe) href = doc.addPicture("%i.png" % (i, )) photoframe.addElement(Image(href=href)) i += 1 times = [] now = warning['issue'] while now < warning['expire']: times.append(now) now += datetime.timedelta(minutes=15) times.append(warning['expire'] - datetime.timedelta(minutes=1)) for now in times: page = Page(stylename=dpstyle, masterpagename=masterpage) doc.presentation.addElement(page) titleframe = Frame(stylename=titlestyle, width="720pt", height="56pt", x="40pt", y="10pt") page.addElement(titleframe) textbox = TextBox() titleframe.addElement(textbox) textbox.addElement( P(text="%s.W.%04i Time: %s UTC" % (warning['phenomena'], warning['eventid'], now.strftime("%d %b %Y %H%M")))) if job['nexrad_product'] == 'N0U': if now < SUPER_RES: n0qn0r = 'N0V' else: n0qn0r = 'N0U' else: if now < SUPER_RES: n0qn0r = 'N0R' else: n0qn0r = 'N0Q' url = "http://iem.local/GIS/radmap.php?" url += "layers[]=ridge&ridge_product=%s&ridge_radar=%s&" % ( n0qn0r, job['radar']) url += "layers[]=sbw&layers[]=sbwh&layers[]=uscounties&" url += "layers[]=lsrs&ts2=%s&" % (( now + datetime.timedelta(minutes=15)).strftime("%Y%m%d%H%M"), ) url += "vtec=%s.O.NEW.K%s.%s.W.%04i&ts=%s" % ( job['sts'].year, job['wfo'], warning['phenomena'], warning['eventid'], now.strftime("%Y%m%d%H%M")) cmd = "wget -q -O %i.png '%s'" % (i, url) os.system(cmd) photoframe = Frame(stylename=photostyle, width="640pt", height="480pt", x="80pt", y="70pt") page.addElement(photoframe) href = doc.addPicture("%i.png" % (i, )) photoframe.addElement(Image(href=href)) i += 1 doc.save(outputfile) del doc cmd = "unoconv -f ppt %s" % (outputfile, ) subprocess.call(cmd, shell=True) pptfn = "%s.ppt" % (basefn, ) print("Generated %s with %s slides" % (pptfn, i)) if os.path.isfile(pptfn): print('...copied to webfolder') shutil.copyfile(pptfn, "/mesonet/share/pickup/raccoon/%s" % (pptfn, )) # Cleanup os.chdir(TMPDIR) subprocess.call("rm -rf %s" % (job['jobid'], ), shell=True) else: print("Uh oh, no output file, lets kill soffice.bin") subprocess.call("pkill --signal 9 soffice.bin", shell=True) add_job(job)
def coursePage(coursename, data, lang): coursetitle = H(stylename=h2style, text=coursename, outlinelevel=2) textdoc.text.addElement(coursetitle) blankline = P(text="") textdoc.text.addElement(blankline) for diagramtype in [pie, percent]: p = P() textdoc.text.addElement(p) img_path = path + coursename + "-All" + diagramtype href = textdoc.addPicture(img_path) f = Frame(name=coursename + diagramtype, anchortype="paragraph", width="17cm", height="7.5cm", zindex="0") p.addElement(f) img = Image(href=href, type="simple", show="embed", actuate="onLoad") f.addElement(img) if lang == "eu": subjectsp = P(text="%70 baino gainditu gutxiago duten ikasgaiak:") else: subjectsp = P(text="Asignaturas con menos del %70 de aprobados:") textdoc.text.addElement(subjectsp) blankline = P(text="") textdoc.text.addElement(blankline) textList = List(stylename="L1") file = path + "ehunekoak-" + period + "-" + year + "-" + coursename + "None.csv" with open(file, 'r', encoding="UTF-8") as results: reader = csv.reader(results) headers = next(reader, None) # get first row with headers for row in reader: if float(row[1]) < 70 and row[0] != "All": item = ListItem() if lang == "eu": item.addElement( P(text=row[0] + ": " + "{:.2f}".format(float(row[1])) + "%")) else: item.addElement( P(text=ikasgai[row[0]] + ": " + "{:.2f}".format(float(row[1])) + "%")) textList.addElement(item) textdoc.text.addElement(textList) for courselang in data.keys(): coursetitle = H(stylename=h2style, text=coursename + "-" + courselang, outlinelevel=2) textdoc.text.addElement(coursetitle) blankline = P(text="") textdoc.text.addElement(blankline) for diagramtype in [pie, percent]: p = P() textdoc.text.addElement(p) img_path = path + coursename + "-" + courselang + diagramtype href = textdoc.addPicture(img_path) f = Frame(name=coursename + diagramtype + courselang, anchortype="paragraph", width="17cm", height="7.5cm", zindex="0") p.addElement(f) img = Image(href=href, type="simple", show="embed", actuate="onLoad") f.addElement(img) blankline = P(text="") textdoc.text.addElement(blankline) if lang == "eu": subjectsp = P(text="%70 baino gainditu gutxiago duten ikasgaiak:") else: subjectsp = P(text="Asignaturas con menos del %70 de aprobados:") textdoc.text.addElement(subjectsp) blankline = P(text="") textdoc.text.addElement(blankline) textList = List(stylename="L1") file = path + "ehunekoak-" + period + "-" + year + "-" + coursename + courselang + ".csv" with open(file, 'r', encoding="UTF-8") as results: reader = csv.reader(results) headers = next(reader, None) # get first row with headers for row in reader: if float(row[1]) < 70 and row[0] != "All": item = ListItem() if lang == "eu": item.addElement( P(text=row[0] + ": " + "{:.2f}".format(float(row[1])) + "%")) else: item.addElement( P(text=ikasgai[row[0]] + ": " + "{:.2f}".format(float(row[1])) + "%")) textList.addElement(item) textdoc.text.addElement(textList) for group in data[courselang]: if group in ["Bil", "Plur"]: #1 ESO-AG-AGBil - 2. Ebaluazioa (2019-2020) -percent-es g = coursename + "-" + courselang + "-" + courselang + group grouptitle = H(stylename=h3style, text=translation[group][lang], outlinelevel=3) textdoc.text.addElement(grouptitle) blankline = P(text="") textdoc.text.addElement(blankline) for diagramtype in [mean, percent]: #,name2]: p = P() textdoc.text.addElement(p) img_path = path + g + diagramtype href = textdoc.addPicture(img_path) f = Frame(name=group + diagramtype, anchortype="paragraph", width="17cm", height="7.5cm", zindex="0") p.addElement(f) img = Image(href=href, type="simple", show="embed", actuate="onLoad") f.addElement(img) else: groupPage(group, lang)
def groupPage(group, lang): grouptitle = H(stylename=h3style, text=group, outlinelevel=3) textdoc.text.addElement(grouptitle) blankline = P(text="") textdoc.text.addElement(blankline) if td != '': table = Table() table.addElement(TableColumn(numbercolumnsrepeated=2)) headers = [ translation['part'][lang], '2 ' + translation['period'][lang] ] #,"2. Ebaluazioa","Azken Ebaluazioa"] tr = TableRow() table.addElement(tr) for val in headers: tc = TableCell(stylename="Table") tr.addElement(tc) p = P(stylename=tableheaders, text=val) tc.addElement(p) #f = [["garbitasuna",3,6],["materiala",6,8],["Adostasuna", "Ez konforme","konforme"],["Harremanak1",7,8],["Harremanak2",6,7],["Adostasuna", "konforme","konforme"]] g = group.replace(". ", "") g = g.replace("º ", "") g = g.replace(".", "") g = g.replace("º", "") g = g.replace("° ", "") g = g.replace("°", "") g = g.replace(" ", "") g = g.replace("Bach1", "5") g = g.replace("Bach2", "6") g = g.replace("Batx1", "5") g = g.replace("Batx2", "6") f = td[g] for line in f: if "group" in line: #FIXME: If not all group tables contain a row with the group name (also in text header...) continue tr = TableRow() table.addElement(tr) for i, val in enumerate(line): if i == 0: tc = TableCell(stylename="Table") tr.addElement(tc) p = P(stylename=tablecontents, text=translation[val][lang]) elif val == "EzKonforme": tc = TableCell(stylename="Table") tr.addElement(tc) p = P(stylename=tablecontentscenterred, text=translation[val][lang]) elif val == "Konforme": tc = TableCell(stylename="Table") tr.addElement(tc) p = P(stylename=tablecontentscenter, text=translation[val][lang]) else: tc = TableCell(stylename="Table") tr.addElement(tc) if isinstance(val, numbers.Number): val = round(val, 1) p = P(stylename=tablecontentscenter, text=val) tc.addElement(p) textdoc.text.addElement(table) blankline = P(text="") textdoc.text.addElement(blankline) if lang == "eu": subjectsp = P(text="%70 baino gainditu gutxiago duten ikasgaiak:") else: subjectsp = P(text="Asignaturas con menos del %70 de aprobados:") textdoc.text.addElement(subjectsp) blankline = P(text="") textdoc.text.addElement(blankline) textList = List(stylename="L1") file = path + "ehunekoak-" + period + "-" + year + "-" + group + ".csv" with open(file, 'r', encoding="UTF-8") as results: reader = csv.reader(results) headers = next(reader, None) # get first row with headers for row in reader: if float(row[1]) < 70 and row[0] != "All": item = ListItem() if lang == "eu": item.addElement( P(text=row[0] + ": " + "{:.2f}".format(float(row[1])) + "%")) else: item.addElement( P(text=ikasgai[row[0]] + ": " + "{:.2f}".format(float(row[1])) + "%")) textList.addElement(item) textdoc.text.addElement(textList) breakpage = P(stylename=withbreak, text="") textdoc.text.addElement(breakpage) for diagramtype in [pie, percent]: #,name2]: p = P() textdoc.text.addElement(p) img_path = path + group + diagramtype href = textdoc.addPicture(img_path) f = Frame(name=group + diagramtype, anchortype="paragraph", width="17cm", height="7.5cm", zindex="0") p.addElement(f) img = Image(href=href, type="simple", show="embed", actuate="onLoad") f.addElement(img)
'D': ['Batx.2H', 'Batx.2I'] } }) courses = [ '1 ESO', '2 ESO', '2º PMAR', '3 ESO', '3º PMAR', '4 ESO', '1º Bach.', '2º Bach.' ] #courses = ['2º Bach.'] for k in courses: coursePage(k, coursegroups[k], lang) title = H(stylename=h1style, text="Promoción", outlinelevel=1) textdoc.text.addElement(title) for k in courses: p = P() textdoc.text.addElement(p) img_path = path + k + "-allgroupsprom.png" href = textdoc.addPicture(img_path) f = Frame(name=k, anchortype="paragraph", width="17cm", height="7.5cm", zindex="0") p.addElement(f) img = Image(href=href, type="simple", show="embed", actuate="onLoad") f.addElement(img) textdoc.save(period + year + "/report-" + period + year + "-" + lang + ".odt")
def process_user_image_files(emailaddr): pagewidth = 800 pageheight = 600 logging.debug("cur_path %s" % (os.path.realpath('.'),) ) odpfile = 'frieda_%s_%s.odp' % (emailaddr, time.strftime('%b_%d_%Y_%I%M%P')) ppt_content = [] file_list = [] for wroot, wsubdir, wfiles in os.walk('.'): wfiles = sort_files_by_time(wfiles, wroot) wsubdir = sort_files_by_time(wsubdir, wroot) cnt = 0 for f in wfiles: cnt += 1 file_list.append(os.path.join(wroot, f)) if cnt != 0: wroot2 = '/' if len(wroot) < 2 else wroot[1:] ppt_content.append((wroot2, cnt)) logging.debug('file_list: %r' % file_list) doc = OpenDocumentPresentation() pagelayout = PageLayout(name="MyLayout") pagelayout.addElement(PageLayoutProperties(backgroundcolor="#000000", margin="0pt", pagewidth="%dpt" %pagewidth, pageheight="%dpt" % pageheight, printorientation="landscape")) doc.automaticstyles.addElement(pagelayout) photostyle = Style(name="RadTeaching-photo", family="presentation") doc.styles.addElement(photostyle) dstyle = Style(name="d", family="drawing-page") dstyle.addElement(GraphicProperties(fillcolor="#000000")) dstyle.addElement(DrawingPageProperties(fill=True, fillcolor="#000000")) doc.automaticstyles.addElement(dstyle) masterpage = MasterPage(name="RadTeaching", pagelayoutname=pagelayout) doc.masterstyles.addElement(masterpage) images_added = 0 # os.chdir(subdir) for picture in file_list: try: pictdata = open(picture).read() logging.debug("Adding %s" % (picture)) except: logging.debug("Skipping %s" % (picture)) continue ct,w,h = getImageInfoFileName(picture) if ct == 'not image': if picture[-4:] == '.dcm': png_picture = picture.replace('.dcm','.png') logging.debug("Converting %s to %s" % (picture, png_picture) ) run_command(""" dcmj2pnm +on +Wi 1 %s %s """ % (picture, png_picture)) picture = png_picture ct,w,h = getImageInfoFileName(picture) if ct not in ("jpeg", "jpg", "tiff", "png", "bmp", "gif", "tif"): logging.debug("Skipping %s unrecognized type %s" % (picture,ct) ) continue if ct == "tiff" or ct == "tif": png_picture = picture.replace(".tiff",".tif").replace(".tif", ".png") logging.debug("Converting %s to %s" % (picture, png_picture)) img = PythonMagick.Image() img.read(picture) if img.depth() > 8: # powerpoint can't handle 16 bit TIFF images. img.write(png_picture) del img picture = png_picture ct,w,h = getImageInfoFileName(picture) images_added += 1 if w*pageheight > h*pagewidth: #check if width or height is limit to zooming h = float(h) * (pagewidth-2.0)/float(w) w = pagewidth - 2.0 else: w = float(w)*(pageheight-2.0) / float(h) h = pageheight -2.0 page = Page(stylename=dstyle, masterpagename=masterpage) doc.presentation.addElement(page) offsetx = (pagewidth - w)/2.0 offsety = (pageheight - h)/2.0 photoframe = Frame(stylename=photostyle, width='%fpt' % w, height='%fpt' % h, x = '%fpt' % offsetx, y='%fpt' % offsety) page.addElement(photoframe) href = doc.addPicture(picture) photoframe.addElement(Image(href=href)) if images_added > 0: logging.debug('Saving ODP as %s/%s' % (os.path.realpath('.'), odpfile)) doc.save(odpfile) return (odpfile, images_added, ppt_content) if images_added > 0 else (False, 0, None)
def opIn(self, opt: Union[float, str, "odf.element.Element", List, "AQOdsImage"]): """ Add options to the line. @param opt. Line options, each cell ends with the value assignment """ from odf.text import P, Span # type: ignore from odf.draw import Frame, Image # type: ignore if isinstance(opt, float): if self.fix_precision_ is not None: opt = "%s" % round(opt, self.fix_precision_) else: opt = "%s" % opt if isinstance(opt, str): # Último paso cell, style = self.__newCell__() if self.style_cell_text_: text_elem = P(text="") txt_ = Span(stylename=self.style_cell_text_, text=opt) text_elem.addElement(txt_) else: text_elem = P(text=opt) self.sheet_.spread_sheet_parent_.automaticstyles.addElement(style) cell.addElement(text_elem) self.cells_list_.append(cell) self.fix_precision_ = None self.style_cell_text_ = None else: if isinstance(opt, list): # Si es lista , Insertamos todos los parámetros uno a uno for l in opt: self.opIn(l) elif isinstance(opt, AQOdsImage): href = self.sheet_.spread_sheet_parent_.addPictureFromFile(opt.link_) cell, style = self.__newCell__() # p = P() frame = Frame( width="%spt" % opt.width_, height="%spt" % opt.height_, x="%spt" % opt.x_, y="%spt" % opt.y_, ) frame.addElement(Image(href=href)) # p.addElement(frame) cell.addElement(frame) self.cells_list_.append(cell) # self.coveredCell() # self.opIn(href) # print("FIXME:: Vacio", href) elif isinstance(opt, odf.element.Element): if opt.tagName in ("style:paragraph-properties", "style:table-cell-properties"): import copy prop = copy.copy(opt) self.property_cell_.append(prop) elif opt.tagName == "style:style": self.sheet_.spread_sheet_parent_.automaticstyles.addElement(opt) self.style_cell_text_ = opt else: logger.warning("%s:Parámetro desconocido %s", __name__, opt.tagName)
def Page_Rect_get_Text_odf(doc, page_num, rects, hierarchy, Xrects, output, style_p, style_i, img_quality, col): page = doc[page_num] words = page.getText("words") output.text.addElement(P(stylename=style_p, text="_" * 60)) if col == 1 or col == 2: output.text.addElement( P(stylename=style_p, text=f"page {page_num+1} - column {col}")) else: output.text.addElement(P(stylename=style_p, text=f"page {page_num+1}")) for i in range(rects.shape[0]): if hierarchy[i, 3] == -1: rect = Rect(rects[i, 0], rects[i, 1], rects[i, 2], rects[i, 3]) allwords = [w for w in words if Rect(w[:4]) in rect] # iterate over all rects to exclude mywords = [] for w in allwords: exclude = 0 for Xrect in Xrects: xg = (w[0] + w[2]) / 2 yg = (w[1] + w[3]) / 2 if Rect(Xrect).contains((xg, yg)): exclude = 1 if exclude == 0: mywords.append(w) mywords.sort(key=itemgetter(3, 0)) # sort by y1, x0 of the word rect group = groupby(mywords, key=itemgetter(3)) output.text.addElement(P(stylename=style_p, text="")) out_text = P(stylename=style_p, text="") for y1, gwords in group: out_text.addText(" ".join(w[4] for w in gwords).replace("\n", " ")) out_text.addText(" ") output.text.addElement(out_text) if hierarchy[i, 3] != -1: clip = Rect(rects[i, 0], rects[i, 1], rects[i, 2], rects[i, 3]) #taking into account quality img_qual = img_quality / 50. pix = page.getPixmap(matrix=Matrix(img_qual, img_qual), clip=clip) name_image = f"Pictures/image-{page.number}-{col}{i}.png" pix_png = pix.getPNGData() h = pix.height / pix.xres w = pix.width / pix.yres #if quality is larger than 2 keep the frame the same as if it was 2 h *= 2 / img_qual w *= 2 / img_qual #if image is too small (h<20px) it is probably an artifact #so do not print it if pix.height * 2 / img_qual > 20: output.text.addElement(P(stylename=style_p, text="")) out_img = P() frame = Frame(stylename=style_i, width=f"{w}in", height=f"{h}in", anchortype="paragraph") href = output.addPicture(name_image, mediatype="png", content=pix_png) # frame.addElement(Image(href=f"./{href}")) out_img.addElement(frame) output.text.addElement(out_img) return output