06 01 2018 Python powerpoint Tweet
風邪をひいたようです。自覚症状ないから気づかなかった。
python-pptxも良いけど、markdownで書いたのがPowerPointの任意のテンプレート上にさくっと反映できないかあ。邪道なのかな_(┐「ε:)_
— じょん (@no85j) 2018年1月5日
こんな感じで如何?handle_dataメソッドでタグの情報持てないから、ちょっと考えた。HTMLパーサーよりはXMLパーサーのほうがやりやすい気もする。
from markdown import Markdown from html.parser import HTMLParser from pptx import Presentation class MyHTMLParser(HTMLParser): def __init__(self): super(MyHTMLParser, self).__init__() self.prs = Presentation() self.tags = [] self.slide = "" def handle_starttag(self, tag, attrs): if tag == "h1": slide = self.prs.slides.add_slide(self.prs.slide_layouts[0]) self.slide = slide self.tags.append(tag) elif tag == "h2": slide = self.prs.slides.add_slide(self.prs.slide_layouts[1]) self.slide = slide self.tags.append(tag) elif tag == "h3": self.tags.append(tag) else: print("Encountered a start tag:", tag) def handle_endtag(self, tag): pass def handle_data(self, data): if len(self.tags) > 0: tag = self.tags.pop() if tag == "h1": self.slide.shapes.title.text = data elif tag == "h2": self.slide.shapes.title.text = data elif tag == "h3": p = self.slide.shapes.placeholders[1].text_frame.add_paragraph() p.text = data else: print("Encountered some data :", data) def close(self): self.prs.save("sample.pptx") def md2pptx(md_txt): md = Markdown() parser = MyHTMLParser() parser.feed(md.convert(md_txt)) parser.close() sample_md = ''' my sample slide =============== title of a Content slide ------------------------ ### this paragraph ### that paragraph ### the other paragraph another title of a Content slide ------------------------ ### this paragraph ### that paragraph ### the other paragraph ''' if __name__ == '__main__': md2pptx(sample_md)